Improve API performance 96/77996/7 accepted/tizen/common/20160803.193141 accepted/tizen/ivi/20160804.080748 accepted/tizen/mobile/20160804.080839 accepted/tizen/tv/20160804.080705 accepted/tizen/wearable/20160804.080515 submit/tizen/20160803.012753
authorJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 4 Jul 2016 01:44:36 +0000 (10:44 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 26 Jul 2016 05:50:59 +0000 (22:50 -0700)
Change-Id: I4f5192029ad1059d38cf3d250f6536cc34255df5
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/package_info.c
src/package_manager_internal.c
src/package_manager_internal.h

index ad7cb83..5861c29 100644 (file)
@@ -477,3 +477,37 @@ API int package_info_foreach_privilege_info(package_info_h package_info, package
 
        return ret;
 }
+
+int package_info_create_with_pkginfo(pkgmgrinfo_pkginfo_h pkg_handle, package_info_h *package_info)
+{
+       package_info_h pkg_info = NULL;
+       char *pkg_name = NULL;
+
+       pkg_info = calloc(1, sizeof(struct package_info_s));
+       if (pkg_info == NULL)
+               return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
+
+       pkgmgrinfo_pkginfo_get_pkgid(pkg_handle, &pkg_name);
+       if (pkg_name == NULL)
+               return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
+
+       pkg_info->package = strdup(pkg_name);
+       if (pkg_info->package == NULL)
+               return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
+
+       pkg_info->pkgmgr_pkginfo = pkg_handle;
+       *package_info = pkg_info;
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+int package_info_destroy_handle(package_info_h handle)
+{
+       if (handle == NULL)
+               return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
+
+       free(handle->package);
+       free(handle);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
index c88fb92..37754ab 100644 (file)
@@ -142,22 +142,23 @@ int package_info_get_package_info(const char *package, package_info_h *package_i
 
 static int package_info_foreach_package_info_cb(const pkgmgrinfo_pkginfo_h handle, void *user_data)
 {
-       char *pkg_name = NULL;
        foreach_pkg_context_s *foreach_pkg_context = user_data;
        package_info_h package_info = NULL;
        bool r = false;
+       int ret;
 
        if (handle == NULL || foreach_pkg_context == NULL) {
                package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
                return PMINFO_R_EINVAL;
        }
 
-       pkgmgrinfo_pkginfo_get_pkgname(handle, &pkg_name);
+       ret = package_info_create_with_pkginfo(handle, &package_info);
+       if (ret != PACKAGE_MANAGER_ERROR_NONE)
+               return package_manager_error(ret, __FUNCTION__, NULL);
 
-       if (package_info_create(pkg_name, &package_info) == PACKAGE_MANAGER_ERROR_NONE) {
-               r = foreach_pkg_context->callback(package_info, foreach_pkg_context->user_data);
-               package_info_destroy(package_info);
-       }
+       r = foreach_pkg_context->callback(package_info, foreach_pkg_context->user_data);
+
+       package_info_destroy_handle(package_info);
 
        return (r == true) ? PMINFO_R_OK : PMINFO_R_ERROR;
 }
index 3ee7d4e..81ae523 100644 (file)
@@ -54,6 +54,10 @@ int package_info_foreach_package_info(package_manager_package_info_cb callback,
 
 int package_info_filter_foreach_package_info(pkgmgrinfo_pkginfo_filter_h handle, package_manager_package_info_cb callback, void *user_data);
 
+int package_info_create_with_pkginfo(pkgmgrinfo_pkginfo_h pkg_handle, package_info_h *package_info);
+
+int package_info_destroy_handle(package_info_h handle);
+
 #ifdef __cplusplus
 }
 #endif