From 6de7ae95839aa61495731846585c8998e6b0837d Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Sun, 5 Jul 2015 16:15:30 +0200
Subject: degesch: only apply relevant attributes on change
---
degesch.c | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/degesch.c b/degesch.c
index 95e324f..14f6476 100644
--- a/degesch.c
+++ b/degesch.c
@@ -1868,23 +1868,32 @@ log_message_attributed (void *user_data, const char *quote, const char *fmt,
input_show (&ctx->input);
}
+static void
+apply_attribute_change (struct config_item_ *item, int id)
+{
+ struct app_context *ctx = item->user_data;
+ free (ctx->attrs[id]);
+ ctx->attrs[id] = xstrdup (item->type == CONFIG_ITEM_NULL
+ ? ctx->attrs_defaults[id]
+ : item->value.string.str);
+}
+
static void
on_config_attribute_change (struct config_item_ *item)
{
static const char *table[ATTR_COUNT] =
{
-#define XX(x, y, z) [ATTR_ ## x] = "attributes." y,
+#define XX(x, y, z) [ATTR_ ## x] = y,
ATTR_TABLE (XX)
#undef XX
};
- struct app_context *ctx = item->user_data;
- for (int id = 0; id < ATTR_COUNT; id++)
- {
- const char *user = get_config_string (ctx->config.root, table[id]);
- free (ctx->attrs[id]);
- ctx->attrs[id] = xstrdup (user ? user : ctx->attrs_defaults[id]);
- }
+ for (size_t i = 0; i < N_ELEMENTS (table); i++)
+ if (!strcmp (item->schema->name, table[i]))
+ {
+ apply_attribute_change (item, i);
+ return;
+ }
}
static void
--
cgit v1.2.3-70-g09d2