diff options
author | seungha.son <seungha.son@samsung.com> | 2016-12-14 20:41:58 +0900 |
---|---|---|
committer | seungha.son <seungha.son@samsung.com> | 2016-12-19 14:39:28 +0900 |
commit | 069d59b51c0d78cc6e37acc905864d6c76246bca (patch) | |
tree | 986515ee71865791d2d2affc10d5ec1c70ecce67 | |
parent | d27d4228891b286de45acbe63599cd2f75b5603c (diff) | |
download | badge-069d59b51c0d78cc6e37acc905864d6c76246bca.tar.gz badge-069d59b51c0d78cc6e37acc905864d6c76246bca.tar.bz2 badge-069d59b51c0d78cc6e37acc905864d6c76246bca.zip |
Refactor badge to decrease function call depth
Signed-off-by: seungha.son <seungha.son@samsung.com>
Change-Id: I06c257b3846f96b55d2956cc2164435896bf6a7d
-rwxr-xr-x | include/badge_internal.h | 4 | ||||
-rwxr-xr-x | src/badge.c | 33 | ||||
-rwxr-xr-x | src/badge_internal.c | 185 | ||||
-rwxr-xr-x | src/badge_ipc.c | 3 |
4 files changed, 106 insertions, 119 deletions
diff --git a/include/badge_internal.h b/include/badge_internal.h index 8d84050..87905b6 100755 --- a/include/badge_internal.h +++ b/include/badge_internal.h @@ -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, diff --git a/src/badge.c b/src/badge.c index 891ea0b..b39d24d 100755 --- a/src/badge.c +++ b/src/badge.c @@ -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()); } diff --git a/src/badge_internal.c b/src/badge_internal.c index 7a1238f..1bfb368 100755 --- a/src/badge_internal.c +++ b/src/badge_internal.c @@ -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; } diff --git a/src/badge_ipc.c b/src/badge_ipc.c index c3dc4d3..f190807 100755 --- a/src/badge_ipc.c +++ b/src/badge_ipc.c @@ -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); |