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;
+}
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;
}
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