diff --git a/src/include/switch_xml.h b/src/include/switch_xml.h index 237f24969b..b7493ea1bc 100644 --- a/src/include/switch_xml.h +++ b/src/include/switch_xml.h @@ -362,6 +362,7 @@ SWITCH_DECLARE(switch_status_t) switch_xml_bind_search_function_removable(switch switch_xml_section_t sections, void *user_data, switch_xml_binding_t **binding); SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function(switch_xml_binding_t **binding); +SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function_ptr(switch_xml_search_function_t function); ///\brief parse a string for a list of sections ///\param str a | delimited list of section names diff --git a/src/switch_xml.cpp b/src/switch_xml.cpp index eaaccbb066..22b4591d05 100644 --- a/src/switch_xml.cpp +++ b/src/switch_xml.cpp @@ -166,6 +166,28 @@ SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function(switch_xml_bin return status; } +SWITCH_DECLARE(switch_status_t) switch_xml_unbind_search_function_ptr(switch_xml_search_function_t function) +{ + switch_xml_binding_t *ptr, *last = NULL; + switch_status_t status = SWITCH_STATUS_FALSE; + + switch_mutex_lock(XML_LOCK); + for (ptr = BINDINGS; ptr; ptr = ptr->next) { + if (ptr->function == function) { + if (last) { + last->next = ptr->next; + } else { + BINDINGS = ptr->next; + } + status = SWITCH_STATUS_SUCCESS; + } + last = ptr; + } + switch_mutex_unlock(XML_LOCK); + + return status; +} + SWITCH_DECLARE(switch_status_t) switch_xml_bind_search_function(switch_xml_search_function_t function, switch_xml_section_t sections, void *user_data) { switch_xml_binding_t *binding = NULL, *ptr = NULL;