summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorseungha.son <seungha.son@samsung.com>2016-12-14 20:41:58 +0900
committerseungha.son <seungha.son@samsung.com>2016-12-19 14:39:28 +0900
commit069d59b51c0d78cc6e37acc905864d6c76246bca (patch)
tree986515ee71865791d2d2affc10d5ec1c70ecce67
parentd27d4228891b286de45acbe63599cd2f75b5603c (diff)
downloadbadge-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-xinclude/badge_internal.h4
-rwxr-xr-xsrc/badge.c33
-rwxr-xr-xsrc/badge_internal.c185
-rwxr-xr-xsrc/badge_ipc.c3
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);