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