summaryrefslogtreecommitdiff
path: root/src/libunixonacid/unixmessage_receiver_hasmsginbuf.c
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2017-07-27 20:21:38 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2017-07-27 20:21:38 +0000
commit29f104d8e0b46595d8e7a5d315a9ec3afdf26d43 (patch)
tree469f5e58c4bd89f41f33e4f605862e8a25e8dfb8 /src/libunixonacid/unixmessage_receiver_hasmsginbuf.c
parentd7588f1fa9d007184163fe5863f87be41d659177 (diff)
downloadskalibs-29f104d8e0b46595d8e7a5d315a9ec3afdf26d43.tar.xz
Add unixmessage_receiver_hasmsginbuf, fix unixmessage_handle
Diffstat (limited to 'src/libunixonacid/unixmessage_receiver_hasmsginbuf.c')
-rw-r--r--src/libunixonacid/unixmessage_receiver_hasmsginbuf.c21
1 files changed, 21 insertions, 0 deletions
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 ;
+}