diff options
author | Volker Lendecke <vl@samba.org> | 2015-10-29 14:27:32 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2015-10-30 22:53:56 +0100 |
commit | 9e87465a750e625e8a3801346922981cb4871547 (patch) | |
tree | 802c907ea936959317fbd9b09f530e35aa3b0f53 | |
parent | db9e10d071793b91b3f3d40225a8634e3c34f65e (diff) | |
download | samba-9e87465a750e625e8a3801346922981cb4871547.tar.gz |
smbd: Fix/simplify scavenger routines
Use read_data/write_data, "ofs" was not incremented
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Oct 30 22:53:56 CET 2015 on sn-devel-104
-rw-r--r-- | source3/smbd/scavenger.c | 47 |
1 files changed, 20 insertions, 27 deletions
diff --git a/source3/smbd/scavenger.c b/source3/smbd/scavenger.c index 6171c29b398..9f58f62fc06 100644 --- a/source3/smbd/scavenger.c +++ b/source3/smbd/scavenger.c @@ -26,7 +26,7 @@ #include "smbd/scavenger.h" #include "locking/proto.h" #include "lib/util/util_process.h" -#include "lib/util/sys_rw.h" +#include "lib/util/sys_rw_data.h" #undef DBGC_CLASS #define DBGC_CLASS DBGC_SCAVENGER @@ -144,21 +144,17 @@ static int smbd_scavenger_server_id_destructor(struct server_id *id) static bool scavenger_say_hello(int fd, struct server_id self) { - const uint8_t *msg = (const uint8_t *)&self; - size_t remaining = sizeof(self); - size_t ofs = 0; + ssize_t ret; struct server_id_buf tmp; - while (remaining > 0) { - ssize_t ret; - - ret = sys_write(fd, msg + ofs, remaining); - if (ret == -1) { - DEBUG(2, ("Failed to write to pipe: %s\n", - strerror(errno))); - return false; - } - remaining -= ret; + ret = write_data(fd, &self, sizeof(self)); + if (ret == -1) { + DEBUG(2, ("Failed to write to pipe: %s\n", strerror(errno))); + return false; + } + if (ret < sizeof(self)) { + DBG_WARNING("Could not write serverid\n"); + return false; } DEBUG(4, ("scavenger_say_hello: self[%s]\n", @@ -168,21 +164,18 @@ static bool scavenger_say_hello(int fd, struct server_id self) static bool scavenger_wait_hello(int fd, struct server_id *child) { - uint8_t *msg = (uint8_t *)child; - size_t remaining = sizeof(*child); - size_t ofs = 0; struct server_id_buf tmp; + ssize_t ret; - while (remaining > 0) { - ssize_t ret; - - ret = sys_read(fd, msg + ofs, remaining); - if (ret == -1) { - DEBUG(2, ("Failed to read from pipe: %s\n", - strerror(errno))); - return false; - } - remaining -= ret; + ret = read_data(fd, child, sizeof(struct server_id)); + if (ret == -1) { + DEBUG(2, ("Failed to read from pipe: %s\n", + strerror(errno))); + return false; + } + if (ret < sizeof(struct server_id)) { + DBG_WARNING("Could not read serverid\n"); + return false; } DEBUG(4, ("scavenger_say_hello: child[%s]\n", |