pkgmgrinfo_certinfo_h pkgmgrinfo_certinfo;
};
+typedef struct package_updateinfo_s {
+ pkgmgrinfo_updateinfo_h update_info;
+} package_updateinfo_s;
+
+typedef struct allowed_package_required_privilege_s {
+ required_privilege_h priv;
+} allowed_package_required_privilege_s;
+
typedef struct _foreach_app_context_ {
package_info_app_cb callback;
void *user_data;
} foreach_app_context_s;
+typedef struct _foreach_updateinfo_ {
+ package_info_updateinfo_cb callback;
+ void *user_data;
+} foreach_updateinfo_context_s;
+
+typedef struct _foreach_privilege_ {
+ package_info_privilege_info_cb callback;
+ void *user_data;
+} foreach_privilege_s;
+
+typedef struct _foreach_dependency_ {
+ package_info_dependency_info_cb callback;
+ void *user_data;
+} foreach_dependency_s;
+
+typedef struct _foreach_res_allowed_package_ {
+ package_info_res_allowed_package_cb callback;
+ void *user_data;
+} foreach_res_allowed_package_s;
+
+static int package_info_foreach_updateinfo_cb(const pkgmgrinfo_updateinfo_h handle, void *user_data)
+{
+ foreach_updateinfo_context_s *foreach_updateinfo = user_data;
+ bool iteration_next;
+
+ if (handle == NULL || foreach_updateinfo == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ iteration_next = foreach_updateinfo->callback(handle, foreach_updateinfo->user_data);
+ if (iteration_next == true)
+ return PMINFO_R_OK;
+ else
+ return PMINFO_R_ERROR;
+}
+
+static int package_info_updateinfo_convert_type(pkgmgrinfo_updateinfo_update_type type, package_updateinfo_type_e *converted_type)
+{
+ if (type == PMINFO_UPDATEINFO_NONE)
+ *converted_type = PACKAGE_UPDATEINFO_TYPE_NONE;
+ else if (type == PMINFO_UPDATEINFO_FORCE)
+ *converted_type = PACKAGE_UPDATEINFO_TYPE_FORCE;
+ else if (type == PMINFO_UPDATEINFO_OPTIONAL)
+ *converted_type = PACKAGE_UPDATEINFO_TYPE_OPTIONAL;
+ else
+ return -1;
+
+ return 0;
+}
+
API int package_info_create(const char *package, package_info_h *package_info)
{
package_info_h package_info_created;
.callback = callback,
.user_data = user_data,
};
- pkgmgrinfo_pkginfo_h pkgmgr_pkginfo;
if (package_info == NULL || callback == NULL)
return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- if (pkgmgrinfo_pkginfo_get_pkginfo(package_info->package, &pkgmgr_pkginfo) != PKGMGR_R_OK)
- return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+ if (comp_type == PACKAGE_INFO_APP_COMPONENT_TYPE_ALL)
+ pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_ALL_APP, package_info_foreach_app_cb, &foreach_app_context);
+ if (comp_type == PACKAGE_INFO_APP_COMPONENT_TYPE_UI)
+ pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_UI_APP, package_info_foreach_app_cb, &foreach_app_context);
+ if (comp_type == PACKAGE_INFO_APP_COMPONENT_TYPE_SERVICE)
+ pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_SVC_APP, package_info_foreach_app_cb, &foreach_app_context);
+ if (comp_type == PACKAGE_INFO_APP_COMPONENT_TYPE_WIDGET)
+ pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_WIDGET_APP, package_info_foreach_app_cb, &foreach_app_context);
+ if (comp_type == PACKAGE_INFO_APP_COMPONENT_TYPE_WATCH)
+ pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_WATCH_APP, package_info_foreach_app_cb, &foreach_app_context);
+ if (comp_type == PACKAGE_INFO_APP_COMPONENT_TYPE_COMPONENT_BASED)
+ pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_COMPONENT_BASED_APP, package_info_foreach_app_cb, &foreach_app_context);
- if (comp_type == PACKAGE_INFO_ALLAPP)
- pkgmgrinfo_appinfo_get_list(pkgmgr_pkginfo, PMINFO_ALL_APP, package_info_foreach_app_cb, &foreach_app_context);
- if (comp_type == PACKAGE_INFO_UIAPP)
- pkgmgrinfo_appinfo_get_list(pkgmgr_pkginfo, PMINFO_UI_APP, package_info_foreach_app_cb, &foreach_app_context);
- if (comp_type == PACKAGE_INFO_SERVICEAPP)
- pkgmgrinfo_appinfo_get_list(pkgmgr_pkginfo, PMINFO_SVC_APP, package_info_foreach_app_cb, &foreach_app_context);
return PACKAGE_MANAGER_ERROR_NONE;
}
return PACKAGE_MANAGER_ERROR_NONE;
}
+API int package_info_get_main_app_id(package_info_h package_info, char **main_app_id)
+{
+ char *mainappid_dup;
+ char *pkg_info_value;
+
+ if (package_info == NULL || main_app_id == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ if (pkgmgrinfo_pkginfo_get_mainappid(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ mainappid_dup = strdup(pkg_info_value);
+ if (mainappid_dup == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ *main_app_id = mainappid_dup;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
API int package_info_get_label(package_info_h package_info, char **label)
{
char *pkg_info_value = NULL;
*storage = PACKAGE_INFO_INTERNAL_STORAGE;
else if (pkg_info_value == PMINFO_EXTERNAL_STORAGE)
*storage = PACKAGE_INFO_EXTERNAL_STORAGE;
+ else if (pkg_info_value == PMINFO_EXTENDED_STORAGE)
+ *storage = PACKAGE_INFO_EXTENDED_STORAGE;
+ else
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
return PACKAGE_MANAGER_ERROR_NONE;
}
API int package_info_get_tep_name(package_info_h package_info, char **name)
{
- pkgmgrinfo_pkginfo_h pkginfo;
char *tepname_tmp = NULL;
int retval = 0;
if (retval != PACKAGE_MANAGER_ERROR_NONE)
return retval;
- if (pkgmgrinfo_pkginfo_get_pkginfo(package_info->package, &pkginfo) != PMINFO_R_OK)
- return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
-
- if (pkginfo == NULL)
- return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
-
- if (pkgmgrinfo_pkginfo_get_tep_name(pkginfo, &tepname_tmp) != PMINFO_R_OK)
- return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+ if (pkgmgrinfo_pkginfo_get_tep_name(package_info->pkgmgr_pkginfo, &tepname_tmp) != PMINFO_R_OK)
+ /* just return error without error log, because most of packages doesn't use tep */
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
if (tepname_tmp != NULL)
*name = strdup(tepname_tmp);
if (*name == NULL)
return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
- pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_get_res_type(package_info_h package_info, char **res_type)
+{
+ char *pkg_info_value = NULL;
+ char *res_type_dup = NULL;
+
+ if (package_info == NULL || res_type == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ if (pkgmgrinfo_pkginfo_get_res_type(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ res_type_dup = strdup(pkg_info_value);
+
+ if (res_type_dup == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ *res_type = res_type_dup;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_get_res_version(package_info_h package_info, char **res_version)
+{
+ char *pkg_info_value = NULL;
+ char *res_version_dup = NULL;
+
+ if (package_info == NULL || res_version == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ if (pkgmgrinfo_pkginfo_get_res_version(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ res_version_dup = strdup(pkg_info_value);
+
+ if (res_version_dup == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ *res_version = res_version_dup;
return PACKAGE_MANAGER_ERROR_NONE;
}
if (package_info == NULL || system == NULL)
return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
- if (pkgmgrinfo_pkginfo_is_preload(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
+ if (pkgmgrinfo_pkginfo_is_system(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
*system = pkg_info_value;
return PACKAGE_MANAGER_ERROR_NONE;
}
+API int package_info_get_installed_time(package_info_h package_info, int *installed_time)
+{
+ int ret;
+ int time_value;
+
+ if (package_info == NULL || installed_time == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ ret = pkgmgrinfo_pkginfo_get_installed_time(package_info->pkgmgr_pkginfo, &time_value);
+ if (ret < 0)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ *installed_time = time_value;
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
API int package_info_clone(package_info_h *clone, package_info_h package_info)
{
int retval;
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;
}
+static int package_info_foreach_dependency_cb(const char *from, const char *to, const char *type, const char *required_version, void *user_data)
+{
+ foreach_dependency_s *foreach_dependency = (foreach_dependency_s *)user_data;
+
+ if (!foreach_dependency->callback(from, to, type, required_version, user_data))
+ return -1;
+ else
+ return 0;
+}
+
+API int package_info_foreach_dependency_info(package_info_h package_info, package_info_dependency_info_cb callback, void *user_data)
+{
+ int ret = 0;
+ foreach_dependency_s foreach_dependency = {
+ .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_dependency(package_info->pkgmgr_pkginfo, package_info_foreach_dependency_cb, &foreach_dependency);
+ if (ret == PMINFO_R_EINVAL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ else if (ret == PMINFO_R_ERROR)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_foreach_dependency_info_depends_on(package_info_h package_info, package_info_dependency_info_cb callback, void *user_data)
+{
+ int ret = 0;
+ foreach_dependency_s foreach_dependency = {
+ .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_depends_on(package_info->pkgmgr_pkginfo, package_info_foreach_dependency_cb, &foreach_dependency);
+ if (ret == PMINFO_R_EINVAL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ else if (ret == PMINFO_R_ERROR)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+static int package_info_foreach_res_allowed_package_cb(const char *allowed_package, required_privilege_h privilege_handle, void *user_data)
+{
+ foreach_res_allowed_package_s *foreach_res_allowed_package = (foreach_res_allowed_package_s *)user_data;
+ allowed_package_required_privilege_s allowed_package_required_privilege = {
+ .priv = privilege_handle,
+ };
+
+ if (!foreach_res_allowed_package->callback(allowed_package, &allowed_package_required_privilege, foreach_res_allowed_package->user_data))
+ return -1;
+ else
+ return 0;
+}
+
+API int package_info_foreach_res_allowed_package(package_info_h package_info, package_info_res_allowed_package_cb callback, void *user_data)
+{
+ int ret = 0;
+ foreach_res_allowed_package_s foreach_res_allowed_package = {
+ .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_res_allowed_package(package_info->pkgmgr_pkginfo, package_info_foreach_res_allowed_package_cb, &foreach_res_allowed_package);
+ if (ret == PMINFO_R_EINVAL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ else if (ret == PMINFO_R_ERROR)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_foreach_required_privilege(allowed_package_required_privilege_h priv_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 (priv_info == NULL || callback == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ ret = pkgmgrinfo_pkginfo_foreach_required_privilege(priv_info->priv, package_info_foreach_privilege_cb, &foreach_privilege);
+ if (ret == PMINFO_R_EINVAL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_create(const char *pkgid, package_updateinfo_h *info)
+{
+ int ret;
+ package_updateinfo_s *update_info;
+
+ if (pkgid == NULL || info == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = calloc(1, sizeof(package_updateinfo_s));
+ if (update_info == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ ret = pkgmgrinfo_updateinfo_get_updateinfo(pkgid, &update_info->update_info);
+ if (ret == PMINFO_R_ENOENT) {
+ free(update_info);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+ } else if (ret == PMINFO_R_EINVAL) {
+ free(update_info);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+ } else if (ret == PMINFO_R_ERROR) {
+ free(update_info);
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+ }
+
+ *info = update_info;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_pkgid(package_updateinfo_h info, char **package)
+{
+ int ret;
+ char *pkg_updateinfo_value = NULL;
+ char *pkgid_dup;
+ package_updateinfo_s *update_info;
+
+ if (package == NULL || info == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)info;
+ ret = pkgmgrinfo_updateinfo_get_pkgid(update_info->update_info, &pkg_updateinfo_value);
+ if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ pkgid_dup = strdup(pkg_updateinfo_value);
+ if (pkgid_dup == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ *package = pkgid_dup;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_version(package_updateinfo_h info, char **version)
+{
+ int ret;
+ char *pkg_updateinfo_value = NULL;
+ char *ver_dup;
+ package_updateinfo_s *update_info;
+
+ if (info == NULL || version == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)info;
+ ret = pkgmgrinfo_updateinfo_get_version(update_info->update_info, &pkg_updateinfo_value);
+ if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ ver_dup = strdup(pkg_updateinfo_value);
+ if (ver_dup == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+ *version = ver_dup;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_type(package_updateinfo_h info, package_updateinfo_type_e *type)
+{
+ int ret;
+ pkgmgrinfo_updateinfo_update_type pkg_updateinfo_value;
+ package_updateinfo_type_e converted_type;
+ package_updateinfo_s *update_info;
+
+ if (info == NULL || type == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)info;
+ ret = pkgmgrinfo_updateinfo_get_update_type(update_info->update_info, &pkg_updateinfo_value);
+ if (ret != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ ret = package_info_updateinfo_convert_type(pkg_updateinfo_value, &converted_type);
+ if (ret != 0)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ *type = converted_type;
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_destroy(package_updateinfo_h info)
+{
+ package_updateinfo_s *update_info;
+
+ if (info == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ update_info = (package_updateinfo_s *)info;
+ pkgmgrinfo_updateinfo_destroy(update_info->update_info);
+ free(update_info);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_foreach_info(package_info_updateinfo_cb callback, void *user_data)
+{
+ int ret;
+
+ if (callback == NULL)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+ foreach_updateinfo_context_s foreach_updateinfo = {
+ .callback = callback,
+ .user_data = user_data,
+ };
+
+ ret = pkgmgrinfo_updateinfo_foreach_updateinfo(package_info_foreach_updateinfo_cb, &foreach_updateinfo);
+ if (ret != PMINFO_R_OK)
+ return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+ return PACKAGE_MANAGER_ERROR_NONE;
+}
+
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;
+ int ret;
+
+ ret = pkgmgrinfo_pkginfo_get_pkgid(pkg_handle, &pkg_name);
+ if (ret != PMINFO_R_OK)
+ return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
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)
+ if (pkg_info->package == NULL) {
+ free(pkg_info);
return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
+ }
pkg_info->pkgmgr_pkginfo = pkg_handle;
*package_info = pkg_info;