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.
19 #include <pkgmgr-info.h>
21 #include "package_archive_info.h"
22 #include "package_manager.h"
23 #include "package_manager_internal.h"
25 struct package_archive_info_s {
26 pkgmgrinfo_archiveinfo_h archive_info;
29 API int package_archive_info_create(const char *path,
30 package_archive_info_h *archive_info)
33 pkgmgrinfo_archiveinfo_h info;
34 struct package_archive_info_s *info_out;
36 if (path == NULL || archive_info == NULL) {
37 _LOGE("Invalid parameter");
38 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
41 ret = pkgmgrinfo_archiveinfo_get_archiveinfo(path, &info);
42 if (ret != PMINFO_R_OK) {
43 _LOGE("Failed to get archive info from %s", path);
44 return PACKAGE_MANAGER_ERROR_IO_ERROR;
47 info_out = malloc(sizeof(struct package_archive_info_s));
48 if (info_out == NULL) {
49 _LOGE("Out of memory");
50 pkgmgrinfo_archiveinfo_destroy_archiveinfo(info);
51 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
54 info_out->archive_info = info;
55 *archive_info = info_out;
57 return PACKAGE_MANAGER_ERROR_NONE;
60 API int package_archive_info_destroy(package_archive_info_h archive_info)
63 struct package_archive_info_s *info =
64 (struct package_archive_info_s *)archive_info;
66 if (archive_info == NULL) {
67 _LOGE("Invalid parameter");
68 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
71 ret = pkgmgrinfo_archiveinfo_destroy_archiveinfo(info->archive_info);
72 if (ret != PMINFO_R_OK)
73 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
76 return PACKAGE_MANAGER_ERROR_NONE;
79 API int package_archive_info_get_package(package_archive_info_h archive_info,
83 struct package_archive_info_s *info =
84 (struct package_archive_info_s *)archive_info;
87 if (archive_info == NULL || package == NULL) {
88 _LOGE("Invalid parameter");
89 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
92 ret = pkgmgrinfo_archiveinfo_get_pkgid(info->archive_info, &pkgid);
93 if (ret != PMINFO_R_OK)
94 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
96 *package = strdup(pkgid);
97 if (*package == NULL) {
98 _LOGE("Out of memory");
99 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
102 return PACKAGE_MANAGER_ERROR_NONE;
105 API int package_archive_info_get_type(package_archive_info_h archive_info,
109 struct package_archive_info_s *info =
110 (struct package_archive_info_s *)archive_info;
111 const char *pkg_type;
113 if (archive_info == NULL || type == NULL) {
114 _LOGE("Invalid parameter");
115 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
118 ret = pkgmgrinfo_archiveinfo_get_type(info->archive_info,
120 if (ret != PMINFO_R_OK)
121 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
123 *type = strdup(pkg_type);
125 _LOGE("Out of memory");
126 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
129 return PACKAGE_MANAGER_ERROR_NONE;
132 API int package_archive_info_get_version(package_archive_info_h archive_info,
136 struct package_archive_info_s *info =
137 (struct package_archive_info_s *)archive_info;
138 const char *pkg_version;
140 if (archive_info == NULL || version == NULL) {
141 _LOGE("Invalid parameter");
142 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
145 ret = pkgmgrinfo_archiveinfo_get_version(info->archive_info,
147 if (ret != PMINFO_R_OK)
148 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
150 *version = strdup(pkg_version);
151 if (*version == NULL) {
152 _LOGE("Out of memory");
153 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
156 return PACKAGE_MANAGER_ERROR_NONE;
159 API int package_archive_info_get_api_version(
160 package_archive_info_h archive_info, char **api_version)
163 struct package_archive_info_s *info =
164 (struct package_archive_info_s *)archive_info;
165 const char *pkg_api_version;
167 if (archive_info == NULL || api_version == NULL) {
168 _LOGE("Invalid parameter");
169 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
172 ret = pkgmgrinfo_archiveinfo_get_api_version(info->archive_info,
174 if (ret != PMINFO_R_OK)
175 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
177 *api_version = strdup(pkg_api_version);
178 if (*api_version == NULL) {
179 _LOGE("Out of memory");
180 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
183 return PACKAGE_MANAGER_ERROR_NONE;
186 API int package_archive_info_get_description(
187 package_archive_info_h archive_info, char **description)
190 struct package_archive_info_s *info =
191 (struct package_archive_info_s *)archive_info;
192 const char *pkg_description;
194 if (archive_info == NULL || description == NULL) {
195 _LOGE("Invalid parameter");
196 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
199 ret = pkgmgrinfo_archiveinfo_get_description(info->archive_info,
201 if (ret != PMINFO_R_OK)
202 return PACKAGE_MANAGER_ERROR_IO_ERROR;
204 *description = strdup(pkg_description);
205 if (*description == NULL) {
206 _LOGE("Out of memory");
207 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
210 return PACKAGE_MANAGER_ERROR_NONE;
213 API int package_archive_info_get_label(package_archive_info_h archive_info,
217 struct package_archive_info_s *info =
218 (struct package_archive_info_s *)archive_info;
219 const char *pkg_label;
221 if (archive_info == NULL || label == NULL) {
222 _LOGE("Invalid parameter");
223 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
226 ret = pkgmgrinfo_archiveinfo_get_label(info->archive_info,
228 if (ret != PMINFO_R_OK)
229 return PACKAGE_MANAGER_ERROR_IO_ERROR;
231 *label = strdup(pkg_label);
232 if (*label == NULL) {
233 _LOGE("Out of memory");
234 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
237 return PACKAGE_MANAGER_ERROR_NONE;
240 API int package_archive_info_get_author(package_archive_info_h archive_info,
244 struct package_archive_info_s *info =
245 (struct package_archive_info_s *)archive_info;
246 const char *pkg_author;
248 if (archive_info == NULL || author == NULL) {
249 _LOGE("Invalid parameter");
250 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
253 ret = pkgmgrinfo_archiveinfo_get_author(info->archive_info,
255 if (ret != PMINFO_R_OK)
256 return PACKAGE_MANAGER_ERROR_IO_ERROR;
258 *author = strdup(pkg_author);
259 if (*author == NULL) {
260 _LOGE("Out of memory");
261 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
264 return PACKAGE_MANAGER_ERROR_NONE;
267 API int package_archive_info_get_icon(package_archive_info_h archive_info,
268 unsigned char **icon, size_t *icon_size)
271 struct package_archive_info_s *info =
272 (struct package_archive_info_s *)archive_info;
273 const unsigned char *pkg_icon;
274 size_t pkg_icon_size;
275 unsigned char *icon_buf;
277 if (archive_info == NULL || icon == NULL || icon_size == NULL) {
278 _LOGE("Invalid parameter");
279 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
282 ret = pkgmgrinfo_archiveinfo_get_icon(info->archive_info,
283 &pkg_icon, &pkg_icon_size);
284 if (ret != PMINFO_R_OK)
285 return PACKAGE_MANAGER_ERROR_IO_ERROR;
287 icon_buf = malloc(pkg_icon_size * sizeof(unsigned char));
288 if (icon_buf == NULL) {
289 _LOGE("Out of memory");
290 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
293 memcpy(icon_buf, pkg_icon, pkg_icon_size);
295 *icon_size = pkg_icon_size;
297 return PACKAGE_MANAGER_ERROR_NONE;