2 * Copyright (c) 2017 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include "pkgmgrinfo_type.h"
22 #include "pkgmgrinfo_private.h"
23 #include "pkgmgrinfo_debug.h"
25 API int pkgmgrinfo_archiveinfo_get_archiveinfo(const char *path,
26 pkgmgrinfo_archiveinfo_h *handle)
29 pkg_plugin_set *plugin_set;
30 package_manager_pkg_detail_info_t *info;
32 if (path == NULL || handle == NULL) {
33 _LOGE("invalid parameter");
34 return PMINFO_R_EINVAL;
37 pkg_type = __get_type_from_path(path);
38 if (pkg_type == NULL) {
39 _LOGE("cannot get pkg type");
40 return PMINFO_R_ERROR;
43 plugin_set = __load_library(pkg_type);
44 if (plugin_set == NULL) {
45 _LOGE("failed to load library for %s", pkg_type);
47 return PMINFO_R_ERROR;
50 info = calloc(1, sizeof(package_manager_pkg_detail_info_t));
52 _LOGE("out of memory");
53 __unload_library(pkg_type);
55 return PMINFO_R_ERROR;
58 if (plugin_set->get_pkg_detail_info_from_package(path, info)) {
59 _LOGE("failed to get archive info of %s", path);
61 __unload_library(pkg_type);
63 return PMINFO_R_ERROR;
72 API int pkgmgrinfo_archiveinfo_destroy_archiveinfo(
73 pkgmgrinfo_archiveinfo_h handle)
75 package_manager_pkg_detail_info_t *info =
76 (package_manager_pkg_detail_info_t *)handle;
79 _LOGE("invalid parameter");
80 return PMINFO_R_EINVAL;
84 g_list_free_full(info->privilege_list, free);
85 g_list_free_full(info->dependency_list, free);
91 API int pkgmgrinfo_archiveinfo_get_pkgid(pkgmgrinfo_archiveinfo_h handle,
94 package_manager_pkg_detail_info_t *info =
95 (package_manager_pkg_detail_info_t *)handle;
97 if (info == NULL || strlen(info->pkgid) == 0 || pkgid == NULL) {
98 _LOGE("invalid parameter");
99 return PMINFO_R_EINVAL;
102 *pkgid = info->pkgid;
107 API int pkgmgrinfo_archiveinfo_get_type(pkgmgrinfo_archiveinfo_h handle,
110 package_manager_pkg_detail_info_t *info =
111 (package_manager_pkg_detail_info_t *)handle;
113 if (info == NULL || strlen(info->pkg_type) == 0 || type == NULL) {
114 _LOGE("invalid parameter");
115 return PMINFO_R_EINVAL;
118 *type = info->pkg_type;
123 API int pkgmgrinfo_archiveinfo_get_version(pkgmgrinfo_archiveinfo_h handle,
124 const char **version)
126 package_manager_pkg_detail_info_t *info =
127 (package_manager_pkg_detail_info_t *)handle;
129 if (info == NULL || strlen(info->version) == 0 || version == NULL) {
130 _LOGE("invalid parameter");
131 return PMINFO_R_EINVAL;
134 *version = info->version;
139 API int pkgmgrinfo_archiveinfo_get_api_version(pkgmgrinfo_archiveinfo_h handle,
140 const char **api_version)
142 package_manager_pkg_detail_info_t *info =
143 (package_manager_pkg_detail_info_t *)handle;
145 if (info == NULL || strlen(info->api_version) == 0 ||
146 api_version == NULL) {
147 _LOGE("invalid parameter");
148 return PMINFO_R_EINVAL;
151 *api_version = info->api_version;
156 API int pkgmgrinfo_archiveinfo_get_description(pkgmgrinfo_archiveinfo_h handle,
157 const char **description)
159 package_manager_pkg_detail_info_t *info =
160 (package_manager_pkg_detail_info_t *)handle;
162 if (info == NULL || description == NULL) {
163 _LOGE("invalid parameter");
164 return PMINFO_R_EINVAL;
167 if (strlen(info->pkg_description) == 0)
168 return PMINFO_R_ENOENT;
170 *description = info->pkg_description;
175 API int pkgmgrinfo_archiveinfo_get_label(pkgmgrinfo_archiveinfo_h handle,
178 package_manager_pkg_detail_info_t *info =
179 (package_manager_pkg_detail_info_t *)handle;
181 if (info == NULL || label == NULL) {
182 _LOGE("invalid parameter");
183 return PMINFO_R_EINVAL;
186 if (strlen(info->label) == 0)
187 return PMINFO_R_ENOENT;
189 *label = info->label;
194 API int pkgmgrinfo_archiveinfo_get_author(pkgmgrinfo_archiveinfo_h handle,
197 package_manager_pkg_detail_info_t *info =
198 (package_manager_pkg_detail_info_t *)handle;
200 if (info == NULL || author == NULL) {
201 _LOGE("invalid parameter");
202 return PMINFO_R_EINVAL;
205 if (strlen(info->author) == 0)
206 return PMINFO_R_ENOENT;
208 *author = info->author;
213 API int pkgmgrinfo_archiveinfo_get_icon(pkgmgrinfo_archiveinfo_h handle,
214 const unsigned char **icon, size_t *size)
216 package_manager_pkg_detail_info_t *info =
217 (package_manager_pkg_detail_info_t *)handle;
219 if (info == NULL || icon == NULL || size == NULL) {
220 _LOGE("invalid parameter");
221 return PMINFO_R_EINVAL;
224 if (info->icon_buf == NULL)
225 return PMINFO_R_ENOENT;
227 *icon = (unsigned char *)info->icon_buf;
228 *size = info->icon_size;
233 API int pkgmgrinfo_archiveinfo_foreach_dependency(
234 pkgmgrinfo_archiveinfo_h handle,
235 pkgmgrinfo_pkg_dependency_list_cb callback, void *user_data)
238 pkg_dependency_info_t *dependency_info;
239 package_manager_pkg_detail_info_t *info =
240 (package_manager_pkg_detail_info_t *)handle;
242 if (info == NULL || callback == NULL) {
243 _LOGE("invalid parameter");
244 return PMINFO_R_EINVAL;
247 for (tmp = info->dependency_list; tmp != NULL;
248 tmp = g_list_next(tmp)) {
249 dependency_info = (pkg_dependency_info_t *)tmp->data;
250 if (callback(info->pkgid,
251 dependency_info->pkgid,
252 dependency_info->type,
253 dependency_info->required_version,
255 return PMINFO_R_ERROR;