From a239f9feadd015fa91d391df01365dcade8ce503 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Wed, 1 Aug 2018 23:12:41 +0200 Subject: Threaded communication (icmpd) --- util.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'util.c') diff --git a/util.c b/util.c index be7083c..d4bd0ec 100644 --- a/util.c +++ b/util.c @@ -1,8 +1,17 @@ #include +#include #include +#include +#include +#include #include "util.h" +int uniqid(void) { + static int i = 0; + return i++; +} + void xxd(const void *buf_, size_t length) { unsigned char *buf = (unsigned char*)buf_; @@ -28,3 +37,31 @@ void xxd(const void *buf_, size_t length) { cursor += 16; } } + +ssize_t readall(int fd, void *data, size_t length) { + size_t cursor = 0; + while (cursor < length) { + ssize_t nr = read(fd, data + cursor, length - cursor); + if (nr < 0) { + if (errno == EINTR) continue; + return -1; + } + assert(nr > 0); + cursor += nr; + } + return length; +} + +ssize_t writeall(int fd, const void *data, size_t length) { + size_t cursor = 0; + while (cursor < length) { + ssize_t nw = write(fd, data + cursor, length - cursor); + if (nw < 0) { + if (errno == EINTR) continue; + return -1; + } + assert(nw > 0); + cursor += nw; + } + return length; +} -- cgit v1.2.3-70-g09d2