From dcf2bd74b77ea62ce1534be5da0843eac5053d5f Mon Sep 17 00:00:00 2001 From: "jinwang.an" Date: Mon, 10 Feb 2020 16:21:44 +0900 Subject: [PATCH] Update usage about g_list search Change-Id: Idcab27d34c0c7fcd0f1f9c7d4667400e24d0de15 Signed-off-by: jinwang.an --- src/system_settings_multi_callback.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/system_settings_multi_callback.c b/src/system_settings_multi_callback.c index a006a73..7e741b8 100644 --- a/src/system_settings_multi_callback.c +++ b/src/system_settings_multi_callback.c @@ -33,34 +33,28 @@ void free_multi_callback_node(callback_node* node) 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; @@ -73,8 +67,8 @@ int add_multi_callback(callback_list *handle, system_settings_changed_cb ptr, vo 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(); @@ -98,7 +92,7 @@ int invoke_callback_list(callback_list *handle, system_settings_key_e key) 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) -- 2.7.4