[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