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;
88 API int pkgmgrinfo_archiveinfo_get_pkgid(pkgmgrinfo_archiveinfo_h handle,
91 package_manager_pkg_detail_info_t *info =
92 (package_manager_pkg_detail_info_t *)handle;
94 if (info == NULL || strlen(info->pkgid) == 0 || pkgid == NULL) {
95 _LOGE("invalid parameter");
96 return PMINFO_R_EINVAL;
104 API int pkgmgrinfo_archiveinfo_get_type(pkgmgrinfo_archiveinfo_h handle,
107 package_manager_pkg_detail_info_t *info =
108 (package_manager_pkg_detail_info_t *)handle;
110 if (info == NULL || strlen(info->pkg_type) == 0 || type == NULL ) {
111 _LOGE("invalid parameter");
112 return PMINFO_R_EINVAL;
115 *type = info->pkg_type;
120 API int pkgmgrinfo_archiveinfo_get_version(pkgmgrinfo_archiveinfo_h handle,
121 const char **version)
123 package_manager_pkg_detail_info_t *info =
124 (package_manager_pkg_detail_info_t *)handle;
126 if (info == NULL || strlen(info->version) == 0 || version == NULL) {
127 _LOGE("invalid parameter");
128 return PMINFO_R_EINVAL;
131 *version = info->version;
136 API int pkgmgrinfo_archiveinfo_get_api_version(pkgmgrinfo_archiveinfo_h handle,
137 const char **api_version)
139 package_manager_pkg_detail_info_t *info =
140 (package_manager_pkg_detail_info_t *)handle;
142 if (info == NULL || strlen(info->api_version) == 0 ||
143 api_version == NULL) {
144 _LOGE("invalid parameter");
145 return PMINFO_R_EINVAL;
148 *api_version = info->api_version;
153 API int pkgmgrinfo_archiveinfo_get_description(pkgmgrinfo_archiveinfo_h handle,
154 const char **description)
156 package_manager_pkg_detail_info_t *info =
157 (package_manager_pkg_detail_info_t *)handle;
159 if (info == NULL || description == NULL) {
160 _LOGE("invalid parameter");
161 return PMINFO_R_EINVAL;
164 if (strlen(info->pkg_description) == 0)
165 return PMINFO_R_ENOENT;
167 *description = info->pkg_description;
172 API int pkgmgrinfo_archiveinfo_get_label(pkgmgrinfo_archiveinfo_h handle,
175 package_manager_pkg_detail_info_t *info =
176 (package_manager_pkg_detail_info_t *)handle;
178 if (info == NULL || label == NULL) {
179 _LOGE("invalid parameter");
180 return PMINFO_R_EINVAL;
183 if (strlen(info->label) == 0)
184 return PMINFO_R_ENOENT;
186 *label = info->label;
191 API int pkgmgrinfo_archiveinfo_get_author(pkgmgrinfo_archiveinfo_h handle,
194 package_manager_pkg_detail_info_t *info =
195 (package_manager_pkg_detail_info_t *)handle;
197 if (info == NULL || author == NULL) {
198 _LOGE("invalid parameter");
199 return PMINFO_R_EINVAL;
202 if (strlen(info->author) == 0)
203 return PMINFO_R_ENOENT;
205 *author = info->author;
210 API int pkgmgrinfo_archiveinfo_get_icon(pkgmgrinfo_archiveinfo_h handle,
211 const unsigned char **icon, size_t *size)
213 package_manager_pkg_detail_info_t *info =
214 (package_manager_pkg_detail_info_t *)handle;
216 if (info == NULL || icon == NULL || size == NULL) {
217 _LOGE("invalid parameter");
218 return PMINFO_R_EINVAL;
221 if (info->icon_buf == NULL)
222 return PMINFO_R_ENOENT;
224 *icon = (unsigned char *)info->icon_buf;
225 *size = info->icon_size;