[lxc-devel] [PATCH 4/5] Implement simple utility functions for reading and writing to fds

Christian Seiler christian at iwakd.de
Mon May 20 15:54:23 UTC 2013


Signed-off-by: Christian Seiler <christian at iwakd.de>
---
 src/lxc/utils.c |   35 +++++++++++++++++++++++++++++++++++
 src/lxc/utils.h |    5 +++++
 2 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index 66bd19d..cd35e00 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -281,3 +281,38 @@ again:
 		goto again;
 	return status;
 }
+
+int lxc_write_nointr(int fd, const void* buf, size_t count)
+{
+	int ret;
+again:
+	ret = write(fd, buf, count);
+	if (ret < 0 && errno == EINTR)
+		goto again;
+	return ret;
+}
+
+int lxc_read_nointr(int fd, void* buf, size_t count)
+{
+	int ret;
+again:
+	ret = read(fd, buf, count);
+	if (ret < 0 && errno == EINTR)
+		goto again;
+	return ret;
+}
+
+int lxc_read_nointr_expect(int fd, void* buf, size_t count, const void* expected_buf)
+{
+	int ret;
+	ret = lxc_read_nointr(fd, buf, count);
+	if (ret <= 0)
+		return ret;
+	if (ret != count)
+		return -1;
+	if (expected_buf && memcmp(buf, expected_buf, count) != 0) {
+		errno = EINVAL;
+		return -1;
+	}
+	return ret;
+}
diff --git a/src/lxc/utils.h b/src/lxc/utils.h
index be1a8a8..d1242b1 100644
--- a/src/lxc/utils.h
+++ b/src/lxc/utils.h
@@ -68,4 +68,9 @@ extern int __build_bug_on_failed;
 extern int wait_for_pid(pid_t pid);
 extern int lxc_wait_for_pid_status(pid_t pid);
 
+/* send and receive buffers completely */
+extern int lxc_write_nointr(int fd, const void* buf, size_t count);
+extern int lxc_read_nointr(int fd, void* buf, size_t count);
+extern int lxc_read_nointr_expect(int fd, void* buf, size_t count, const void* expected_buf);
+
 #endif
-- 
1.7.8.6





More information about the lxc-devel mailing list