summaryrefslogtreecommitdiff
path: root/source4/lib
diff options
context:
space:
mode:
Diffstat (limited to 'source4/lib')
-rw-r--r--source4/lib/util_sock.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/source4/lib/util_sock.c b/source4/lib/util_sock.c
index 43da8a2f57..8c9a140746 100644
--- a/source4/lib/util_sock.c
+++ b/source4/lib/util_sock.c
@@ -195,10 +195,13 @@ ssize_t read_data(int fd, char *buffer, size_t N)
while (total < N) {
ret = sys_read(fd,buffer + total,N - total);
if (ret == 0) {
- return 0;
+ return total;
}
if (ret == -1) {
- return -1;
+ if (total == 0) {
+ return -1;
+ }
+ return total;
}
total += ret;
}
@@ -222,10 +225,14 @@ ssize_t write_data(int fd, const char *buffer, size_t N)
while (total < N) {
ret = sys_write(fd, buffer + total, N - total);
if (ret == -1) {
- return -1;
+ if (total == 0) {
+ return -1;
+ }
+ return total;
}
- if (ret == 0)
+ if (ret == 0) {
return total;
+ }
total += ret;
}