From bb12a33f9ae0b5cbf628e6f4e0218736a89e481f Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Wed, 30 Apr 2008 19:34:26 +0300 Subject: options: Make dynamic dup hack work with new options The option system has a hack that converts default values (potentially constants) of dynamically allocated options to allocated ones when the options are first added to the config system, so that all values can be equally freed later. Make this work with new-style options in the option struct too. --- m_config.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/m_config.c b/m_config.c index 024f7d713f..538ebc32a3 100644 --- a/m_config.c +++ b/m_config.c @@ -229,10 +229,13 @@ m_config_add_option(m_config_t *config, const m_option_t *arg, const char* prefi m_option_save(config, arg, sl->data); // Hack to avoid too much trouble with dynamically allocated data : // We always use a dynamic version - if ((arg->type->flags & M_OPT_TYPE_DYNAMIC) && arg->p - && (*(void**)arg->p)) { - *(void**)arg->p = NULL; - m_option_set(config, arg, sl->data); + if ((arg->type->flags & M_OPT_TYPE_DYNAMIC)) { + char **hackptr = arg->new ? (char*)config->optstruct + arg->offset + : arg->p; + if (hackptr && *hackptr) { + *hackptr = NULL; + m_option_set(config, arg, sl->data); + } } sl->lvl = 0; sl->prev = NULL; -- cgit v1.2.3