From 7a6c23bac7ef5f32da64edbb69edc0192bf9e637 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 21 Sep 2019 14:59:18 +0100 Subject: [PATCH] util: priomsg: New facility No callers yet. Signed-off-by: Ian Jackson --- util.c | 26 ++++++++++++++++++++++++++ util.h | 21 +++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/util.c b/util.c index d0c3d96..bcc24bd 100644 --- a/util.c +++ b/util.c @@ -401,6 +401,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 d783cd0..506a6e2 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.30.2