Refactor badge to decrease function call depth
authorseungha.son <seungha.son@samsung.com>
Wed, 14 Dec 2016 11:41:58 +0000 (20:41 +0900)
committerseungha.son <seungha.son@samsung.com>
Tue, 20 Dec 2016 04:50:14 +0000 (13:50 +0900)
Signed-off-by: seungha.son <seungha.son@samsung.com>
Change-Id: I06c257b3846f96b55d2956cc2164435896bf6a7d

include/badge_internal.h
src/badge.c
src/badge_internal.c
src/badge_ipc.c

index 8d84050..87905b6 100755 (executable)
@@ -152,10 +152,6 @@ int _badge_set_display(const char *pkgname, unsigned int is_display, uid_t uid);
 
 int _badge_get_display(const char *pkgname, unsigned int *is_display, uid_t uid);
 
-int _badge_register_changed_cb(badge_change_cb callback, void *data, uid_t uid);
-
-int _badge_unregister_changed_cb(badge_change_cb callback, uid_t uid);
-
 int _badge_free(badge_h *badge);
 
 badge_h *_badge_new(const char *pkgname, const char *writable_pkgs,
index 891ea0b..b39d24d 100755 (executable)
@@ -31,6 +31,9 @@
 EXPORT_API
 int badge_create(const char *pkgname, const char *writable_pkg)
 {
+       if (pkgname == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_create_for_uid(pkgname, writable_pkg, getuid());
 }
 
@@ -38,6 +41,9 @@ EXPORT_API
 int badge_new(const char *writable_app_id)
 {
        dlog_print(DLOG_WARN, LOG_TAG, "DEPRECATION WARNING: badge_new() is deprecated and will be removed from next release. Use badge_add() instead.");
+       if (writable_app_id == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_new_for_uid(writable_app_id, getuid());
 }
 
@@ -50,54 +56,81 @@ int badge_add(const char *badge_app_id)
 EXPORT_API
 int badge_remove(const char *app_id)
 {
+       if (app_id == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_remove_for_uid(app_id, getuid());
 }
 
 EXPORT_API
 int badge_is_existing(const char *app_id, bool *existing)
 {
+       if (app_id == NULL || existing == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_is_existing_for_uid(app_id, existing, getuid());
 }
 
 EXPORT_API
 int badge_foreach(badge_foreach_cb callback, void *user_data)
 {
+       if (callback == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_foreach_for_uid(callback, user_data, getuid());
 }
 
 EXPORT_API
 int badge_set_count(const char *app_id, unsigned int count)
 {
+       if (app_id == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_set_count_for_uid(app_id, count, getuid());
 }
 
 EXPORT_API
 int badge_get_count(const char *app_id, unsigned int *count)
 {
+       if (app_id == NULL || count == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_get_count_for_uid(app_id, count, getuid());
 }
 
 EXPORT_API
 int badge_set_display(const char *app_id, unsigned int is_display)
 {
+       if (app_id == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_set_display_for_uid(app_id, is_display, getuid());
 }
 
 EXPORT_API
 int badge_get_display(const char *app_id, unsigned int *is_display)
 {
+       if (app_id == NULL || is_display == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_get_display_for_uid(app_id, is_display, getuid());
 }
 
 EXPORT_API
 int badge_register_changed_cb(badge_change_cb callback, void *data)
 {
+       if (callback == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_register_changed_cb_for_uid(callback, data, getuid());
 }
 
 EXPORT_API
 int badge_unregister_changed_cb(badge_change_cb callback)
 {
+       if (callback == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
        return badge_unregister_changed_cb_for_uid(callback, getuid());
 }
 
index 7a1238f..1bfb368 100755 (executable)
@@ -1014,96 +1014,6 @@ static struct _badge_cb_data *__malloc_badge_cb_data(badge_change_cb callback, v
        return bd;
 }
 
-int _badge_register_changed_cb(badge_change_cb callback, void *data, uid_t uid)
-{
-       struct _badge_cb_data *bd = NULL;
-       GList *badge_cb_list = NULL;
-       GList *badge_found_list = NULL;
-       int ret;
-
-       if (callback == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
-       if (_badge_cb_hash == NULL)
-               _badge_cb_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
-
-       badge_cb_list = (GList *)g_hash_table_lookup(_badge_cb_hash, GUINT_TO_POINTER(uid));
-
-       if (badge_cb_list == NULL) {
-               bd = __malloc_badge_cb_data(callback, data);
-               if (!bd)
-                       return BADGE_ERROR_OUT_OF_MEMORY;
-
-               badge_cb_list = g_list_append(badge_cb_list, bd);
-               g_hash_table_insert(_badge_cb_hash, GUINT_TO_POINTER(uid), badge_cb_list);
-       } else {
-               badge_found_list = g_list_find_custom(g_list_first(badge_cb_list), (gconstpointer)callback,
-                                                     (GCompareFunc)_badge_data_compare);
-               if (badge_found_list) {
-                       bd = g_list_nth_data(badge_found_list, 0);
-                       bd->data = data;
-               } else {
-                       bd = __malloc_badge_cb_data(callback, data);
-                       if (!bd)
-                               return BADGE_ERROR_OUT_OF_MEMORY;
-                       badge_cb_list = g_list_append(badge_cb_list, bd);
-               }
-       }
-
-       ret = _badge_changed_monitor_init(uid);
-       if (ret == BADGE_ERROR_NONE) {
-               ret = badge_ipc_init_badge(uid);
-               if (ret != BADGE_ERROR_NONE && ret != BADGE_ERROR_NOT_EXIST)
-                       return ret;
-       } else {
-               /* LCOV_EXCL_START */
-               ERR("badge_ipc_monitor_init err : %d", ret);
-               _badge_unregister_changed_cb(callback, uid);
-               return ret;
-               /* LCOV_EXCL_STOP */
-       }
-       return BADGE_ERROR_NONE;
-}
-
-int _badge_unregister_changed_cb(badge_change_cb callback, uid_t uid)
-{
-       GList *badge_cb_list = NULL;
-       GList *badge_delete_list = NULL;
-       struct _badge_cb_data *bd = NULL;
-
-       if (callback == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
-       if (_badge_cb_hash == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
-       badge_cb_list = (GList *)g_hash_table_lookup(_badge_cb_hash, GUINT_TO_POINTER(uid));
-
-       if (badge_cb_list == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
-       badge_delete_list = g_list_find_custom(g_list_first(badge_cb_list), (gconstpointer)callback,
-                                              (GCompareFunc)_badge_data_compare);
-
-       if (badge_delete_list) {
-               bd = g_list_nth_data(badge_delete_list, 0);
-               badge_cb_list = g_list_delete_link(badge_cb_list, badge_delete_list);
-               free(bd);
-       } else {
-               return BADGE_ERROR_INVALID_PARAMETER;
-       }
-
-       if (badge_cb_list == NULL)
-               g_hash_table_steal(_badge_cb_hash, GUINT_TO_POINTER(uid));
-       else
-               g_hash_table_replace(_badge_cb_hash, GUINT_TO_POINTER(uid), badge_cb_list);
-
-       if (g_hash_table_size(_badge_cb_hash) == 0)
-               _badge_chanaged_monitor_fini();
-
-       return BADGE_ERROR_NONE;
-}
-
 int _badge_free(badge_h *badge)
 {
        if (!badge)
@@ -1243,10 +1153,6 @@ int badge_create_for_uid(const char *pkgname, const char *writable_pkg, uid_t ui
        char *caller = NULL;
        int err = BADGE_ERROR_NONE;
 
-       if (pkgname == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
-
        caller = _badge_get_pkgname_by_pid();
        if (!caller) {
                ERR("fail to get caller pkgname");
@@ -1317,9 +1223,6 @@ int badge_remove_for_uid(const char *app_id, uid_t uid)
        char *caller = NULL;
        int result = BADGE_ERROR_NONE;
 
-       if (app_id == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
        caller = _badge_get_pkgname_by_pid();
        if (!caller) {
                ERR("fail to get caller pkgname");
@@ -1357,9 +1260,6 @@ int badge_set_count_for_uid(const char *app_id, unsigned int count, uid_t uid)
        char *caller = NULL;
        int result = BADGE_ERROR_NONE;
 
-       if (app_id == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
        DBG("app_id %s, count %d", app_id, count);
 
        caller = _badge_get_pkgname_by_pid();
@@ -1380,8 +1280,6 @@ EXPORT_API
 int badge_get_count_for_uid(const char *app_id, unsigned int *count, uid_t uid)
 {
        int result = BADGE_ERROR_NONE;
-       if (app_id == NULL || count == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
 
        result = badge_ipc_request_get_count(app_id, count, uid);
        if (result == BADGE_ERROR_IO_ERROR)
@@ -1396,9 +1294,6 @@ int badge_set_display_for_uid(const char *app_id, unsigned int is_display, uid_t
        char *caller = NULL;
        int result = BADGE_ERROR_NONE;
 
-       if (app_id == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
        caller = _badge_get_pkgname_by_pid();
        if (!caller) {
                ERR("fail to get caller pkgname");
@@ -1418,8 +1313,6 @@ EXPORT_API
 int badge_get_display_for_uid(const char *app_id, unsigned int *is_display, uid_t uid)
 {
        int result = BADGE_ERROR_NONE;
-       if (app_id == NULL || is_display == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
 
        result = badge_ipc_request_get_display(app_id, is_display, uid);
        if (result == BADGE_ERROR_IO_ERROR)
@@ -1431,17 +1324,85 @@ int badge_get_display_for_uid(const char *app_id, unsigned int *is_display, uid_
 EXPORT_API
 int badge_register_changed_cb_for_uid(badge_change_cb callback, void *data, uid_t uid)
 {
-       if (callback == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
+       struct _badge_cb_data *bd = NULL;
+       GList *badge_cb_list = NULL;
+       GList *badge_found_list = NULL;
+       int ret;
+
+       if (_badge_cb_hash == NULL)
+               _badge_cb_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
+
+       badge_cb_list = (GList *)g_hash_table_lookup(_badge_cb_hash, GUINT_TO_POINTER(uid));
+
+       if (badge_cb_list == NULL) {
+               bd = __malloc_badge_cb_data(callback, data);
+               if (!bd)
+                       return BADGE_ERROR_OUT_OF_MEMORY;
+
+               badge_cb_list = g_list_append(badge_cb_list, bd);
+               g_hash_table_insert(_badge_cb_hash, GUINT_TO_POINTER(uid), badge_cb_list);
+       } else {
+               badge_found_list = g_list_find_custom(g_list_first(badge_cb_list), (gconstpointer)callback,
+                                                     (GCompareFunc)_badge_data_compare);
+               if (badge_found_list) {
+                       bd = g_list_nth_data(badge_found_list, 0);
+                       bd->data = data;
+               } else {
+                       bd = __malloc_badge_cb_data(callback, data);
+                       if (!bd)
+                               return BADGE_ERROR_OUT_OF_MEMORY;
+                       badge_cb_list = g_list_append(badge_cb_list, bd);
+               }
+       }
 
-       return _badge_register_changed_cb(callback, data, uid);
+       ret = _badge_changed_monitor_init(uid);
+       if (ret == BADGE_ERROR_NONE) {
+               ret = badge_ipc_init_badge(uid);
+               if (ret != BADGE_ERROR_NONE && ret != BADGE_ERROR_NOT_EXIST)
+                       return ret;
+       } else {
+               /* LCOV_EXCL_START */
+               ERR("badge_ipc_monitor_init err : %d", ret);
+               badge_unregister_changed_cb_for_uid(callback, uid);
+               return ret;
+               /* LCOV_EXCL_STOP */
+       }
+       return BADGE_ERROR_NONE;
 }
 
 EXPORT_API
 int badge_unregister_changed_cb_for_uid(badge_change_cb callback, uid_t uid)
 {
-       if (callback == NULL)
+       GList *badge_cb_list = NULL;
+       GList *badge_delete_list = NULL;
+       struct _badge_cb_data *bd = NULL;
+
+       if (_badge_cb_hash == NULL)
+               return BADGE_ERROR_INVALID_PARAMETER;
+
+       badge_cb_list = (GList *)g_hash_table_lookup(_badge_cb_hash, GUINT_TO_POINTER(uid));
+
+       if (badge_cb_list == NULL)
                return BADGE_ERROR_INVALID_PARAMETER;
 
-       return _badge_unregister_changed_cb(callback, uid);
+       badge_delete_list = g_list_find_custom(g_list_first(badge_cb_list), (gconstpointer)callback,
+                                              (GCompareFunc)_badge_data_compare);
+
+       if (badge_delete_list) {
+               bd = g_list_nth_data(badge_delete_list, 0);
+               badge_cb_list = g_list_delete_link(badge_cb_list, badge_delete_list);
+               free(bd);
+       } else {
+               return BADGE_ERROR_INVALID_PARAMETER;
+       }
+
+       if (badge_cb_list == NULL)
+               g_hash_table_steal(_badge_cb_hash, GUINT_TO_POINTER(uid));
+       else
+               g_hash_table_replace(_badge_cb_hash, GUINT_TO_POINTER(uid), badge_cb_list);
+
+       if (g_hash_table_size(_badge_cb_hash) == 0)
+               _badge_chanaged_monitor_fini();
+
+       return BADGE_ERROR_NONE;
 }
index c3dc4d3..f190807 100755 (executable)
@@ -538,9 +538,6 @@ int badge_ipc_request_get_list(badge_foreach_cb callback, void *data, uid_t uid)
        GVariantIter *iter;
        badge_info_s badge;
 
-       if (callback == NULL)
-               return BADGE_ERROR_INVALID_PARAMETER;
-
        result = _dbus_init();
        if (result != BADGE_ERROR_NONE) {
                ERR("Can't init dbus %d", result);