2 * Copyright (c) 2011 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.
23 #include <package-manager.h>
24 #include <pkgmgr-info.h>
25 #include <tzplatform_config.h>
27 #include "package_info.h"
28 #include "package_manager.h"
29 #include "package_manager_internal.h"
31 struct package_info_s {
33 pkgmgrinfo_pkginfo_h pkgmgr_pkginfo;
36 struct package_cert_info_s {
38 pkgmgrinfo_certinfo_h pkgmgrinfo_certinfo;
41 typedef struct package_updateinfo_s {
42 pkgmgrinfo_updateinfo_h update_info;
43 } package_updateinfo_s;
45 typedef struct _foreach_app_context_ {
46 package_info_app_cb callback;
48 } foreach_app_context_s;
50 typedef struct _foreach_updateinfo_ {
51 package_info_updateinfo_cb callback;
53 } foreach_updateinfo_context_s;
55 static int package_info_foreach_updateinfo_cb(const pkgmgrinfo_updateinfo_h handle, void *user_data)
57 foreach_updateinfo_context_s *foreach_updateinfo = user_data;
60 if (handle == NULL || foreach_updateinfo == NULL)
61 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
62 iteration_next = foreach_updateinfo->callback(handle, foreach_updateinfo->user_data);
63 if (iteration_next == true)
66 return PMINFO_R_ERROR;
69 static int package_info_updateinfo_convert_type(pkgmgrinfo_updateinfo_update_type type, package_updateinfo_type_e *converted_type)
71 if (type == PMINFO_UPDATEINFO_NONE)
72 *converted_type = PACKAGE_UPDATEINFO_TYPE_NONE;
73 else if (type == PMINFO_UPDATEINFO_FORCE)
74 *converted_type = PACKAGE_UPDATEINFO_TYPE_FORCE;
75 else if (type == PMINFO_UPDATEINFO_OPTIONAL)
76 *converted_type = PACKAGE_UPDATEINFO_TYPE_OPTIONAL;
83 API int package_info_create(const char *package, package_info_h *package_info)
85 package_info_h package_info_created;
86 pkgmgrinfo_pkginfo_h pkgmgr_pkginfo;
88 if (package == NULL || package_info == NULL)
89 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
91 if (pkgmgrinfo_pkginfo_get_pkginfo(package, &pkgmgr_pkginfo) != PKGMGR_R_OK)
92 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
94 package_info_created = calloc(1, sizeof(struct package_info_s));
96 if (package_info_created == NULL) {
97 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgr_pkginfo);
98 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
101 package_info_created->package = strdup(package);
103 if (package_info_created->package == NULL) {
104 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgr_pkginfo);
105 free(package_info_created);
106 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
109 package_info_created->pkgmgr_pkginfo = pkgmgr_pkginfo;
111 *package_info = package_info_created;
113 return PACKAGE_MANAGER_ERROR_NONE;
116 static int package_info_foreach_app_cb(const pkgmgrinfo_appinfo_h handle, void *user_data)
119 pkgmgrinfo_app_component comp;
120 foreach_app_context_s *foreach_app_context = user_data;
124 if (handle == NULL || foreach_app_context == NULL) {
125 package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
126 return PKGMGR_R_EINVAL;
129 ret = pkgmgrinfo_appinfo_get_appid(handle, &appid);
131 return PKGMGR_R_ERROR;
133 ret = pkgmgrinfo_appinfo_get_component(handle, &comp);
135 return PKGMGR_R_ERROR;
137 r = foreach_app_context->callback(comp, appid, foreach_app_context->user_data);
139 return (r == true) ? PKGMGR_R_OK : PKGMGR_R_ERROR;
142 API int package_info_foreach_app_from_package(package_info_h package_info, package_info_app_component_type_e comp_type, package_info_app_cb callback, void *user_data)
144 foreach_app_context_s foreach_app_context = {
145 .callback = callback,
146 .user_data = user_data,
149 if (package_info == NULL || callback == NULL)
150 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
152 if (comp_type == PACKAGE_INFO_ALLAPP)
153 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_ALL_APP, package_info_foreach_app_cb, &foreach_app_context);
154 if (comp_type == PACKAGE_INFO_UIAPP)
155 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_UI_APP, package_info_foreach_app_cb, &foreach_app_context);
156 if (comp_type == PACKAGE_INFO_SERVICEAPP)
157 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_SVC_APP, package_info_foreach_app_cb, &foreach_app_context);
158 if (comp_type == PACKAGE_INFO_WIDGETAPP)
159 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_WIDGET_APP, package_info_foreach_app_cb, &foreach_app_context);
160 if (comp_type == PACKAGE_INFO_WATCHAPP)
161 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_WATCH_APP, package_info_foreach_app_cb, &foreach_app_context);
163 return PACKAGE_MANAGER_ERROR_NONE;
166 API int package_info_destroy(package_info_h package_info)
168 if (package_info == NULL)
169 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
171 free(package_info->package);
173 pkgmgrinfo_pkginfo_destroy_pkginfo(package_info->pkgmgr_pkginfo);
177 return PACKAGE_MANAGER_ERROR_NONE;
180 API int package_info_get_package(package_info_h package_info, char **package)
184 if (package_info == NULL || package == NULL)
185 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
187 package_dup = strdup(package_info->package);
189 if (package_dup == NULL)
190 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
192 *package = package_dup;
194 return PACKAGE_MANAGER_ERROR_NONE;
197 API int package_info_get_main_app_id(package_info_h package_info, char **main_app_id)
200 char *pkg_info_value;
202 if (package_info == NULL || main_app_id == NULL)
203 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
205 if (pkgmgrinfo_pkginfo_get_mainappid(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
206 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
208 mainappid_dup = strdup(pkg_info_value);
209 if (mainappid_dup == NULL)
210 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
212 *main_app_id = mainappid_dup;
214 return PACKAGE_MANAGER_ERROR_NONE;
217 API int package_info_get_label(package_info_h package_info, char **label)
219 char *pkg_info_value = NULL;
220 char *label_dup = NULL;
222 if (package_info == NULL || label == NULL)
223 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
225 if (pkgmgrinfo_pkginfo_get_label(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
226 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
231 label_dup = strdup(pkg_info_value);
233 if (label_dup == NULL)
234 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
239 return PACKAGE_MANAGER_ERROR_NONE;
242 API int package_info_get_icon(package_info_h package_info, char **path)
244 char *pkg_info_value = NULL;
245 char *icon_dup = NULL;
247 if (package_info == NULL || path == NULL)
248 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
250 if (pkgmgrinfo_pkginfo_get_icon(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
251 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
256 icon_dup = strdup(pkg_info_value);
258 if (icon_dup == NULL)
259 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
264 return PACKAGE_MANAGER_ERROR_NONE;
267 API int package_info_get_version(package_info_h package_info, char **version)
269 char *pkg_info_value = NULL;
270 char *ver_dup = NULL;
272 if (package_info == NULL || version == NULL)
273 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
275 if (pkgmgrinfo_pkginfo_get_version(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
276 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
281 ver_dup = strdup(pkg_info_value);
284 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
289 return PACKAGE_MANAGER_ERROR_NONE;
292 API int package_info_get_type(package_info_h package_info, char **type)
294 char *pkg_info_value = NULL;
295 char *type_dup = NULL;
297 if (package_info == NULL || type == NULL)
298 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
300 if (pkgmgrinfo_pkginfo_get_type(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
301 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
306 type_dup = strdup(pkg_info_value);
308 if (type_dup == NULL)
309 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
314 return PACKAGE_MANAGER_ERROR_NONE;
317 API int package_info_get_installed_storage(package_info_h package_info, package_info_installed_storage_type_e *storage)
320 pkgmgrinfo_installed_storage pkg_info_value;
322 if (package_info == NULL || storage == NULL)
323 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
325 ret = pkgmgrinfo_pkginfo_get_installed_storage(package_info->pkgmgr_pkginfo, &pkg_info_value);
327 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
329 if (pkg_info_value == PMINFO_INTERNAL_STORAGE)
330 *storage = PACKAGE_INFO_INTERNAL_STORAGE;
331 else if (pkg_info_value == PMINFO_EXTERNAL_STORAGE)
332 *storage = PACKAGE_INFO_EXTERNAL_STORAGE;
333 else if (pkg_info_value == PMINFO_EXTENDED_STORAGE)
334 *storage = PACKAGE_INFO_EXTENDED_STORAGE;
336 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
338 return PACKAGE_MANAGER_ERROR_NONE;
341 API int package_info_get_root_path(package_info_h package_info, char **path)
343 char *pkg_info_value = NULL;
344 char *path_dup = NULL;
346 if (package_info == NULL || path == NULL)
347 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
349 if (pkgmgrinfo_pkginfo_get_root_path(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
350 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
355 path_dup = strdup(pkg_info_value);
357 if (path_dup == NULL)
358 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
363 return PACKAGE_MANAGER_ERROR_NONE;
366 API int package_info_get_tep_name(package_info_h package_info, char **name)
368 char *tepname_tmp = NULL;
371 if (package_info == NULL || package_info->package == NULL || name == NULL)
372 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
374 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
375 if (retval != PACKAGE_MANAGER_ERROR_NONE)
378 if (pkgmgrinfo_pkginfo_get_tep_name(package_info->pkgmgr_pkginfo, &tepname_tmp) != PMINFO_R_OK)
379 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
381 if (tepname_tmp != NULL)
382 *name = strdup(tepname_tmp);
385 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
387 return PACKAGE_MANAGER_ERROR_NONE;
390 API int package_info_is_system_package(package_info_h package_info, bool *system)
392 bool pkg_info_value = false;
394 if (package_info == NULL || system == NULL)
395 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
397 if (pkgmgrinfo_pkginfo_is_system(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
398 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
400 *system = pkg_info_value;
402 return PACKAGE_MANAGER_ERROR_NONE;
405 API int package_info_is_removable_package(package_info_h package_info, bool *removable)
407 bool pkg_info_value = false;
409 if (package_info == NULL || removable == NULL)
410 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
412 if (pkgmgrinfo_pkginfo_is_removable(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
413 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
415 *removable = pkg_info_value;
417 return PACKAGE_MANAGER_ERROR_NONE;
420 API int package_info_is_preload_package(package_info_h package_info, bool *preload)
422 bool pkg_info_value = false;
424 if (package_info == NULL || preload == NULL)
425 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
427 if (pkgmgrinfo_pkginfo_is_preload(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
428 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
430 *preload = pkg_info_value;
432 return PACKAGE_MANAGER_ERROR_NONE;
435 API int package_info_is_equal(package_info_h lhs, package_info_h rhs, bool *equal)
437 if (lhs == NULL || rhs == NULL || equal == NULL)
438 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
440 if (!strcmp(lhs->package, rhs->package))
445 return PACKAGE_MANAGER_ERROR_NONE;
448 API int package_info_is_accessible(package_info_h package_info, bool *accessible)
451 bool pkg_info_value = false;
453 if (package_info == NULL || accessible == NULL)
454 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
456 ret = pkgmgrinfo_pkginfo_is_accessible(package_info->pkgmgr_pkginfo, &pkg_info_value);
458 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
461 *accessible = pkg_info_value;
463 return PACKAGE_MANAGER_ERROR_NONE;
466 API int package_info_get_installed_time(package_info_h package_info, int *installed_time)
471 if (package_info == NULL || installed_time == NULL)
472 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
474 ret = pkgmgrinfo_pkginfo_get_installed_time(package_info->pkgmgr_pkginfo, &time_value);
476 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
478 *installed_time = time_value;
480 return PACKAGE_MANAGER_ERROR_NONE;
483 API int package_info_clone(package_info_h *clone, package_info_h package_info)
487 if (clone == NULL || package_info == NULL)
488 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
490 retval = package_info_create(package_info->package, clone);
492 if (retval != PACKAGE_MANAGER_ERROR_NONE)
493 return package_manager_error(retval, __FUNCTION__, NULL);
495 return PACKAGE_MANAGER_ERROR_NONE;
498 API int package_info_foreach_cert_info(package_info_h package_info, package_info_cert_info_cb callback, void *user_data)
501 pkgmgrinfo_certinfo_h handle = NULL;
503 const char *cert_value = NULL;
505 if (package_info == NULL || callback == NULL)
506 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
508 retval = pkgmgrinfo_pkginfo_create_certinfo(&handle);
509 if (retval != PMINFO_R_OK)
510 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
512 retval = pkgmgrinfo_pkginfo_load_certinfo(package_info->package, handle, getuid());
513 if (retval != PMINFO_R_OK) {
514 pkgmgrinfo_pkginfo_destroy_certinfo(handle);
515 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
518 for (i = 0; i <= PACKAGE_INFO_DISTRIBUTOR2_SIGNER_CERT; i++) {
519 retval = pkgmgrinfo_pkginfo_get_cert_value(handle, i, &cert_value);
520 if (retval != PMINFO_R_OK) {
521 pkgmgrinfo_pkginfo_destroy_certinfo(handle);
522 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
525 if (cert_value && strncmp(cert_value, "(null)", strlen("(null)"))) {
526 retval = callback(package_info, (package_cert_type_e)i, cert_value, user_data);
534 pkgmgrinfo_pkginfo_destroy_certinfo(handle);
536 return PACKAGE_MANAGER_ERROR_NONE;
539 API int package_info_foreach_privilege_info(package_info_h package_info, package_info_privilege_info_cb callback, void *user_data)
543 if (package_info == NULL || callback == NULL)
544 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
546 ret = pkgmgrinfo_pkginfo_foreach_privilege(package_info->pkgmgr_pkginfo, (pkgmgrinfo_pkg_privilege_list_cb)callback, user_data);
551 API int package_info_updateinfo_create(const char *pkgid, package_updateinfo_h *info)
554 package_updateinfo_s *update_info;
556 if (pkgid == NULL || info == NULL)
557 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
559 update_info = calloc(1, sizeof(package_updateinfo_s));
560 if (update_info == NULL)
561 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
563 ret = pkgmgrinfo_updateinfo_get_updateinfo(pkgid, &update_info->update_info);
564 if (ret == PMINFO_R_ENOENT) {
566 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
567 } else if (ret == PMINFO_R_EINVAL) {
569 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
570 } else if (ret == PMINFO_R_ERROR) {
572 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
576 return PACKAGE_MANAGER_ERROR_NONE;
579 API int package_info_updateinfo_get_pkgid(package_updateinfo_h info, char **package)
582 char *pkg_updateinfo_value = NULL;
584 package_updateinfo_s *update_info;
586 if (package == NULL || info == NULL)
587 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
589 update_info = (package_updateinfo_s *)info;
590 ret = pkgmgrinfo_updateinfo_get_pkgid(update_info->update_info, &pkg_updateinfo_value);
591 if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
592 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
594 pkgid_dup = strdup(pkg_updateinfo_value);
595 if (pkgid_dup == NULL)
596 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
598 *package = pkgid_dup;
599 return PACKAGE_MANAGER_ERROR_NONE;
602 API int package_info_updateinfo_get_version(package_updateinfo_h info, char **version)
605 char *pkg_updateinfo_value = NULL;
607 package_updateinfo_s *update_info;
609 if (info == NULL || version == NULL)
610 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
612 update_info = (package_updateinfo_s *)info;
613 ret = pkgmgrinfo_updateinfo_get_version(update_info->update_info, &pkg_updateinfo_value);
614 if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
615 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
617 ver_dup = strdup(pkg_updateinfo_value);
619 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
622 return PACKAGE_MANAGER_ERROR_NONE;
625 API int package_info_updateinfo_get_type(package_updateinfo_h info, package_updateinfo_type_e *type)
628 pkgmgrinfo_updateinfo_update_type pkg_updateinfo_value;
629 package_updateinfo_type_e converted_type;
630 package_updateinfo_s *update_info;
632 if (info == NULL || type == NULL)
633 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
635 update_info = (package_updateinfo_s *)info;
636 ret = pkgmgrinfo_updateinfo_get_update_type(update_info->update_info, &pkg_updateinfo_value);
637 if (ret != PMINFO_R_OK)
638 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
640 ret = package_info_updateinfo_convert_type(pkg_updateinfo_value, &converted_type);
642 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
644 *type = converted_type;
645 return PACKAGE_MANAGER_ERROR_NONE;
648 API int package_info_updateinfo_destroy(package_updateinfo_h info)
650 package_updateinfo_s *update_info;
653 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
655 update_info = (package_updateinfo_s *)info;
656 pkgmgrinfo_updateinfo_destroy(update_info->update_info);
659 return PACKAGE_MANAGER_ERROR_NONE;
662 API int package_info_updateinfo_foreach_info(package_info_updateinfo_cb callback, void *user_data)
666 if (callback == NULL)
667 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
669 foreach_updateinfo_context_s foreach_updateinfo = {
670 .callback = callback,
671 .user_data = user_data,
674 ret = pkgmgrinfo_updateinfo_foreach_updateinfo(package_info_foreach_updateinfo_cb, &foreach_updateinfo);
675 if (ret != PMINFO_R_OK)
676 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
678 return PACKAGE_MANAGER_ERROR_NONE;
681 int package_info_create_with_pkginfo(pkgmgrinfo_pkginfo_h pkg_handle, package_info_h *package_info)
683 package_info_h pkg_info = NULL;
684 char *pkg_name = NULL;
687 ret = pkgmgrinfo_pkginfo_get_pkgid(pkg_handle, &pkg_name);
688 if (ret != PMINFO_R_OK)
689 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
691 pkg_info = calloc(1, sizeof(struct package_info_s));
692 if (pkg_info == NULL)
693 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
695 pkg_info->package = strdup(pkg_name);
696 if (pkg_info->package == NULL) {
698 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
701 pkg_info->pkgmgr_pkginfo = pkg_handle;
702 *package_info = pkg_info;
704 return PACKAGE_MANAGER_ERROR_NONE;
707 int package_info_destroy_handle(package_info_h handle)
710 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
712 free(handle->package);
715 return PACKAGE_MANAGER_ERROR_NONE;