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;
71 API int pkgmgrinfo_archiveinfo_destroy_archiveinfo(
72 pkgmgrinfo_archiveinfo_h handle)
74 package_manager_pkg_detail_info_t *info =
75 (package_manager_pkg_detail_info_t *)handle;
78 _LOGE("invalid parameter");
79 return PMINFO_R_EINVAL;
83 g_list_free_full(info->privilege_list, free);
84 g_list_free_full(info->dependency_list, free);
90 API int pkgmgrinfo_archiveinfo_get_pkgid(pkgmgrinfo_archiveinfo_h handle,
93 package_manager_pkg_detail_info_t *info =
94 (package_manager_pkg_detail_info_t *)handle;
96 if (info == NULL || strlen(info->pkgid) == 0 || pkgid == NULL) {
97 _LOGE("invalid parameter");
98 return PMINFO_R_EINVAL;
101 *pkgid = info->pkgid;
106 API int pkgmgrinfo_archiveinfo_get_type(pkgmgrinfo_archiveinfo_h handle,
109 package_manager_pkg_detail_info_t *info =
110 (package_manager_pkg_detail_info_t *)handle;
112 if (info == NULL || strlen(info->pkg_type) == 0 || type == NULL ) {
113 _LOGE("invalid parameter");
114 return PMINFO_R_EINVAL;
117 *type = info->pkg_type;
122 API int pkgmgrinfo_archiveinfo_get_version(pkgmgrinfo_archiveinfo_h handle,
123 const char **version)
125 package_manager_pkg_detail_info_t *info =
126 (package_manager_pkg_detail_info_t *)handle;
128 if (info == NULL || strlen(info->version) == 0 || version == NULL) {
129 _LOGE("invalid parameter");
130 return PMINFO_R_EINVAL;
133 *version = info->version;
138 API int pkgmgrinfo_archiveinfo_get_api_version(pkgmgrinfo_archiveinfo_h handle,
139 const char **api_version)
141 package_manager_pkg_detail_info_t *info =
142 (package_manager_pkg_detail_info_t *)handle;
144 if (info == NULL || strlen(info->api_version) == 0 ||
145 api_version == NULL) {
146 _LOGE("invalid parameter");
147 return PMINFO_R_EINVAL;
150 *api_version = info->api_version;
155 API int pkgmgrinfo_archiveinfo_get_description(pkgmgrinfo_archiveinfo_h handle,
156 const char **description)
158 package_manager_pkg_detail_info_t *info =
159 (package_manager_pkg_detail_info_t *)handle;
161 if (info == NULL || description == NULL) {
162 _LOGE("invalid parameter");
163 return PMINFO_R_EINVAL;
166 if (strlen(info->pkg_description) == 0)
167 return PMINFO_R_ENOENT;
169 *description = info->pkg_description;
174 API int pkgmgrinfo_archiveinfo_get_label(pkgmgrinfo_archiveinfo_h handle,
177 package_manager_pkg_detail_info_t *info =
178 (package_manager_pkg_detail_info_t *)handle;
180 if (info == NULL || label == NULL) {
181 _LOGE("invalid parameter");
182 return PMINFO_R_EINVAL;
185 if (strlen(info->label) == 0)
186 return PMINFO_R_ENOENT;
188 *label = info->label;
193 API int pkgmgrinfo_archiveinfo_get_author(pkgmgrinfo_archiveinfo_h handle,
196 package_manager_pkg_detail_info_t *info =
197 (package_manager_pkg_detail_info_t *)handle;
199 if (info == NULL || author == NULL) {
200 _LOGE("invalid parameter");
201 return PMINFO_R_EINVAL;
204 if (strlen(info->author) == 0)
205 return PMINFO_R_ENOENT;
207 *author = info->author;
212 API int pkgmgrinfo_archiveinfo_get_icon(pkgmgrinfo_archiveinfo_h handle,
213 const unsigned char **icon, size_t *size)
215 package_manager_pkg_detail_info_t *info =
216 (package_manager_pkg_detail_info_t *)handle;
218 if (info == NULL || icon == NULL || size == NULL) {
219 _LOGE("invalid parameter");
220 return PMINFO_R_EINVAL;
223 if (info->icon_buf == NULL)
224 return PMINFO_R_ENOENT;
226 *icon = (unsigned char *)info->icon_buf;
227 *size = info->icon_size;
232 API int pkgmgrinfo_archiveinfo_foreach_dependency(
233 pkgmgrinfo_archiveinfo_h handle,
234 pkgmgrinfo_pkg_dependency_list_cb callback, void *user_data)
237 pkg_dependency_info_t *dependency_info;
238 package_manager_pkg_detail_info_t *info =
239 (package_manager_pkg_detail_info_t *)handle;
241 if (info == NULL || callback == NULL) {
242 _LOGE("invalid parameter");
243 return PMINFO_R_EINVAL;
246 for (tmp = info->dependency_list; tmp != NULL;
247 tmp = g_list_next(tmp)) {
248 dependency_info = (pkg_dependency_info_t *)tmp->data;
249 if (callback(info->pkgid,
250 dependency_info->pkgid,
251 dependency_info->type,
252 dependency_info->required_version,
254 return PMINFO_R_ERROR;