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.
22 #include <package-manager.h>
23 #include <package_manager.h>
24 #include <package_manager_private.h>
25 #include <pkgmgr-info.h>
26 #include <tzplatform_config.h>
33 #define LOG_TAG "CAPI_APPFW_PACKAGE_MANAGER"
35 #define _LOGE(fmt, arg...) LOGE(fmt,##arg)
36 #define _LOGD(fmt, arg...) LOGD(fmt, ##arg)
38 #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
39 typedef struct _event_info {
41 package_manager_event_type_e event_type;
42 package_manager_event_state_e event_state;
43 struct _event_info *next;
46 struct package_manager_s {
52 package_manager_event_cb event_cb;
56 struct package_manager_request_s {
65 package_manager_request_event_cb event_cb;
69 static int package_manager_request_new_id()
71 static int request_handle_id = 0;
72 return request_handle_id++;
75 static int package_manager_new_id()
77 static int manager_handle_id = 0;
78 return manager_handle_id++;
81 static const char *package_manager_error_to_string(package_manager_error_e
85 case PACKAGE_MANAGER_ERROR_NONE:
88 case PACKAGE_MANAGER_ERROR_INVALID_PARAMETER:
89 return "INVALID_PARAMETER";
91 case PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY:
92 return "OUT_OF_MEMORY";
94 case PACKAGE_MANAGER_ERROR_IO_ERROR:
101 int package_manager_error(package_manager_error_e error,
102 const char *function, const char *description)
105 _LOGE("[%s] %s(0x%08x) : %s", function,
106 package_manager_error_to_string(error), error,
109 _LOGE("[%s] %s(0x%08x)", function,
110 package_manager_error_to_string(error), error);
116 int package_manager_request_create(package_manager_request_h * request)
118 struct package_manager_request_s *package_manager_request;
120 if (request == NULL) {
122 package_manager_error
123 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
127 package_manager_request =
128 calloc(1, sizeof(struct package_manager_request_s));
129 if (package_manager_request == NULL) {
131 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
133 "failed to create a package_manager handle");
136 package_manager_request->ctype = PC_REQUEST;
137 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
138 if (package_manager_request->pc == NULL) {
139 free(package_manager_request);
141 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
143 "failed to create a package_manager client");
146 package_manager_request->handle_id = package_manager_request_new_id();
148 *request = package_manager_request;
150 return PACKAGE_MANAGER_ERROR_NONE;
153 static int package_manager_client_valiate_handle(package_manager_request_h
156 if (request == NULL || request->pc == NULL) {
157 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
160 return PACKAGE_MANAGER_ERROR_NONE;
163 int package_manager_client_destroy(package_manager_request_h request)
165 if (package_manager_client_valiate_handle(request)) {
167 package_manager_error
168 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
172 pkgmgr_client_free(request->pc);
176 return PACKAGE_MANAGER_ERROR_NONE;
179 int package_manager_request_destroy(package_manager_request_h request)
181 if (package_manager_client_valiate_handle(request)) {
183 package_manager_error
184 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
188 pkgmgr_client_free(request->pc);
192 return PACKAGE_MANAGER_ERROR_NONE;
195 int package_manager_request_set_event_cb(package_manager_request_h request,
196 package_manager_request_event_cb
197 callback, void *user_data)
199 if (package_manager_client_valiate_handle(request)) {
201 package_manager_error
202 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
206 request->event_cb = callback;
207 request->user_data = user_data;
209 return PACKAGE_MANAGER_ERROR_NONE;
212 int package_manager_request_unset_event_cb(package_manager_request_h request)
214 // TODO: Please implement this function.
215 return PACKAGE_MANAGER_ERROR_NONE;
219 int package_manager_request_set_type(package_manager_request_h request,
220 const char *pkg_type)
222 if (package_manager_client_valiate_handle(request)) {
224 package_manager_error
225 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
229 request->pkg_type = pkg_type;
231 return PACKAGE_MANAGER_ERROR_NONE;
234 int package_manager_request_set_mode(package_manager_request_h request,
235 package_manager_request_mode_e mode)
237 if (package_manager_client_valiate_handle(request)) {
239 package_manager_error
240 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
244 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
245 request->mode = PM_QUIET;
247 request->mode = PM_DEFAULT;
249 return PACKAGE_MANAGER_ERROR_NONE;
252 static int package_manager_get_event_type(const char *key,
253 package_manager_event_type_e *
257 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
259 if (strcasecmp(key, "install") == 0)
260 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
261 else if (strcasecmp(key, "uninstall") == 0)
262 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
263 else if (strcasecmp(key, "update") == 0)
264 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
266 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
268 return PACKAGE_MANAGER_ERROR_NONE;
271 static int __add_event_info(event_info ** head, int req_id,
272 package_manager_event_type_e event_type,
273 package_manager_event_state_e event_state)
275 event_info *evt_info;
279 evt_info = (event_info *) calloc(1, sizeof(event_info));
280 if (evt_info == NULL) {
281 _LOGD("calloc failed");
284 evt_info->req_id = req_id;
285 evt_info->event_type = event_type;
286 evt_info->next = NULL;
291 current = prev = *head;
294 current = current->next;
297 prev->next = evt_info;
303 static int __find_event_info(event_info ** head, int req_id,
304 package_manager_event_type_e * event_type,
305 package_manager_event_state_e * event_state)
312 _LOGE("tmp is NULL");
316 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
319 if (tmp->req_id == req_id) {
320 *event_type = tmp->event_type;
328 static int __update_event_info(event_info ** head, int req_id,
329 package_manager_event_type_e event_type,
330 package_manager_event_state_e event_state)
332 package_manager_event_type_e evt_type;
333 package_manager_event_state_e evt_state;
336 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
337 __add_event_info(head, req_id, event_type, event_state);
342 _LOGE("tmp is NULL");
347 if (tmp->req_id == req_id) {
348 tmp->event_type = event_type;
359 static int __remove_event_info(event_info **head request, int req_id)
370 if (current->next->req_id == req_id) {
372 current->next = current->next->next;
384 static int request_event_handler(int req_id, const char *pkg_type,
385 const char *pkg_name, const char *key,
386 const char *val, const void *pmsg, void *data)
389 package_manager_event_type_e event_type = -1;
390 package_manager_event_state_e event_state = -1;
392 _LOGD("request_event_handler is called");
394 package_manager_request_h request = data;
396 if (strcasecmp(key, "start") == 0) {
397 ret = package_manager_get_event_type(val, &event_type);
398 if (ret != PACKAGE_MANAGER_ERROR_NONE)
399 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
401 __add_event_info(&(request->head), req_id, event_type,
402 PACKAGE_MANAGER_EVENT_STATE_STARTED);
404 if (request->event_cb)
405 request->event_cb(req_id, pkg_type, pkg_name,
407 PACKAGE_MANAGER_EVENT_STATE_STARTED,
408 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
410 } else if (strcasecmp(key, "install_percent") == 0
411 || strcasecmp(key, "progress_percent") == 0) {
412 if (__find_event_info
413 (&(request->head), req_id, &event_type,
414 &event_state) == 0) {
415 __update_event_info(&(request->head), req_id,
417 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
418 if (request->event_cb)
419 request->event_cb(req_id, pkg_type, pkg_name,
421 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
423 PACKAGE_MANAGER_ERROR_NONE,
427 } else if (strcasecmp(key, "error") == 0) {
428 if (strcasecmp(key, "0") != 0) {
429 if (__find_event_info
430 (&(request->head), req_id, &event_type,
431 &event_state) == 0) {
432 __update_event_info(&(request->head), req_id,
434 PACKAGE_MANAGER_EVENT_STATE_FAILED);
437 if (request->event_cb)
438 request->event_cb(req_id, pkg_type,
439 pkg_name, event_type,
440 PACKAGE_MANAGER_EVENT_STATE_FAILED,
442 PACKAGE_MANAGER_ERROR_NONE,
446 } else if (strcasecmp(key, "end") == 0) {
447 if (__find_event_info
448 (&(request->head), req_id, &event_type,
449 &event_state) == 0) {
450 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
451 if (request->event_cb)
452 request->event_cb(req_id, pkg_type,
453 pkg_name, event_type,
454 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
456 PACKAGE_MANAGER_ERROR_NONE,
460 if (strcasecmp(key, "ok") != 0)
461 if (request->event_cb)
462 request->event_cb(req_id, pkg_type,
463 pkg_name, event_type,
464 PACKAGE_MANAGER_EVENT_STATE_FAILED,
466 PACKAGE_MANAGER_ERROR_NONE,
471 return PACKAGE_MANAGER_ERROR_NONE;
474 int package_manager_request_install(package_manager_request_h request,
475 const char *path, int *id)
478 request->pkg_path = path;
479 uid_t uid = getuid();
480 if (uid != GLOBAL_USER)
481 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
482 request->pkg_path, NULL,
483 request->mode, request_event_handler,
487 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
488 request->pkg_path, NULL,
489 request->mode, request_event_handler,
492 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
496 return PACKAGE_MANAGER_ERROR_NONE;
499 int package_manager_request_uninstall(package_manager_request_h request,
500 const char *name, int *id)
503 request->pkg_name = name;
504 uid_t uid = getuid();
505 if (uid != GLOBAL_USER)
506 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
507 request->pkg_name, request->mode,
508 request_event_handler, request, uid);
510 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
511 request->pkg_name, request->mode,
512 request_event_handler, request);
514 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
518 return PACKAGE_MANAGER_ERROR_NONE;
521 int package_manager_request_move(package_manager_request_h request,
522 const char *name, package_manager_move_type_e move_type)
525 request->pkg_name = name;
526 uid_t uid = getuid();
527 if (uid != GLOBAL_USER)
528 ret = pkgmgr_client_usr_move(request->pc, request->pkg_type, request->pkg_name,
529 move_type, request->mode, uid);
531 ret = pkgmgr_client_move(request->pc, request->pkg_type, request->pkg_name,
532 move_type, request->mode);
534 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
536 return PACKAGE_MANAGER_ERROR_NONE;
538 int package_manager_create(package_manager_h * manager)
540 struct package_manager_s *package_manager = NULL;
542 if (manager == NULL) {
544 package_manager_error
545 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
549 package_manager = calloc(1, sizeof(struct package_manager_s));
550 if (package_manager == NULL) {
552 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
554 "failed to create a package_manager handle");
557 package_manager->ctype = PC_LISTENING;
558 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
559 if (package_manager->pc == NULL) {
560 free(package_manager);
562 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
564 "failed to create a package_manager client");
567 package_manager->handle_id = package_manager_new_id();
569 *manager = package_manager;
571 return PACKAGE_MANAGER_ERROR_NONE;
574 static int package_manager_valiate_handle(package_manager_h manager)
576 if (manager == NULL || manager->pc == NULL) {
577 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
580 return PACKAGE_MANAGER_ERROR_NONE;
583 int package_manager_destroy(package_manager_h manager)
585 if (package_manager_valiate_handle(manager)) {
587 package_manager_error
588 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
592 pkgmgr_client_free(manager->pc);
596 return PACKAGE_MANAGER_ERROR_NONE;
599 static int __add_event(event_info ** head, int req_id,
600 package_manager_event_type_e event_type,
601 package_manager_event_state_e event_state)
603 event_info *evt_info;
605 evt_info = (event_info *) calloc(1, sizeof(event_info));
606 if (evt_info == NULL) {
607 _LOGD("calloc failed");
610 evt_info->req_id = req_id;
611 evt_info->event_type = event_type;
612 evt_info->next = NULL;
619 static int __find_event(event_info ** head, int req_id,
620 package_manager_event_type_e * event_type,
621 package_manager_event_state_e * event_state)
628 _LOGE("tmp is NULL");
632 *event_type = tmp->event_type;
636 static int __update_event(event_info ** head, int req_id,
637 package_manager_event_type_e event_type,
638 package_manager_event_state_e event_state)
640 package_manager_event_type_e evt_type;
641 package_manager_event_state_e evt_state;
644 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
645 __add_event_info(head, req_id, event_type, event_state);
650 _LOGE("tmp is NULL");
654 tmp->event_type = event_type;
661 static int global_event_handler(int req_id, const char *pkg_type,
662 const char *pkg_name, const char *key,
663 const char *val, const void *pmsg, void *data)
666 package_manager_event_type_e event_type = -1;
667 package_manager_event_state_e event_state = -1;
669 _LOGD("global_event_handler is called");
671 package_manager_h manager = data;
673 if (strcasecmp(key, "start") == 0) {
674 ret = package_manager_get_event_type(val, &event_type);
675 if (ret != PACKAGE_MANAGER_ERROR_NONE)
676 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
678 __add_event(&(manager->head), req_id, event_type,
679 PACKAGE_MANAGER_EVENT_STATE_STARTED);
681 if (manager->event_cb)
682 manager->event_cb(pkg_type, pkg_name,
684 PACKAGE_MANAGER_EVENT_STATE_STARTED,
685 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
687 } else if (strcasecmp(key, "install_percent") == 0
688 || strcasecmp(key, "progress_percent") == 0) {
690 (&(manager->head), req_id, &event_type,
691 &event_state) == 0) {
692 __update_event(&(manager->head), req_id,
694 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
695 if (manager->event_cb)
696 manager->event_cb(pkg_type, pkg_name,
698 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
700 PACKAGE_MANAGER_ERROR_NONE,
704 } else if (strcasecmp(key, "error") == 0) {
705 if (strcasecmp(key, "0") != 0) {
707 (&(manager->head), req_id, &event_type,
708 &event_state) == 0) {
709 __update_event(&(manager->head), req_id,
711 PACKAGE_MANAGER_EVENT_STATE_FAILED);
714 if (manager->event_cb)
715 manager->event_cb(pkg_type,
716 pkg_name, event_type,
717 PACKAGE_MANAGER_EVENT_STATE_FAILED,
719 PACKAGE_MANAGER_ERROR_NONE,
723 } else if (strcasecmp(key, "end") == 0) {
725 (&(manager->head), req_id, &event_type,
726 &event_state) == 0) {
727 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
728 if (manager->event_cb)
729 manager->event_cb(pkg_type,
730 pkg_name, event_type,
731 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
733 PACKAGE_MANAGER_ERROR_NONE,
737 if (strcasecmp(key, "ok") != 0)
738 if (manager->event_cb)
739 manager->event_cb(pkg_type,
740 pkg_name, event_type,
741 PACKAGE_MANAGER_EVENT_STATE_FAILED,
743 PACKAGE_MANAGER_ERROR_NONE,
748 return PACKAGE_MANAGER_ERROR_NONE;
751 int package_manager_set_event_cb(package_manager_h manager,
752 package_manager_event_cb callback,
755 if (package_manager_valiate_handle(manager)) {
757 package_manager_error
758 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
762 manager->event_cb = callback;
763 manager->user_data = user_data;
765 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
767 return PACKAGE_MANAGER_ERROR_NONE;
770 int package_manager_unset_event_cb(package_manager_h manager)
772 // TODO: Please implement this function.
773 return PACKAGE_MANAGER_ERROR_NONE;
776 int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
778 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
781 char *pkg_id_dup = NULL;
783 uid_t uid = getuid();
784 if (uid != GLOBAL_USER)
786 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
787 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
790 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
791 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
793 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
794 if (retval != PMINFO_R_OK)
796 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
799 pkg_id_dup = strdup(pkg_id);
800 if (pkg_id_dup == NULL)
802 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
803 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
806 *package_id = pkg_id_dup;
808 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
810 return PACKAGE_MANAGER_ERROR_NONE;
813 int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
817 retval = package_info_get_package_info(package_id, package_info);
819 if (retval != PACKAGE_MANAGER_ERROR_NONE)
820 return package_manager_error(retval, __FUNCTION__, NULL);
822 return PACKAGE_MANAGER_ERROR_NONE;
825 int package_manager_foreach_package_info(package_manager_package_info_cb callback,
830 retval = package_info_foreach_package_info(callback, user_data);
832 if (retval != PACKAGE_MANAGER_ERROR_NONE)
833 return package_manager_error(retval, __FUNCTION__, NULL);
836 return PACKAGE_MANAGER_ERROR_NONE;
839 int package_manager_compare_package_cert_info(const char *lhs_package_id, const char *rhs_package_id, package_manager_compare_result_type_e *compare_result)
841 pkgmgrinfo_cert_compare_result_type_e result;
842 uid_t uid = getuid();
844 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
845 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
846 if (uid != GLOBAL_USER)
848 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
849 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
852 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
853 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
855 *compare_result = (package_manager_compare_result_type_e)result;
857 return PACKAGE_MANAGER_ERROR_NONE;
860 int package_manager_compare_app_cert_info(const char *lhs_app_id, const char *rhs_app_id, package_manager_compare_result_type_e *compare_result)
862 pkgmgrinfo_cert_compare_result_type_e result;
863 uid_t uid = getuid();
865 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
866 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
867 if (uid != GLOBAL_USER)
869 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
870 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
873 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
874 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
877 *compare_result = (package_manager_compare_result_type_e)result;
879 return PACKAGE_MANAGER_ERROR_NONE;
882 int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
884 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
885 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
890 uid_t uid = getuid();
891 if (uid != GLOBAL_USER)
893 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
894 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
897 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
898 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
900 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
901 if (retval != PMINFO_R_OK)
903 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
904 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
906 if (uid != GLOBAL_USER)
908 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
910 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
911 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
912 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
916 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
918 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
919 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
920 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
923 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK)
925 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
926 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
927 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
935 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
936 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
938 return PACKAGE_MANAGER_ERROR_NONE;
941 int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
944 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo =NULL;
945 pkgmgrinfo_permission_type permission = 0;
946 uid_t uid = getuid();
947 if (uid != GLOBAL_USER)
949 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
950 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
952 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
953 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
955 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
956 if (retval != PMINFO_R_OK)
957 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
959 if (permission == PMINFO_PERMISSION_NORMAL)
960 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
961 else if (permission == PMINFO_PERMISSION_SIGNATURE)
962 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
963 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
964 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
966 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
968 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
969 return PACKAGE_MANAGER_ERROR_NONE;