From 759bc8007b2834bdfa7497f8d34ae2e30dd8064b Mon Sep 17 00:00:00 2001 From: Craig Barnes Date: Sun, 14 Nov 2021 15:08:47 +0000 Subject: [PATCH] user-notification: config: various small cleanups * Rename user_notification_add() to user_notification_add_fmt() * Add new user_notification_add() helper function * Use xvasprintf() to replace user_notification_add_va() * Make better use of helper functions in config.c --- config.c | 21 ++++++++------------- user-notification.c | 34 +++++----------------------------- user-notification.h | 14 ++++++++++++-- 3 files changed, 25 insertions(+), 44 deletions(-) diff --git a/config.c b/config.c index a8ab6a8e..905f26d6 100644 --- a/config.c +++ b/config.c @@ -152,9 +152,7 @@ log_and_notify_va(struct config *conf, enum log_class log_class, char *formatted_msg = xvasprintf(fmt, va); log_msg(log_class, LOG_MODULE, file, lineno, "%s", formatted_msg); - tll_push_back( - conf->notifications, - ((struct user_notification){.kind = kind, .text = formatted_msg})); + user_notification_add(&conf->notifications, kind, formatted_msg); } static void NOINLINE PRINTF(5) @@ -3118,11 +3116,8 @@ config_clone(const struct config *old) conf->notifications.length = 0; conf->notifications.head = conf->notifications.tail = 0; tll_foreach(old->notifications, it) { - struct user_notification notif = { - .kind = it->item.kind, - .text = xstrdup(it->item.text), - }; - tll_push_back(conf->notifications, notif); + char *text = xstrdup(it->item.text); + user_notification_add(&conf->notifications, it->item.kind, text); } return conf; @@ -3249,13 +3244,13 @@ check_if_font_is_monospaced(const char *pattern, "setting [tweak].font-monospace-warn=no", pattern); - user_notification_add( - notifications, - USER_NOTIFICATION_WARNING, + static const char fmt[] = "%s: font does not appear to be monospace; " "check your config, or disable this warning by " - "setting \033[1m[tweak].font-monospace-warn=no\033[22m", - pattern); + "setting \033[1m[tweak].font-monospace-warn=no\033[22m"; + + user_notification_add_fmt(notifications, USER_NOTIFICATION_WARNING, + fmt, pattern); is_monospaced = false; break; diff --git a/user-notification.c b/user-notification.c index 497aa08c..6c1157d5 100644 --- a/user-notification.c +++ b/user-notification.c @@ -1,38 +1,14 @@ #include "user-notification.h" -#include #include +#include "xmalloc.h" -static bool -user_notification_add_va(user_notifications_t *notifications, - enum user_notification_kind kind, const char *fmt, - va_list ap) -{ - va_list ap2; - va_copy(ap2, ap); - int cnt = vsnprintf(NULL, 0, fmt, ap2); - va_end(ap2); - - if (cnt < 0) - return false; - - char *text = malloc(cnt + 1); - vsnprintf(text, cnt + 1, fmt, ap); - - struct user_notification not = { - .kind = kind, - .text = text, - }; - tll_push_back(*notifications, not); - return true; -} - -bool -user_notification_add(user_notifications_t *notifications, +void +user_notification_add_fmt(user_notifications_t *notifications, enum user_notification_kind kind, const char *fmt, ...) { va_list ap; va_start(ap, fmt); - bool ret = user_notification_add_va(notifications, kind, fmt, ap); + char *text = xvasprintf(fmt, ap); va_end(ap); - return ret; + user_notification_add(notifications, kind, text); } diff --git a/user-notification.h b/user-notification.h index 507c1791..df2390c7 100644 --- a/user-notification.h +++ b/user-notification.h @@ -1,6 +1,5 @@ #pragma once -#include #include #include "macros.h" @@ -26,6 +25,17 @@ user_notifications_free(user_notifications_t *notifications) tll_free(*notifications); } -bool user_notification_add(user_notifications_t *notifications, +static inline void +user_notification_add(user_notifications_t *notifications, + enum user_notification_kind kind, char *text) +{ + struct user_notification notification = { + .kind = kind, + .text = text + }; + tll_push_back(*notifications, notification); +} + +void user_notification_add_fmt(user_notifications_t *notifications, enum user_notification_kind kind, const char *fmt, ...) PRINTF(3);