poke-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[COMMITTED 4/7] poked: add new function `usock_out_printf'


From: Mohammad-Reza Nabipoor
Subject: [COMMITTED 4/7] poked: add new function `usock_out_printf'
Date: Sun, 4 Dec 2022 23:04:59 +0100

2022-12-04  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>

        * poked/usock.h (usock_out_printf): New function.
        * poked/usock.c (usock_out_printf): Likewise.
---
 ChangeLog     |  5 +++++
 poked/usock.c | 20 ++++++++++++++++++++
 poked/usock.h |  5 +++++
 3 files changed, 30 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index f6ffd156..9b09555d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2022-12-04  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
+
+       * poked/usock.h (usock_out_printf): New function.
+       * poked/usock.c (usock_out_printf): Likewise.
+
 2022-12-04  Mohammad-Reza Nabipoor  <mnabipoor@gnu.org>
 
        * poked/usock.h (USOCK_CHAN_IN_AUTOCMPL): Remove macro.
diff --git a/poked/usock.c b/poked/usock.c
index f605bf04..d767aaad 100644
--- a/poked/usock.c
+++ b/poked/usock.c
@@ -20,7 +20,9 @@
 #include <assert.h>
 #include <errno.h>
 #include <inttypes.h>
+#include <stdarg.h>
 #include <stdint.h>
+#include <stdio.h> // vasprintf
 #include <stdlib.h>
 #include <string.h>
 
@@ -740,6 +742,24 @@ usock_out (struct usock *u, uint8_t chan, uint32_t kind, 
const void *data,
   usock_notify (u);
 }
 
+void
+usock_out_printf (struct usock *u, uint8_t chan, uint32_t kind,
+                  const char *fmt, ...)
+{
+  char *data = NULL;
+  va_list ap;
+  int n;
+
+  va_start (ap, fmt);
+  n = vasprintf (&data, fmt, ap);
+  va_end (ap);
+  if (n == -1)
+    err (1, "%s: vasprintf () failed", __func__);
+
+  usock_out (u, chan, kind, data, n);
+  free (data);
+}
+
 // API
 struct usock_buf *
 usock_in (struct usock *u)
diff --git a/poked/usock.h b/poked/usock.h
index c8080603..7618458b 100644
--- a/poked/usock.h
+++ b/poked/usock.h
@@ -62,4 +62,9 @@ struct usock_buf *usock_in (struct usock *u);
 void usock_out (struct usock *u, uint8_t chan, uint32_t kind, const void *data,
                 size_t len);
 
+// Like `usock_out' but with a printf-like interface.
+void usock_out_printf (struct usock *u, uint8_t chan, uint32_t kind,
+                       const char *fmt, ...)
+    __attribute__ ((format (printf, 4, 5)));
+
 #endif
-- 
2.38.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]