summaryrefslogtreecommitdiffstats
path: root/src/daemon/net.c
diff options
context:
space:
mode:
authorGravatar Gediminas Jakutis <gediminas@varciai.lt> 2019-05-21 20:04:30 +0300
committerGravatar Gediminas Jakutis <gediminas@varciai.lt> 2019-05-21 20:14:31 +0300
commitcce1aad04a2ce4ea0447ec8f3f4c41a8936d4a1a (patch)
treede9b03a434cb8f15ca9504c2d8b5cd03b99636fc /src/daemon/net.c
parent98a5917e7700a24d30ff8aed8d91392309bea40f (diff)
downloadusurpation-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.c19
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;
}