diff options
Diffstat (limited to 'degesch.c')
-rw-r--r-- | degesch.c | 25 |
1 files changed, 17 insertions, 8 deletions
@@ -1869,22 +1869,31 @@ log_message_attributed (void *user_data, const char *quote, const char *fmt, } 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 |