Signed-off-by: Christian Seiler <christ...@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 ------------------------------------------------------------------------------ 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 Lxc-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/lxc-devel