diff options
author | 2019-05-21 20:04:30 +0300 | |
---|---|---|
committer | 2019-05-21 20:14:31 +0300 | |
commit | cce1aad04a2ce4ea0447ec8f3f4c41a8936d4a1a (patch) | |
tree | de9b03a434cb8f15ca9504c2d8b5cd03b99636fc /src/daemon/net.c | |
parent | 98a5917e7700a24d30ff8aed8d91392309bea40f (diff) | |
download | usurpation-cce1aad04a2ce4ea0447ec8f3f4c41a8936d4a1a.tar.gz usurpation-cce1aad04a2ce4ea0447ec8f3f4c41a8936d4a1a.tar.bz2 usurpation-cce1aad04a2ce4ea0447ec8f3f4c41a8936d4a1a.zip |
daemon: net: getlastdata now allocates a buffer.
Signed-off-by: Gediminas Jakutis <gediminas@varciai.lt>
Diffstat (limited to 'src/daemon/net.c')
-rw-r--r-- | src/daemon/net.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/daemon/net.c b/src/daemon/net.c index 3b4f022..9180344 100644 --- a/src/daemon/net.c +++ b/src/daemon/net.c @@ -94,9 +94,9 @@ int net_init(const unsigned short int port) state[i].lastreply.tv_sec -= 5; state[i].nd = i + 1; state[i].port = port; - state[i].data = malloc(dgsize); - memset(state[i].data, 0, dgsize); - state[i].bufsize = dgsize; + state[i].data = malloc(MTU); + memset(state[i].data, 0, MTU); + state[i].bufsize = MTU; state[i].status = NONEWDATA; pthread_mutex_init(&state[i].datamutex, NULL); @@ -136,16 +136,25 @@ int net_close(int nd) return ret; } -int net_getlastdata(int nd, char * const data) +int net_getlastdata(int nd, char ** const data) { int ret; if (nd > count || nd < 1 || state[--nd].available) { ret = ERROR; } else if (!(ret = state[nd].status)) { - memcpy(data, state[nd].data, dgsize); + if (!data) { + ret = ERROR; + goto out; + } else if (!(*data)) { + *data = malloc(MTU); + } + + memset(*data, 0, MTU); + memcpy(*data, state[nd].data, MTU); } +out: return ret; } |