aboutsummaryrefslogtreecommitdiff
path: root/src/server_reqs.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2016-01-22 19:14:06 -0500
committerFranklin Wei <git@fwei.tk>2016-01-22 19:14:06 -0500
commitf2a04d689ad656c0ef915261025cb0ce534c4c48 (patch)
tree7bbca8c06d2443c1ed7b4a6241e696b9362a7de9 /src/server_reqs.c
parentb33d9c81c116d43b38ceb8b247bd77f9736574b9 (diff)
downloadnetcosm-f2a04d689ad656c0ef915261025cb0ce534c4c48.zip
netcosm-f2a04d689ad656c0ef915261025cb0ce534c4c48.tar.gz
netcosm-f2a04d689ad656c0ef915261025cb0ce534c4c48.tar.bz2
netcosm-f2a04d689ad656c0ef915261025cb0ce534c4c48.tar.xz
static analysis is *AWESOME*!
Diffstat (limited to 'src/server_reqs.c')
-rw-r--r--src/server_reqs.c9
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));
}