ctdb-common: Copy functions sys_read() and sys_write() from source3
authorMartin Schwenke <martin@meltin.net>
Wed, 30 Jul 2014 10:50:59 +0000 (20:50 +1000)
committerAmitay Isaacs <amitay@samba.org>
Thu, 21 Aug 2014 02:46:13 +0000 (04:46 +0200)
We really should extricate these from source3 and into some common
code.  However, just copy them for now to help get rid of a lot of
warnings.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/common/system_util.c
ctdb/include/ctdb_private.h

index fe0f403f483c4fafcd623ba520e0030387a732f2..344e7d797e4b47587c4a36110bd793731e3a447e 100644 (file)
@@ -369,3 +369,37 @@ void mkdir_p_or_die(const char *dir, int mode)
                exit(1);
        }
 }
+
+/* A read wrapper that will deal with EINTR.  For now, copied from
+ * source3/lib/system.c
+ */
+ssize_t sys_read(int fd, void *buf, size_t count)
+{
+        ssize_t ret;
+
+        do {
+                ret = read(fd, buf, count);
+#if defined(EWOULDBLOCK)
+        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
+        return ret;
+}
+
+/* A write wrapper that will deal with EINTR.  For now, copied from
+ * source3/lib/system.c
+ */
+ssize_t sys_write(int fd, const void *buf, size_t count)
+{
+        ssize_t ret;
+
+        do {
+                ret = write(fd, buf, count);
+#if defined(EWOULDBLOCK)
+        } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
+#else
+        } while (ret == -1 && (errno == EINTR || errno == EAGAIN));
+#endif
+        return ret;
+}
index 416cf56f2f02593060a1d37d7d50f46992e0c833..36ebe70ac0f06fa8241d3f8ff7ab128c275b1493 100644 (file)
@@ -1607,4 +1607,7 @@ struct lock_request *ctdb_lock_alldb(struct ctdb_context *ctdb,
 int mkdir_p(const char *dir, int mode);
 void mkdir_p_or_die(const char *dir, int mode);
 
+ssize_t sys_read(int fd, void *buf, size_t count);
+ssize_t sys_write(int fd, const void *buf, size_t count);
+
 #endif