diff options
author | Laurent Bercot <ska-skaware@skarnet.org> | 2017-07-27 20:21:38 +0000 |
---|---|---|
committer | Laurent Bercot <ska-skaware@skarnet.org> | 2017-07-27 20:21:38 +0000 |
commit | 29f104d8e0b46595d8e7a5d315a9ec3afdf26d43 (patch) | |
tree | 469f5e58c4bd89f41f33e4f605862e8a25e8dfb8 /src/libunixonacid | |
parent | d7588f1fa9d007184163fe5863f87be41d659177 (diff) | |
download | skalibs-29f104d8e0b46595d8e7a5d315a9ec3afdf26d43.tar.xz |
Add unixmessage_receiver_hasmsginbuf, fix unixmessage_handle
Diffstat (limited to 'src/libunixonacid')
-rw-r--r-- | src/libunixonacid/unixmessage_handle.c | 3 | ||||
-rw-r--r-- | src/libunixonacid/unixmessage_receiver_hasmsginbuf.c | 21 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/libunixonacid/unixmessage_handle.c b/src/libunixonacid/unixmessage_handle.c index 9d9de5c..487430d 100644 --- a/src/libunixonacid/unixmessage_handle.c +++ b/src/libunixonacid/unixmessage_handle.c @@ -4,9 +4,8 @@ int unixmessage_handle (unixmessage_receiver_t *b, unixmessage_handler_func_t_ref f, void *p) { - unsigned int n = UNIXMESSAGE_MAXREADS ; unsigned int count = 0 ; - while (n--) + while (count < UNIXMESSAGE_MAXREADS || unixmessage_receiver_hasmsginbuf(b)) { unixmessage_t m ; int r = unixmessage_receive(b, &m) ; diff --git a/src/libunixonacid/unixmessage_receiver_hasmsginbuf.c b/src/libunixonacid/unixmessage_receiver_hasmsginbuf.c new file mode 100644 index 0000000..0a5f7d2 --- /dev/null +++ b/src/libunixonacid/unixmessage_receiver_hasmsginbuf.c @@ -0,0 +1,21 @@ +/* ISC license. */ + +#include <stdint.h> +#include <sys/uio.h> +#include <skalibs/uint32.h> +#include <skalibs/siovec.h> +#include <skalibs/cbuffer.h> +#include <skalibs/unixmessage.h> + +int unixmessage_receiver_hasmsginbuf (unixmessage_receiver_t const *b) +{ + size_t len = cbuffer_len(&b->mainb) ; + uint32_t mainlen ; + char pack[4] ; + struct iovec v[2] ; + if (len < 6) return 0 ; + cbuffer_rpeek(&b->mainb, v) ; + siovec_gather(v, 2, pack, 4) ; + uint32_unpack_big(pack, &mainlen) ; + return len - 6 >= mainlen ; +} |