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) {
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) {
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) {
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 _LOGE("invalid parameter");
144 return PMINFO_R_EINVAL;
147 *api_version = info->api_version;
152 API int pkgmgrinfo_archiveinfo_get_description(pkgmgrinfo_archiveinfo_h handle,
153 const char **description)
155 package_manager_pkg_detail_info_t *info =
156 (package_manager_pkg_detail_info_t *)handle;
159 _LOGE("invalid parameter");
160 return PMINFO_R_EINVAL;
163 if (strlen(info->pkg_description) == 0)
164 return PMINFO_R_ENOENT;
166 *description = info->pkg_description;
171 API int pkgmgrinfo_archiveinfo_get_label(pkgmgrinfo_archiveinfo_h handle,
174 package_manager_pkg_detail_info_t *info =
175 (package_manager_pkg_detail_info_t *)handle;
178 _LOGE("invalid parameter");
179 return PMINFO_R_EINVAL;
182 if (strlen(info->label) == 0)
183 return PMINFO_R_ENOENT;
185 *label = info->label;
190 API int pkgmgrinfo_archiveinfo_get_author(pkgmgrinfo_archiveinfo_h handle,
193 package_manager_pkg_detail_info_t *info =
194 (package_manager_pkg_detail_info_t *)handle;
197 _LOGE("invalid parameter");
198 return PMINFO_R_EINVAL;
201 if (strlen(info->author) == 0)
202 return PMINFO_R_ENOENT;
204 *author = info->author;
209 API int pkgmgrinfo_archiveinfo_get_icon(pkgmgrinfo_archiveinfo_h handle,
210 const unsigned char **icon, size_t *size)
212 package_manager_pkg_detail_info_t *info =
213 (package_manager_pkg_detail_info_t *)handle;
216 _LOGE("invalid parameter");
217 return PMINFO_R_EINVAL;
220 if (info->icon_buf == NULL)
221 return PMINFO_R_ENOENT;
223 *icon = (unsigned char *)info->icon_buf;
224 *size = info->icon_size;