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 typedef struct _foreach_privilege_ {
56 package_info_privilege_info_cb callback;
58 } foreach_privilege_s;
60 static int package_info_foreach_updateinfo_cb(const pkgmgrinfo_updateinfo_h handle, void *user_data)
62 foreach_updateinfo_context_s *foreach_updateinfo = user_data;
65 if (handle == NULL || foreach_updateinfo == NULL)
66 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
67 iteration_next = foreach_updateinfo->callback(handle, foreach_updateinfo->user_data);
68 if (iteration_next == true)
71 return PMINFO_R_ERROR;
74 static int package_info_updateinfo_convert_type(pkgmgrinfo_updateinfo_update_type type, package_updateinfo_type_e *converted_type)
76 if (type == PMINFO_UPDATEINFO_NONE)
77 *converted_type = PACKAGE_UPDATEINFO_TYPE_NONE;
78 else if (type == PMINFO_UPDATEINFO_FORCE)
79 *converted_type = PACKAGE_UPDATEINFO_TYPE_FORCE;
80 else if (type == PMINFO_UPDATEINFO_OPTIONAL)
81 *converted_type = PACKAGE_UPDATEINFO_TYPE_OPTIONAL;
88 API int package_info_create(const char *package, package_info_h *package_info)
90 package_info_h package_info_created;
91 pkgmgrinfo_pkginfo_h pkgmgr_pkginfo;
93 if (package == NULL || package_info == NULL)
94 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
96 if (pkgmgrinfo_pkginfo_get_pkginfo(package, &pkgmgr_pkginfo) != PKGMGR_R_OK)
97 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
99 package_info_created = calloc(1, sizeof(struct package_info_s));
101 if (package_info_created == NULL) {
102 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgr_pkginfo);
103 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
106 package_info_created->package = strdup(package);
108 if (package_info_created->package == NULL) {
109 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgr_pkginfo);
110 free(package_info_created);
111 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
114 package_info_created->pkgmgr_pkginfo = pkgmgr_pkginfo;
116 *package_info = package_info_created;
118 return PACKAGE_MANAGER_ERROR_NONE;
121 static int package_info_foreach_app_cb(const pkgmgrinfo_appinfo_h handle, void *user_data)
124 pkgmgrinfo_app_component comp;
125 foreach_app_context_s *foreach_app_context = user_data;
129 if (handle == NULL || foreach_app_context == NULL) {
130 package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
131 return PKGMGR_R_EINVAL;
134 ret = pkgmgrinfo_appinfo_get_appid(handle, &appid);
136 return PKGMGR_R_ERROR;
138 ret = pkgmgrinfo_appinfo_get_component(handle, &comp);
140 return PKGMGR_R_ERROR;
142 r = foreach_app_context->callback(comp, appid, foreach_app_context->user_data);
144 return (r == true) ? PKGMGR_R_OK : PKGMGR_R_ERROR;
147 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)
149 foreach_app_context_s foreach_app_context = {
150 .callback = callback,
151 .user_data = user_data,
154 if (package_info == NULL || callback == NULL)
155 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
157 if (comp_type == PACKAGE_INFO_ALLAPP)
158 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_ALL_APP, package_info_foreach_app_cb, &foreach_app_context);
159 if (comp_type == PACKAGE_INFO_UIAPP)
160 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_UI_APP, package_info_foreach_app_cb, &foreach_app_context);
161 if (comp_type == PACKAGE_INFO_SERVICEAPP)
162 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_SVC_APP, package_info_foreach_app_cb, &foreach_app_context);
163 if (comp_type == PACKAGE_INFO_WIDGETAPP)
164 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_WIDGET_APP, package_info_foreach_app_cb, &foreach_app_context);
165 if (comp_type == PACKAGE_INFO_WATCHAPP)
166 pkgmgrinfo_appinfo_get_list(package_info->pkgmgr_pkginfo, PMINFO_WATCH_APP, package_info_foreach_app_cb, &foreach_app_context);
168 return PACKAGE_MANAGER_ERROR_NONE;
171 API int package_info_destroy(package_info_h package_info)
173 if (package_info == NULL)
174 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
176 free(package_info->package);
178 pkgmgrinfo_pkginfo_destroy_pkginfo(package_info->pkgmgr_pkginfo);
182 return PACKAGE_MANAGER_ERROR_NONE;
185 API int package_info_get_package(package_info_h package_info, char **package)
189 if (package_info == NULL || package == NULL)
190 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
192 package_dup = strdup(package_info->package);
194 if (package_dup == NULL)
195 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
197 *package = package_dup;
199 return PACKAGE_MANAGER_ERROR_NONE;
202 API int package_info_get_main_app_id(package_info_h package_info, char **main_app_id)
205 char *pkg_info_value;
207 if (package_info == NULL || main_app_id == NULL)
208 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
210 if (pkgmgrinfo_pkginfo_get_mainappid(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
211 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
213 mainappid_dup = strdup(pkg_info_value);
214 if (mainappid_dup == NULL)
215 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
217 *main_app_id = mainappid_dup;
219 return PACKAGE_MANAGER_ERROR_NONE;
222 API int package_info_get_label(package_info_h package_info, char **label)
224 char *pkg_info_value = NULL;
225 char *label_dup = NULL;
227 if (package_info == NULL || label == NULL)
228 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
230 if (pkgmgrinfo_pkginfo_get_label(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
231 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
236 label_dup = strdup(pkg_info_value);
238 if (label_dup == NULL)
239 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
244 return PACKAGE_MANAGER_ERROR_NONE;
247 API int package_info_get_icon(package_info_h package_info, char **path)
249 char *pkg_info_value = NULL;
250 char *icon_dup = NULL;
252 if (package_info == NULL || path == NULL)
253 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
255 if (pkgmgrinfo_pkginfo_get_icon(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
256 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
261 icon_dup = strdup(pkg_info_value);
263 if (icon_dup == NULL)
264 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
269 return PACKAGE_MANAGER_ERROR_NONE;
272 API int package_info_get_version(package_info_h package_info, char **version)
274 char *pkg_info_value = NULL;
275 char *ver_dup = NULL;
277 if (package_info == NULL || version == NULL)
278 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
280 if (pkgmgrinfo_pkginfo_get_version(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
281 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
286 ver_dup = strdup(pkg_info_value);
289 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
294 return PACKAGE_MANAGER_ERROR_NONE;
297 API int package_info_get_type(package_info_h package_info, char **type)
299 char *pkg_info_value = NULL;
300 char *type_dup = NULL;
302 if (package_info == NULL || type == NULL)
303 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
305 if (pkgmgrinfo_pkginfo_get_type(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
306 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
311 type_dup = strdup(pkg_info_value);
313 if (type_dup == NULL)
314 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
319 return PACKAGE_MANAGER_ERROR_NONE;
322 API int package_info_get_installed_storage(package_info_h package_info, package_info_installed_storage_type_e *storage)
325 pkgmgrinfo_installed_storage pkg_info_value;
327 if (package_info == NULL || storage == NULL)
328 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
330 ret = pkgmgrinfo_pkginfo_get_installed_storage(package_info->pkgmgr_pkginfo, &pkg_info_value);
332 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
334 if (pkg_info_value == PMINFO_INTERNAL_STORAGE)
335 *storage = PACKAGE_INFO_INTERNAL_STORAGE;
336 else if (pkg_info_value == PMINFO_EXTERNAL_STORAGE)
337 *storage = PACKAGE_INFO_EXTERNAL_STORAGE;
338 else if (pkg_info_value == PMINFO_EXTENDED_STORAGE)
339 *storage = PACKAGE_INFO_EXTENDED_STORAGE;
341 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
343 return PACKAGE_MANAGER_ERROR_NONE;
346 API int package_info_get_root_path(package_info_h package_info, char **path)
348 char *pkg_info_value = NULL;
349 char *path_dup = NULL;
351 if (package_info == NULL || path == NULL)
352 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
354 if (pkgmgrinfo_pkginfo_get_root_path(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
355 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
360 path_dup = strdup(pkg_info_value);
362 if (path_dup == NULL)
363 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
368 return PACKAGE_MANAGER_ERROR_NONE;
371 API int package_info_get_tep_name(package_info_h package_info, char **name)
373 char *tepname_tmp = NULL;
376 if (package_info == NULL || package_info->package == NULL || name == NULL)
377 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
379 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
380 if (retval != PACKAGE_MANAGER_ERROR_NONE)
383 if (pkgmgrinfo_pkginfo_get_tep_name(package_info->pkgmgr_pkginfo, &tepname_tmp) != PMINFO_R_OK)
384 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
386 if (tepname_tmp != NULL)
387 *name = strdup(tepname_tmp);
390 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
392 return PACKAGE_MANAGER_ERROR_NONE;
395 API int package_info_is_system_package(package_info_h package_info, bool *system)
397 bool pkg_info_value = false;
399 if (package_info == NULL || system == NULL)
400 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
402 if (pkgmgrinfo_pkginfo_is_system(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
403 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
405 *system = pkg_info_value;
407 return PACKAGE_MANAGER_ERROR_NONE;
410 API int package_info_is_removable_package(package_info_h package_info, bool *removable)
412 bool pkg_info_value = false;
414 if (package_info == NULL || removable == NULL)
415 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
417 if (pkgmgrinfo_pkginfo_is_removable(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
418 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
420 *removable = pkg_info_value;
422 return PACKAGE_MANAGER_ERROR_NONE;
425 API int package_info_is_preload_package(package_info_h package_info, bool *preload)
427 bool pkg_info_value = false;
429 if (package_info == NULL || preload == NULL)
430 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
432 if (pkgmgrinfo_pkginfo_is_preload(package_info->pkgmgr_pkginfo, &pkg_info_value) != PKGMGR_R_OK)
433 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
435 *preload = pkg_info_value;
437 return PACKAGE_MANAGER_ERROR_NONE;
440 API int package_info_is_equal(package_info_h lhs, package_info_h rhs, bool *equal)
442 if (lhs == NULL || rhs == NULL || equal == NULL)
443 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
445 if (!strcmp(lhs->package, rhs->package))
450 return PACKAGE_MANAGER_ERROR_NONE;
453 API int package_info_is_accessible(package_info_h package_info, bool *accessible)
456 bool pkg_info_value = false;
458 if (package_info == NULL || accessible == NULL)
459 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
461 ret = pkgmgrinfo_pkginfo_is_accessible(package_info->pkgmgr_pkginfo, &pkg_info_value);
463 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
466 *accessible = pkg_info_value;
468 return PACKAGE_MANAGER_ERROR_NONE;
471 API int package_info_get_installed_time(package_info_h package_info, int *installed_time)
476 if (package_info == NULL || installed_time == NULL)
477 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
479 ret = pkgmgrinfo_pkginfo_get_installed_time(package_info->pkgmgr_pkginfo, &time_value);
481 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
483 *installed_time = time_value;
485 return PACKAGE_MANAGER_ERROR_NONE;
488 API int package_info_clone(package_info_h *clone, package_info_h package_info)
492 if (clone == NULL || package_info == NULL)
493 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
495 retval = package_info_create(package_info->package, clone);
497 if (retval != PACKAGE_MANAGER_ERROR_NONE)
498 return package_manager_error(retval, __FUNCTION__, NULL);
500 return PACKAGE_MANAGER_ERROR_NONE;
503 API int package_info_foreach_cert_info(package_info_h package_info, package_info_cert_info_cb callback, void *user_data)
506 pkgmgrinfo_certinfo_h handle = NULL;
508 const char *cert_value = NULL;
510 if (package_info == NULL || callback == NULL)
511 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
513 retval = pkgmgrinfo_pkginfo_create_certinfo(&handle);
514 if (retval != PMINFO_R_OK)
515 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
517 retval = pkgmgrinfo_pkginfo_load_certinfo(package_info->package, handle, getuid());
518 if (retval != PMINFO_R_OK) {
519 pkgmgrinfo_pkginfo_destroy_certinfo(handle);
520 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
523 for (i = 0; i <= PACKAGE_INFO_DISTRIBUTOR2_SIGNER_CERT; i++) {
524 retval = pkgmgrinfo_pkginfo_get_cert_value(handle, i, &cert_value);
525 if (retval != PMINFO_R_OK) {
526 pkgmgrinfo_pkginfo_destroy_certinfo(handle);
527 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
530 if (cert_value && strncmp(cert_value, "(null)", strlen("(null)"))) {
531 retval = callback(package_info, (package_cert_type_e)i, cert_value, user_data);
539 pkgmgrinfo_pkginfo_destroy_certinfo(handle);
541 return PACKAGE_MANAGER_ERROR_NONE;
544 static int package_info_foreach_privilege_cb(const char *privilege_name, void *user_data)
546 foreach_privilege_s *foreach_privilege = (foreach_privilege_s *)user_data;
548 if (!foreach_privilege->callback(privilege_name, foreach_privilege->user_data))
554 API int package_info_foreach_privilege_info(package_info_h package_info, package_info_privilege_info_cb callback, void *user_data)
557 foreach_privilege_s foreach_privilege = {
558 .callback = callback,
559 .user_data = user_data,
562 if (package_info == NULL || callback == NULL)
563 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
565 ret = pkgmgrinfo_pkginfo_foreach_privilege(package_info->pkgmgr_pkginfo, package_info_foreach_privilege_cb, &foreach_privilege);
570 API int package_info_updateinfo_create(const char *pkgid, package_updateinfo_h *info)
573 package_updateinfo_s *update_info;
575 if (pkgid == NULL || info == NULL)
576 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
578 update_info = calloc(1, sizeof(package_updateinfo_s));
579 if (update_info == NULL)
580 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
582 ret = pkgmgrinfo_updateinfo_get_updateinfo(pkgid, &update_info->update_info);
583 if (ret == PMINFO_R_ENOENT) {
585 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
586 } else if (ret == PMINFO_R_EINVAL) {
588 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
589 } else if (ret == PMINFO_R_ERROR) {
591 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
595 return PACKAGE_MANAGER_ERROR_NONE;
598 API int package_info_updateinfo_get_pkgid(package_updateinfo_h info, char **package)
601 char *pkg_updateinfo_value = NULL;
603 package_updateinfo_s *update_info;
605 if (package == NULL || info == NULL)
606 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
608 update_info = (package_updateinfo_s *)info;
609 ret = pkgmgrinfo_updateinfo_get_pkgid(update_info->update_info, &pkg_updateinfo_value);
610 if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
611 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
613 pkgid_dup = strdup(pkg_updateinfo_value);
614 if (pkgid_dup == NULL)
615 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
617 *package = pkgid_dup;
618 return PACKAGE_MANAGER_ERROR_NONE;
621 API int package_info_updateinfo_get_version(package_updateinfo_h info, char **version)
624 char *pkg_updateinfo_value = NULL;
626 package_updateinfo_s *update_info;
628 if (info == NULL || version == NULL)
629 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
631 update_info = (package_updateinfo_s *)info;
632 ret = pkgmgrinfo_updateinfo_get_version(update_info->update_info, &pkg_updateinfo_value);
633 if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
634 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
636 ver_dup = strdup(pkg_updateinfo_value);
638 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
641 return PACKAGE_MANAGER_ERROR_NONE;
644 API int package_info_updateinfo_get_type(package_updateinfo_h info, package_updateinfo_type_e *type)
647 pkgmgrinfo_updateinfo_update_type pkg_updateinfo_value;
648 package_updateinfo_type_e converted_type;
649 package_updateinfo_s *update_info;
651 if (info == NULL || type == NULL)
652 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
654 update_info = (package_updateinfo_s *)info;
655 ret = pkgmgrinfo_updateinfo_get_update_type(update_info->update_info, &pkg_updateinfo_value);
656 if (ret != PMINFO_R_OK)
657 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
659 ret = package_info_updateinfo_convert_type(pkg_updateinfo_value, &converted_type);
661 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
663 *type = converted_type;
664 return PACKAGE_MANAGER_ERROR_NONE;
667 API int package_info_updateinfo_destroy(package_updateinfo_h info)
669 package_updateinfo_s *update_info;
672 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
674 update_info = (package_updateinfo_s *)info;
675 pkgmgrinfo_updateinfo_destroy(update_info->update_info);
678 return PACKAGE_MANAGER_ERROR_NONE;
681 API int package_info_updateinfo_foreach_info(package_info_updateinfo_cb callback, void *user_data)
685 if (callback == NULL)
686 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
688 foreach_updateinfo_context_s foreach_updateinfo = {
689 .callback = callback,
690 .user_data = user_data,
693 ret = pkgmgrinfo_updateinfo_foreach_updateinfo(package_info_foreach_updateinfo_cb, &foreach_updateinfo);
694 if (ret != PMINFO_R_OK)
695 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
697 return PACKAGE_MANAGER_ERROR_NONE;
700 int package_info_create_with_pkginfo(pkgmgrinfo_pkginfo_h pkg_handle, package_info_h *package_info)
702 package_info_h pkg_info = NULL;
703 char *pkg_name = NULL;
706 ret = pkgmgrinfo_pkginfo_get_pkgid(pkg_handle, &pkg_name);
707 if (ret != PMINFO_R_OK)
708 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
710 pkg_info = calloc(1, sizeof(struct package_info_s));
711 if (pkg_info == NULL)
712 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
714 pkg_info->package = strdup(pkg_name);
715 if (pkg_info->package == NULL) {
717 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
720 pkg_info->pkgmgr_pkginfo = pkg_handle;
721 *package_info = pkg_info;
723 return PACKAGE_MANAGER_ERROR_NONE;
726 int package_info_destroy_handle(package_info_h handle)
729 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
731 free(handle->package);
734 return PACKAGE_MANAGER_ERROR_NONE;