Update usage about g_list search 95/224795/1
authorjinwang.an <jinwang.an@samsung.com>
Mon, 10 Feb 2020 07:21:44 +0000 (16:21 +0900)
committerjinwang.an <jinwang.an@samsung.com>
Mon, 10 Feb 2020 07:21:44 +0000 (16:21 +0900)
Change-Id: Idcab27d34c0c7fcd0f1f9c7d4667400e24d0de15
Signed-off-by: jinwang.an <jinwang.an@samsung.com>
src/system_settings_multi_callback.c

index a006a73..7e741b8 100644 (file)
@@ -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)