Fix a bug of package_info_foreach_privilege_info 92/191592/2
authorSangyoon Jang <jeremy.jang@samsung.com>
Thu, 18 Oct 2018 12:01:01 +0000 (21:01 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Fri, 19 Oct 2018 02:17:58 +0000 (11:17 +0900)
The return type of foreach callback is bool, but internal callback
is int. Sometimes this cause unexpected result so we should not pass
foreach callback into internal API directly.

Change-Id: Ibbe071abacf955dd9e20839898d02143f503541b
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/package_info.c

index 44a8715..8c2fdb6 100644 (file)
@@ -52,6 +52,11 @@ typedef struct _foreach_updateinfo_ {
        void *user_data;
 } foreach_updateinfo_context_s;
 
+typedef struct _foreach_privilege_ {
+       package_info_privilege_info_cb callback;
+       void *user_data;
+} foreach_privilege_s;
+
 static int package_info_foreach_updateinfo_cb(const pkgmgrinfo_updateinfo_h handle, void *user_data)
 {
        foreach_updateinfo_context_s *foreach_updateinfo = user_data;
@@ -536,14 +541,28 @@ API int package_info_foreach_cert_info(package_info_h package_info, package_info
        return PACKAGE_MANAGER_ERROR_NONE;
 }
 
+static int package_info_foreach_privilege_cb(const char *privilege_name, void *user_data)
+{
+       foreach_privilege_s *foreach_privilege = (foreach_privilege_s *)user_data;
+
+       if (!foreach_privilege->callback(privilege_name, foreach_privilege->user_data))
+               return -1;
+       else
+               return 0;
+}
+
 API int package_info_foreach_privilege_info(package_info_h package_info, package_info_privilege_info_cb callback, void *user_data)
 {
        int ret = 0;
+       foreach_privilege_s foreach_privilege = {
+               .callback = callback,
+               .user_data = user_data,
+       };
 
        if (package_info == NULL || callback == NULL)
                return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
 
-       ret = pkgmgrinfo_pkginfo_foreach_privilege(package_info->pkgmgr_pkginfo, (pkgmgrinfo_pkg_privilege_list_cb)callback, user_data);
+       ret = pkgmgrinfo_pkginfo_foreach_privilege(package_info->pkgmgr_pkginfo, package_info_foreach_privilege_cb, &foreach_privilege);
 
        return ret;
 }