return;
}
-GList* find_callback_node(callback_list *handle, system_settings_changed_cb ptr)
+static gint _compare_cb(gconstpointer val, gconstpointer s_val)
{
- if (!handle)
- return NULL;
-
- GList *itr = g_list_first(handle->list);
- while (itr != NULL) {
- callback_node* node = (callback_node*)itr->data;
- if (node->callback == ptr)
- return itr;
- itr = g_list_next(itr);
- }
+ if (NULL == val) return 1;
+ if (NULL == s_val) return 1;
- return itr; /* itr == NULL NOT found! */
+ callback_node* node = (callback_node*)val;
+ if (node->callback == s_val)
+ return 0;
+ return -1;
}
-
int delete_multi_callback(callback_list *handle, system_settings_changed_cb ptr)
{
SETTING_TRACE_BEGIN;
if (!handle || !ptr)
return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
- GList* itr = find_callback_node(handle, ptr);
- if (itr) {
- handle->list = g_list_remove_link(handle->list, itr);
- free_multi_callback_node((callback_node*)itr->data);
- g_list_free(itr);
+ GList *found = g_list_find_custom(handle->list, ptr, _compare_cb);
+ if (found) {
+ handle->list = g_list_remove_link(handle->list, found);
+ free_multi_callback_node((callback_node*)found->data);
+ g_list_free(found);
}
SETTING_TRACE_END;
if (!handle || !ptr)
return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
- GList* itr = find_callback_node(handle, ptr);
- if (itr != NULL)
+ GList *found = g_list_find_custom(handle->list, ptr, _compare_cb);
+ if (found != NULL)
return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
callback_node* node = alloc_multi_callback_node();
if (!handle)
return SYSTEM_SETTINGS_ERROR_INVALID_PARAMETER;
- GList *itr = g_list_first(handle->list);
+ GList *itr = handle->list;
while (itr != NULL) {
callback_node* node = (callback_node*)itr->data;
if (node->callback)