[commit] r13052 - in freeswitch/trunk/src: . include mod/applications/mod_skel
Author: mrene Date: Wed Apr 15 21:26:32 2009 New Revision: 13052 Log: xml_config: Fix issue where default NULL strings were ignored on reload Modified: freeswitch/trunk/src/include/switch_xml_config.h freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c freeswitch/trunk/src/switch_xml_config.c Modified: freeswitch/trunk/src/include/switch_xml_config.h ============================================================================== --- freeswitch/trunk/src/include/switch_xml_config.h (original) +++ freeswitch/trunk/src/include/switch_xml_config.h Wed Apr 15 21:26:32 2009 @@ -100,8 +100,8 @@ #define SWITCH_CONFIG_ITEM(_key, _type, _flags, _ptr, _defaultvalue, _data, _syntax, _helptext) { _key, _type, _flags, _ptr, _defaultvalue, _data, NULL, _syntax, _helptext } #define SWITCH_CONFIG_ITEM_STRING_STRDUP(_key, _flags, _ptr, _defaultvalue, _syntax, _helptext) { _key, SWITCH_CONFIG_STRING, _flags, _ptr, _defaultvalue, &switch_config_string_strdup, NULL, _helptext} -#define SWITCH_CONFIG_ITEM_CALLBACK(_key, _type, _flags, _ptr, _defaultvalue, _data, _functiondata, _syntax, _helptext) { _key, _type, _flags, _ptr, _defaultvalue, _functiondata, _data, _helptext} -#define SWITCH_CONFIG_ITEM_END() { NULL, SWITCH_CONFIG_LAST, 0, NULL ,NULL, NULL, NULL, NULL, NULL } +#define SWITCH_CONFIG_ITEM_CALLBACK(_key, _type, _flags, _ptr, _defaultvalue, _data, _functiondata, _syntax, _helptext) { _key, _type, _flags, _ptr, _defaultvalue, _functiondata, _data, _syntax, _helptext } +#define SWITCH_CONFIG_ITEM_END() { NULL, SWITCH_CONFIG_LAST, 0, NULL, NULL, NULL, NULL, NULL, NULL } /*! * \brief Gets the int representation of an enum Modified: freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c (original) +++ freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c Wed Apr 15 21:26:32 2009 @@ -89,7 +89,7 @@ "greedy|generous|evil", "Specifies the codec negotiation scheme to be used."), SWITCH_CONFIG_ITEM_CALLBACK("sip-trace", SWITCH_CONFIG_BOOL, CONFIG_RELOADABLE, &globals.sip_trace, (void*)SWITCH_FALSE, config_callback_siptrace, NULL , "yes|no", "If enabled, print out sip messages on the console."), - SWITCH_CONFIG_ITEM("integer", SWITCH_CONFIG_INT, CONFIG_RELOADABLE | CONFIG_REQUIRED, &globals.integer, (void*)100, &config_opt_integer, + SWITCH_CONFIG_ITEM("integer", SWITCH_CONFIG_INT, CONFIG_RELOADABLE, &globals.integer, (void*)100, &config_opt_integer, NULL, NULL), SWITCH_CONFIG_ITEM_END() }; @@ -108,8 +108,8 @@ SWITCH_STANDARD_API(skel_function) { - stream->write_function(stream, "+OK Reloading\n"); do_config(SWITCH_TRUE); + return SWITCH_STATUS_SUCCESS; } Modified: freeswitch/trunk/src/switch_xml_config.c ============================================================================== --- freeswitch/trunk/src/switch_xml_config.c (original) +++ freeswitch/trunk/src/switch_xml_config.c Wed Apr 15 21:26:32 2009 @@ -232,27 +232,49 @@ newstring = (char*)item->defaultvalue; } - - if (newstring) { - if (string_options->length > 0) { - /* We have a preallocated buffer */ - char *dest = (char*)item->ptr; + if (string_options->length > 0) { + /* We have a preallocated buffer */ + char *dest = (char*)item->ptr; + if (newstring) { if (strncasecmp(dest, newstring, string_options->length)) { switch_copy_string(dest, newstring, string_options->length); changed = SWITCH_TRUE; } } else { - char **dest = (char**)item->ptr; + if (*dest != '\0') { + *dest = '\0'; + changed = SWITCH_TRUE; + } + } + } else if (string_options->pool) { + /* Pool-allocated buffer */ + char **dest = (char**)item->ptr; - if (!*dest || strcasecmp(*dest, newstring)) { - if (string_options->pool) { - *dest = switch_core_strdup(string_options->pool, newstring); - } else { - switch_safe_free(*dest); - *dest = strdup(newstring); - } - changed = SWITCH_TRUE; + if (newstring) { + if (!*dest || strcmp(*dest, newstring)) { + *dest = switch_core_strdup(string_options->pool, newstring); + } + } else { + if (*dest) { + changed = SWITCH_TRUE; + *dest = NULL; + } + } + } else { + /* Dynamically allocated buffer */ + char **dest = (char**)item->ptr; + + if (newstring) { + if (!*dest || strcmp(*dest, newstring)) { + switch_safe_free(*dest); + *dest = strdup(newstring); + changed = SWITCH_TRUE; + } + } else { + if (*dest) { + switch_safe_free(*dest); + changed = SWITCH_TRUE; } } }
participants (1)
-
FreeSWITCH SVN