diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2016-01-22 19:14:06 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2016-01-22 19:14:06 -0500 |
| commit | 1548e6c2e577195c2593358fa3eab6026341839c (patch) | |
| tree | 7bbca8c06d2443c1ed7b4a6241e696b9362a7de9 /src/server_reqs.c | |
| parent | 07941f25ebbb4870c1c90bf5b3d807c767f9e759 (diff) | |
| download | netcosm-1548e6c2e577195c2593358fa3eab6026341839c.zip netcosm-1548e6c2e577195c2593358fa3eab6026341839c.tar.gz netcosm-1548e6c2e577195c2593358fa3eab6026341839c.tar.bz2 netcosm-1548e6c2e577195c2593358fa3eab6026341839c.tar.xz | |
static analysis is *AWESOME*!
Diffstat (limited to 'src/server_reqs.c')
| -rw-r--r-- | src/server_reqs.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/server_reqs.c b/src/server_reqs.c index bf661b9..5a15812 100644 --- a/src/server_reqs.c +++ b/src/server_reqs.c @@ -22,16 +22,17 @@ #include "server.h" #include "userdb.h" +/* sends a single packet to a child, virtually guarantees receipt */ static void send_packet(struct child_data *child, unsigned char cmd, void *data, size_t datalen) { assert(datalen < MSG_MAX); unsigned char pkt[MSG_MAX]; pkt[0] = cmd; - if(datalen) + if(data && datalen) memcpy(pkt + 1, data, datalen); tryagain: - if(write(child->outpipe[1], pkt, datalen + 1) < 0) + if(write(child->outpipe[1], pkt, (data?datalen:0) + 1) < 0) { /* write can fail, so we try again */ if(errno == EAGAIN) @@ -70,9 +71,9 @@ static void req_send_clientinfo(unsigned char *data, size_t datalen, inet_ntoa(child->addr), child->pid, state[child->state]); if(sender->pid == child->pid) - strncat(buf, " [YOU]\n", sizeof(buf) - 1); + strncat(buf, " [YOU]\n", sizeof(buf) - strlen(buf) - 1); else - strncat(buf, "\n", sizeof(buf) - 1); + strncat(buf, "\n", sizeof(buf) - strlen(buf) - 1); send_packet(sender, REQ_BCASTMSG, buf, strlen(buf)); } |