[SECNET PATCH 03/14] util: priomsg: New facility

Ian Jackson ijackson at chiark.greenend.org.uk
Sat Sep 21 17:07:48 BST 2019


No callers yet.

Signed-off-by: Ian Jackson <ijackson at chiark.greenend.org.uk>
---
 util.c | 26 ++++++++++++++++++++++++++
 util.h | 21 +++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/util.c b/util.c
index 529c1e4..d437a1d 100644
--- a/util.c
+++ b/util.c
@@ -384,6 +384,32 @@ const char *truncmsg_terminate(const struct buffer_if *buf)
     return buf->start;
 }
 
+void priomsg_new(struct priomsg *pm, int32_t maxlen)
+{
+    buffer_new(&pm->m, maxlen);
+    pm->prio = INT_MIN;
+}
+void priomsg_reset(struct priomsg *pm)
+{
+    buffer_init(&pm->m, 0);
+    pm->prio = INT_MIN;
+}
+bool_t priomsg_update_p(struct priomsg *pm, int prio)
+{
+    if (prio <= pm->prio) return False;
+    buffer_init(&pm->m, 0);
+    pm->prio = prio;
+    return True;
+}
+const char *priomsg_getmessage(const struct priomsg *pm, const char *defmsg)
+{
+    if (pm->prio >= INT_MIN)
+	return truncmsg_terminate(&pm->m);
+    else
+	return defmsg;
+}
+
+
 void buffer_new(struct buffer_if *buf, int32_t len)
 {
     buf->free=True;
diff --git a/util.h b/util.h
index 199bd6e..115ec73 100644
--- a/util.h
+++ b/util.h
@@ -59,6 +59,27 @@ void truncmsg_add_string(struct buffer_if *buf, cstring_t s);
 void truncmsg_add_packet_string(struct buffer_if*, int32_t, const uint8_t*);
 const char *truncmsg_terminate(const struct buffer_if *buf);
 
+
+struct priomsg {
+    /* U: uninitialised
+     * F: initialised but free (no memory allocated), no leak if discarded
+     * Z: contains no message yet
+     * M: contains some message; you may call truncmsg_add_*
+     */
+    int prio;
+    struct buffer_if m;
+};
+
+void priomsg_new(struct priomsg *pm, int32_t maxlen);          /* UF -> Z */
+void priomsg_destroy(struct priomsg *pm, int32_t maxlen);     /* FZM -> F */
+void priomsg_reset(struct priomsg *pm);                       /* FZM -> Z */
+bool_t priomsg_update_p(struct priomsg *pm, int prio);         /* ZM -> M */
+  /* returns true iff message of priority prio ought to be added,
+   * caller should then call truncmsg_add_*. */
+const char *priomsg_getmessage(const struct priomsg *pm, const char *defmsg);
+  /* return value is null-terminated, valid until next call
+   * or until defmsg is no longer valid                                ZM */
+
 /*
  * void BUF_ADD_BYTES(append,    struct buffer_if*, const void*, int32_t size);
  * void BUF_ADD_BYTES(prepend,   struct buffer_if*, const void*, int32_t size);
-- 
2.11.0




More information about the sgo-software-discuss mailing list