X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fensc_wrappers%2Fwrappers-io.hc;h=3b212e68a13a392fa249d82848e97639f7332b67;hb=e96095c2d00440315e0adaa32a58389d001e3d5e;hp=ddfa3921ec6d79bc5c56ba5ce9bdedbc15bf6817;hpb=c66b2f97361761b8a87058dc7a49ab59d4520556;p=util-vserver.git diff --git a/util-vserver/ensc_wrappers/wrappers-io.hc b/util-vserver/ensc_wrappers/wrappers-io.hc index ddfa392..3b212e6 100644 --- a/util-vserver/ensc_wrappers/wrappers-io.hc +++ b/util-vserver/ensc_wrappers/wrappers-io.hc @@ -23,19 +23,19 @@ #include inline static UNUSED bool -WwriteAll(int fd, void const *ptr_v, size_t len) +WwriteAll(int fd, void const *ptr_v, size_t len, int *err) { register char const *ptr = ptr_v; + if (err) *err = 0; + while (len>0) { - size_t res = TEMP_FAILURE_RETRY(write(fd, ptr, len)); - if (res==(size_t)-1) { - perror("write()"); + ssize_t res = TEMP_FAILURE_RETRY(write(fd, ptr, len)); + if (res<=0) { + if (err) *err = errno; return false; } - if (res==0) return false; - ptr += res; len -= res; } @@ -58,14 +58,16 @@ EwriteAll(int fd, void const *ptr_v, size_t len) inline static UNUSED bool -WreadAll(int fd, void *ptr_v, size_t len) +WreadAll(int fd, void *ptr_v, size_t len, int *err) { register char *ptr = ptr_v; - + + if (err) *err = 0; + while (len>0) { - size_t res = TEMP_FAILURE_RETRY(read(fd, ptr, len)); - if (res==(size_t)-1) { - perror("read()"); + ssize_t res = TEMP_FAILURE_RETRY(read(fd, ptr, len)); + if (res==-1) { + if (err) *err = errno; return false; }