Signed-off-by: Christian Seiler <[email protected]>
---
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
------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
Lxc-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/lxc-devel