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 <pkgmgr_installer.h>
24 #include <pkgmgr-info.h>
25 #include <tzplatform_config.h>
27 #include "package_manager.h"
28 #include "package_manager_internal.h"
30 static GHashTable *__cb_table = NULL;
32 #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
33 typedef struct _event_info {
35 package_manager_event_type_e event_type;
36 package_manager_event_state_e event_state;
37 struct _event_info *next;
40 struct package_manager_s {
46 package_manager_event_cb event_cb;
47 package_manager_global_event_cb global_event_cb;
51 struct package_manager_request_s {
60 package_manager_request_event_cb event_cb;
64 typedef struct package_size_info {
69 long long external_data_size;
70 long long external_cache_size;
71 long long external_app_size;
72 } package_size_info_t;
74 struct package_manager_filter_s {
75 pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
78 static int package_manager_request_new_id()
80 static int request_handle_id = 0;
81 return request_handle_id++;
84 static int package_manager_new_id()
86 static int manager_handle_id = 0;
87 return manager_handle_id++;
90 API int package_manager_request_create(package_manager_request_h *request)
92 struct package_manager_request_s *package_manager_request;
94 if (request == NULL) {
97 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
101 package_manager_request =
102 calloc(1, sizeof(struct package_manager_request_s));
103 if (package_manager_request == NULL) {
105 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
107 "failed to create a package_manager handle");
110 package_manager_request->ctype = PC_REQUEST;
111 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
112 if (package_manager_request->pc == NULL) {
113 free(package_manager_request);
115 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
117 "failed to create a package_manager client");
120 package_manager_request->handle_id = package_manager_request_new_id();
122 *request = package_manager_request;
124 return PACKAGE_MANAGER_ERROR_NONE;
127 static int package_manager_client_validate_handle(package_manager_request_h
130 if (request == NULL || request->pc == NULL)
131 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
133 return PACKAGE_MANAGER_ERROR_NONE;
136 API int package_manager_request_destroy(package_manager_request_h request)
138 if (package_manager_client_validate_handle(request)) {
140 package_manager_error
141 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
145 pkgmgr_client_free(request->pc);
149 return PACKAGE_MANAGER_ERROR_NONE;
152 API int package_manager_request_set_event_cb(package_manager_request_h request,
153 package_manager_request_event_cb
154 callback, void *user_data)
158 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
159 if (retval != PACKAGE_MANAGER_ERROR_NONE)
162 if (package_manager_client_validate_handle(request)) {
164 package_manager_error
165 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
169 request->event_cb = callback;
170 request->user_data = user_data;
172 return PACKAGE_MANAGER_ERROR_NONE;
175 API int package_manager_request_unset_event_cb(package_manager_request_h request)
177 /* TODO: Please implement this function. */
178 if (package_manager_client_validate_handle(request))
179 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
181 return PACKAGE_MANAGER_ERROR_NONE;
185 API int package_manager_request_set_type(package_manager_request_h request,
186 const char *pkg_type)
188 if (package_manager_client_validate_handle(request)) {
190 package_manager_error
191 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
195 request->pkg_type = pkg_type;
197 return PACKAGE_MANAGER_ERROR_NONE;
200 API int package_manager_request_set_mode(package_manager_request_h request,
201 package_manager_request_mode_e mode)
203 if (package_manager_client_validate_handle(request)) {
205 package_manager_error
206 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
210 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
211 request->mode = PM_QUIET;
213 request->mode = PM_DEFAULT;
215 return PACKAGE_MANAGER_ERROR_NONE;
218 static int package_manager_get_event_type(const char *key,
219 package_manager_event_type_e *
223 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
225 if (strcasecmp(key, PKGMGR_INSTALLER_INSTALL_EVENT_STR) == 0)
226 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
227 else if (strcasecmp(key, PKGMGR_INSTALLER_UNINSTALL_EVENT_STR) == 0)
228 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
229 else if (strcasecmp(key, PKGMGR_INSTALLER_UPGRADE_EVENT_STR) == 0)
230 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
232 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
234 return PACKAGE_MANAGER_ERROR_NONE;
237 static int __add_event_info(event_info **head, int req_id,
238 package_manager_event_type_e event_type,
239 package_manager_event_state_e event_state)
241 event_info *evt_info;
245 evt_info = (event_info *) calloc(1, sizeof(event_info));
246 if (evt_info == NULL) {
247 _LOGD("calloc failed");
250 evt_info->req_id = req_id;
251 evt_info->event_type = event_type;
252 evt_info->next = NULL;
257 current = prev = *head;
260 current = current->next;
263 prev->next = evt_info;
269 static int __find_event_info(event_info **head, int req_id,
270 package_manager_event_type_e *event_type,
271 package_manager_event_state_e *event_state)
278 _LOGE("tmp is NULL");
282 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
285 if (tmp->req_id == req_id) {
286 *event_type = tmp->event_type;
294 static int __update_event_info(event_info **head, int req_id,
295 package_manager_event_type_e event_type,
296 package_manager_event_state_e event_state)
298 package_manager_event_type_e evt_type;
299 package_manager_event_state_e evt_state;
302 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
303 __add_event_info(head, req_id, event_type, event_state);
308 _LOGE("tmp is NULL");
313 if (tmp->req_id == req_id) {
314 tmp->event_type = event_type;
325 static int __remove_event_info(event_info **head request, int req_id)
336 if (current->next->req_id == req_id) {
338 current->next = current->next->next;
350 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
351 const char *pkg_name, const char *key,
352 const char *val, const void *pmsg, void *data)
355 package_manager_event_type_e event_type = -1;
356 package_manager_event_state_e event_state = -1;
358 _LOGD("request_event_handler is called");
360 package_manager_request_h request = data;
362 if (strcasecmp(key, "start") == 0) {
363 ret = package_manager_get_event_type(val, &event_type);
364 if (ret != PACKAGE_MANAGER_ERROR_NONE)
365 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
367 __add_event_info(&(request->head), req_id, event_type,
368 PACKAGE_MANAGER_EVENT_STATE_STARTED);
370 if (request->event_cb)
371 request->event_cb(req_id, pkg_type, pkg_name,
373 PACKAGE_MANAGER_EVENT_STATE_STARTED,
374 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
376 } else if (strcasecmp(key, "install_percent") == 0
377 || strcasecmp(key, "progress_percent") == 0) {
378 if (__find_event_info
379 (&(request->head), req_id, &event_type,
380 &event_state) == 0) {
381 __update_event_info(&(request->head), req_id,
383 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
384 if (request->event_cb)
385 request->event_cb(req_id, pkg_type, pkg_name,
387 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
389 PACKAGE_MANAGER_ERROR_NONE,
393 } else if (strcasecmp(key, "error") == 0) {
394 if (strcasecmp(key, "0") != 0) {
395 if (__find_event_info
396 (&(request->head), req_id, &event_type,
397 &event_state) == 0) {
398 __update_event_info(&(request->head), req_id,
400 PACKAGE_MANAGER_EVENT_STATE_FAILED);
403 if (request->event_cb)
404 request->event_cb(req_id, pkg_type,
405 pkg_name, event_type,
406 PACKAGE_MANAGER_EVENT_STATE_FAILED,
408 PACKAGE_MANAGER_ERROR_NONE,
412 } else if (strcasecmp(key, "end") == 0) {
413 if (__find_event_info
414 (&(request->head), req_id, &event_type,
415 &event_state) == 0) {
416 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
417 if (request->event_cb)
418 request->event_cb(req_id, pkg_type,
419 pkg_name, event_type,
420 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
422 PACKAGE_MANAGER_ERROR_NONE,
426 if (strcasecmp(key, "ok") != 0)
427 if (request->event_cb)
428 request->event_cb(req_id, pkg_type,
429 pkg_name, event_type,
430 PACKAGE_MANAGER_EVENT_STATE_FAILED,
432 PACKAGE_MANAGER_ERROR_NONE,
437 return PACKAGE_MANAGER_ERROR_NONE;
440 API int package_manager_request_install(package_manager_request_h request,
441 const char *path, int *id)
445 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
446 if (retval != PACKAGE_MANAGER_ERROR_NONE)
449 if (package_manager_client_validate_handle(request))
450 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
453 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
456 request->pkg_path = path;
457 uid_t uid = getuid();
458 if (uid != GLOBAL_USER)
459 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
460 request->pkg_path, NULL,
461 request->mode, request_event_handler,
465 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
466 request->pkg_path, NULL,
467 request->mode, request_event_handler,
470 if (request_id == PKGMGR_R_EINVAL)
471 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
472 else if (request_id == PKGMGR_R_ENOPKG)
473 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
474 else if (request_id == PKGMGR_R_ENOMEM)
475 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
476 else if (request_id == PKGMGR_R_EIO)
477 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
478 else if (request_id == PKGMGR_R_EPRIV)
479 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
480 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
481 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
485 return PACKAGE_MANAGER_ERROR_NONE;
488 API int package_manager_request_uninstall(package_manager_request_h request,
489 const char *name, int *id)
493 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
494 if (retval != PACKAGE_MANAGER_ERROR_NONE)
497 if (package_manager_client_validate_handle(request))
498 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
501 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
504 request->pkg_name = name;
505 uid_t uid = getuid();
506 if (uid != GLOBAL_USER)
507 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
508 request->pkg_name, request->mode,
509 request_event_handler, request, uid);
511 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
512 request->pkg_name, request->mode,
513 request_event_handler, request);
515 if (request_id == PKGMGR_R_EINVAL)
516 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
517 else if (request_id == PKGMGR_R_ENOPKG)
518 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
519 else if (request_id == PKGMGR_R_ENOMEM)
520 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
521 else if (request_id == PKGMGR_R_EIO)
522 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
523 else if (request_id == PKGMGR_R_EPRIV)
524 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
525 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
526 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
530 return PACKAGE_MANAGER_ERROR_NONE;
533 API int package_manager_request_move(package_manager_request_h request,
534 const char *name, package_manager_move_type_e move_type)
538 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
539 if (retval != PACKAGE_MANAGER_ERROR_NONE)
542 if (package_manager_client_validate_handle(request))
543 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
546 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
549 request->pkg_name = name;
550 uid_t uid = getuid();
551 if (uid != GLOBAL_USER)
552 ret = pkgmgr_client_usr_move(request->pc, request->pkg_type, request->pkg_name,
553 move_type, request->mode, uid);
555 ret = pkgmgr_client_move(request->pc, request->pkg_type, request->pkg_name,
556 move_type, request->mode);
557 if (ret == PKGMGR_R_EINVAL)
558 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
559 else if (ret == PKGMGR_R_ENOPKG)
560 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
561 else if (ret == PKGMGR_R_ENOMEM)
562 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
563 else if (ret == PKGMGR_R_EIO)
564 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
565 else if (ret == PKGMGR_R_EPRIV)
566 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
567 else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR)
568 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
570 return PACKAGE_MANAGER_ERROR_NONE;
573 API int package_manager_create(package_manager_h *manager)
577 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
578 if (retval != PACKAGE_MANAGER_ERROR_NONE)
581 struct package_manager_s *package_manager = NULL;
583 if (manager == NULL) {
585 package_manager_error
586 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
590 package_manager = calloc(1, sizeof(struct package_manager_s));
591 if (package_manager == NULL) {
593 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
595 "failed to create a package_manager handle");
598 package_manager->ctype = PC_LISTENING;
599 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
600 if (package_manager->pc == NULL) {
601 free(package_manager);
603 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
605 "failed to create a package_manager client");
608 package_manager->handle_id = package_manager_new_id();
610 *manager = package_manager;
612 return PACKAGE_MANAGER_ERROR_NONE;
615 static int package_manager_validate_handle(package_manager_h manager)
617 if (manager == NULL || manager->pc == NULL)
618 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
620 return PACKAGE_MANAGER_ERROR_NONE;
623 API int package_manager_destroy(package_manager_h manager)
625 if (package_manager_validate_handle(manager)) {
627 package_manager_error
628 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
632 pkgmgr_client_free(manager->pc);
636 return PACKAGE_MANAGER_ERROR_NONE;
639 static int __add_event(event_info **head, int req_id,
640 package_manager_event_type_e event_type,
641 package_manager_event_state_e event_state)
643 event_info *evt_info;
645 evt_info = (event_info *) calloc(1, sizeof(event_info));
646 if (evt_info == NULL) {
647 _LOGD("calloc failed");
650 evt_info->req_id = req_id;
651 evt_info->event_type = event_type;
652 evt_info->next = NULL;
659 static int __find_event(event_info **head, int req_id,
660 package_manager_event_type_e *event_type,
661 package_manager_event_state_e *event_state)
668 _LOGE("tmp is NULL");
672 *event_type = tmp->event_type;
676 static int __update_event(event_info **head, int req_id,
677 package_manager_event_type_e event_type,
678 package_manager_event_state_e event_state)
680 package_manager_event_type_e evt_type;
681 package_manager_event_state_e evt_state;
684 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
685 __add_event_info(head, req_id, event_type, event_state);
690 _LOGE("tmp is NULL");
694 tmp->event_type = event_type;
701 /* App Event Listening Policy:
702 * +----------------+------------+---------------+------------------+
703 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
704 * +----------------+------------+---------------+------------------+
705 * |User Process App| Grant | Grant | Deny |
706 * +----------------+------------+---------------+------------------+
707 * |Platform module | Grant | Grant | Grant |
708 * +----------------+------------+---------------+------------------+
709 * UID assignment policy:
710 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
712 #define REGULAR_USER 5000
713 static int __validate_event_signal(uid_t target_uid)
715 uid_t self = getuid();
717 if (self == target_uid)
720 if (self < REGULAR_USER)
726 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
727 const char *pkg_name, const char *key,
728 const char *val, const void *pmsg, void *data)
731 package_manager_event_type_e event_type = -1;
732 package_manager_event_state_e event_state = -1;
734 _LOGD("global_event_handler is called");
736 package_manager_h manager = data;
738 if (__validate_event_signal(target_uid))
739 return PACKAGE_MANAGER_ERROR_NONE;
741 if (strcasecmp(key, "start") == 0) {
742 ret = package_manager_get_event_type(val, &event_type);
743 if (ret != PACKAGE_MANAGER_ERROR_NONE)
744 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
746 __add_event(&(manager->head), req_id, event_type,
747 PACKAGE_MANAGER_EVENT_STATE_STARTED);
749 if (manager->event_cb && getuid() == target_uid)
750 manager->event_cb(pkg_type, pkg_name,
752 PACKAGE_MANAGER_EVENT_STATE_STARTED,
753 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
754 if (manager->global_event_cb)
755 manager->global_event_cb(target_uid, pkg_type, pkg_name,
757 PACKAGE_MANAGER_EVENT_STATE_STARTED,
758 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
760 } else if (strcasecmp(key, "install_percent") == 0
761 || strcasecmp(key, "progress_percent") == 0) {
763 (&(manager->head), req_id, &event_type,
764 &event_state) == 0) {
765 __update_event(&(manager->head), req_id,
767 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
768 if (manager->event_cb && getuid() == target_uid)
769 manager->event_cb(pkg_type, pkg_name,
771 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
773 PACKAGE_MANAGER_ERROR_NONE,
775 if (manager->global_event_cb)
776 manager->global_event_cb(target_uid, pkg_type, pkg_name,
778 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
780 PACKAGE_MANAGER_ERROR_NONE,
784 } else if (strcasecmp(key, "error") == 0) {
785 if (strcasecmp(key, "0") != 0) {
787 (&(manager->head), req_id, &event_type,
788 &event_state) == 0) {
789 __update_event(&(manager->head), req_id,
791 PACKAGE_MANAGER_EVENT_STATE_FAILED);
794 if (manager->event_cb && getuid() == target_uid)
795 manager->event_cb(pkg_type,
796 pkg_name, event_type,
797 PACKAGE_MANAGER_EVENT_STATE_FAILED,
799 PACKAGE_MANAGER_ERROR_NONE,
801 if (manager->global_event_cb)
802 manager->global_event_cb(target_uid, pkg_type,
803 pkg_name, event_type,
804 PACKAGE_MANAGER_EVENT_STATE_FAILED,
806 PACKAGE_MANAGER_ERROR_NONE,
809 } else if (strcasecmp(key, "end") == 0) {
811 (&(manager->head), req_id, &event_type,
812 &event_state) == 0) {
813 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
814 if (manager->event_cb && getuid() == target_uid)
815 manager->event_cb(pkg_type,
816 pkg_name, event_type,
817 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
819 PACKAGE_MANAGER_ERROR_NONE,
821 if (manager->global_event_cb)
822 manager->global_event_cb(target_uid, pkg_type,
823 pkg_name, event_type,
824 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
826 PACKAGE_MANAGER_ERROR_NONE,
830 if (strcasecmp(key, "ok") != 0) {
831 if (manager->event_cb && getuid() == target_uid)
832 manager->event_cb(pkg_type,
833 pkg_name, event_type,
834 PACKAGE_MANAGER_EVENT_STATE_FAILED,
836 PACKAGE_MANAGER_ERROR_NONE,
838 if (manager->global_event_cb)
839 manager->global_event_cb(target_uid, pkg_type,
840 pkg_name, event_type,
841 PACKAGE_MANAGER_EVENT_STATE_FAILED,
843 PACKAGE_MANAGER_ERROR_NONE,
849 return PACKAGE_MANAGER_ERROR_NONE;
852 API int package_manager_set_event_status(package_manager_h manager, int status_type)
857 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
859 retval = pkgmgrinfo_client_set_status_type(manager->pc, status_type);
862 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
864 return PACKAGE_MANAGER_ERROR_NONE;
867 API int package_manager_set_event_cb(package_manager_h manager,
868 package_manager_event_cb callback,
873 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
874 if (retval != PACKAGE_MANAGER_ERROR_NONE)
877 if (package_manager_validate_handle(manager)) {
879 package_manager_error
880 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
884 manager->event_cb = callback;
885 manager->user_data = user_data;
887 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
889 return PACKAGE_MANAGER_ERROR_NONE;
892 API int package_manager_unset_event_cb(package_manager_h manager)
894 if (manager == NULL) {
896 package_manager_error
897 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
901 /* TODO: Please implement this function. */
902 return PACKAGE_MANAGER_ERROR_NONE;
905 API int package_manager_set_global_event_cb(package_manager_h manager,
906 package_manager_global_event_cb callback,
911 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
912 if (retval != PACKAGE_MANAGER_ERROR_NONE)
915 if (package_manager_validate_handle(manager)) {
917 package_manager_error
918 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
922 if (getuid() >= REGULAR_USER) {
923 _LOGE("Regular user is not allowed for this api");
924 return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
927 manager->global_event_cb = callback;
928 manager->user_data = user_data;
930 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
932 return PACKAGE_MANAGER_ERROR_NONE;
935 API int package_manager_unset_global_event_cb(package_manager_h manager)
937 if (manager == NULL) {
939 package_manager_error
940 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
944 /* TODO: Please implement this function. */
945 return PACKAGE_MANAGER_ERROR_NONE;
948 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
950 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
953 char *pkg_id_dup = NULL;
955 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
956 if (retval != PACKAGE_MANAGER_ERROR_NONE)
959 if (app_id == NULL || package_id == NULL)
960 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
962 uid_t uid = getuid();
963 if (uid != GLOBAL_USER) {
964 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
965 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
967 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
968 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
970 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
971 if (retval != PMINFO_R_OK)
972 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
974 pkg_id_dup = strdup(pkg_id);
975 if (pkg_id_dup == NULL) {
976 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
977 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
980 *package_id = pkg_id_dup;
982 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
984 return PACKAGE_MANAGER_ERROR_NONE;
987 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
990 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
991 if (retval != PACKAGE_MANAGER_ERROR_NONE)
994 retval = package_info_get_package_info(package_id, package_info);
996 if (retval != PACKAGE_MANAGER_ERROR_NONE)
997 return package_manager_error(retval, __FUNCTION__, NULL);
999 return PACKAGE_MANAGER_ERROR_NONE;
1002 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
1007 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1008 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1011 retval = package_info_foreach_package_info(callback, user_data);
1013 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1014 return package_manager_error(retval, __FUNCTION__, NULL);
1016 return PACKAGE_MANAGER_ERROR_NONE;
1019 API 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)
1021 pkgmgrinfo_cert_compare_result_type_e result;
1022 uid_t uid = getuid();
1024 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
1025 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1026 if (uid != GLOBAL_USER) {
1027 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
1028 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1030 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1031 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1033 *compare_result = (package_manager_compare_result_type_e)result;
1035 return PACKAGE_MANAGER_ERROR_NONE;
1038 API 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)
1040 pkgmgrinfo_cert_compare_result_type_e result;
1041 uid_t uid = getuid();
1043 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1044 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1045 if (uid != GLOBAL_USER) {
1046 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1047 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1049 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1050 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1053 *compare_result = (package_manager_compare_result_type_e)result;
1055 return PACKAGE_MANAGER_ERROR_NONE;
1058 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1062 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1063 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1066 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1067 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1069 char *pkg_id = NULL;
1070 bool is_preload = 0;
1071 uid_t uid = getuid();
1072 if (uid != GLOBAL_USER) {
1073 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1074 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1076 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1077 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1080 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1081 if (retval != PMINFO_R_OK) {
1082 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1083 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1085 if (uid != GLOBAL_USER) {
1086 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1087 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1088 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1089 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1092 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1093 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1094 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1095 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1098 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK) {
1099 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1100 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1101 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1109 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1110 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1112 return PACKAGE_MANAGER_ERROR_NONE;
1115 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1119 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1120 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1123 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1124 pkgmgrinfo_permission_type permission = 0;
1125 uid_t uid = getuid();
1126 if (uid != GLOBAL_USER) {
1127 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1128 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1130 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1131 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1133 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1134 if (retval != PMINFO_R_OK)
1135 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1137 if (permission == PMINFO_PERMISSION_NORMAL)
1138 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1139 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1140 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1141 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1142 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1144 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1146 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1147 return PACKAGE_MANAGER_ERROR_NONE;
1150 API int package_manager_clear_cache_dir(const char *package_id)
1154 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1155 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1158 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1159 if (res == PKGMGR_R_EINVAL) {
1160 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1161 } else if (res == PKGMGR_R_ENOPKG) {
1162 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1163 } else if (res == PKGMGR_R_ENOMEM) {
1164 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1165 } else if (res == PKGMGR_R_EIO) {
1166 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1167 } else if (res == PKGMGR_R_EPRIV) {
1168 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1169 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1170 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1171 } else if (res != PKGMGR_R_OK) {
1172 _LOGE("Unexpected error");
1173 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1176 return PACKAGE_MANAGER_ERROR_NONE;
1179 API int package_manager_clear_all_cache_dir(void)
1183 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1184 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1187 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1190 static void __free_client(gpointer data)
1192 pkgmgr_client *pc = (pkgmgr_client *)data;
1193 pkgmgr_client_free(pc);
1196 static void __initialize_cb_table(void)
1198 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, __free_client, NULL);
1201 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1203 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1204 if (callback == NULL) {
1205 _LOGE("callback is null.");
1206 g_hash_table_remove(__cb_table, pc);
1210 package_size_info_t size_info;
1211 size_info.data_size = result->data_size;
1212 size_info.cache_size = result->cache_size;
1213 size_info.app_size = result->app_size;
1214 size_info.external_data_size = result->ext_data_size;
1215 size_info.external_cache_size = result->ext_cache_size;
1216 size_info.external_app_size = result->ext_app_size;
1218 callback(pkgid, (package_size_info_h)&size_info, user_data);
1220 g_hash_table_remove(__cb_table, pc);
1223 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1225 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1226 if (callback == NULL) {
1227 _LOGE("callback is null.");
1228 g_hash_table_remove(__cb_table, pc);
1232 package_size_info_t size_info;
1233 size_info.data_size = result->data_size;
1234 size_info.cache_size = result->cache_size;
1235 size_info.app_size = result->app_size;
1236 size_info.external_data_size = result->ext_data_size;
1237 size_info.external_cache_size = result->ext_cache_size;
1238 size_info.external_app_size = result->ext_app_size;
1240 callback((package_size_info_h)&size_info, user_data);
1242 g_hash_table_remove(__cb_table, pc);
1245 static int _get_pkg_size_info(const char *package_id, void *callback, void *user_data)
1247 if (package_id == NULL || callback == NULL)
1248 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1250 if (__cb_table == NULL)
1251 __initialize_cb_table();
1253 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1255 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1258 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1259 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1261 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1263 if (res == PKGMGR_R_EINVAL) {
1264 pkgmgr_client_free(pc);
1265 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1266 } else if (res == PKGMGR_R_ENOPKG) {
1267 pkgmgr_client_free(pc);
1268 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1269 } else if (res == PKGMGR_R_ENOMEM) {
1270 pkgmgr_client_free(pc);
1271 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1272 } else if (res == PKGMGR_R_EIO) {
1273 pkgmgr_client_free(pc);
1274 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1275 } else if (res == PKGMGR_R_EPRIV) {
1276 pkgmgr_client_free(pc);
1277 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1278 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1279 pkgmgr_client_free(pc);
1280 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1281 } else if (res != PKGMGR_R_OK) {
1282 _LOGE("Unexpected error");
1283 pkgmgr_client_free(pc);
1284 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1287 g_hash_table_insert(__cb_table, pc, callback);
1289 _LOGD("Successful");
1290 return PACKAGE_MANAGER_ERROR_NONE;
1293 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1295 return _get_pkg_size_info(package_id, (void *)callback, user_data);
1298 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1300 return _get_pkg_size_info(PKG_SIZE_INFO_TOTAL, (void *)callback, user_data);
1303 API int package_manager_filter_create(package_manager_filter_h *handle)
1306 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1308 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1309 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1312 if (handle == NULL) {
1314 package_manager_error
1315 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1319 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1320 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1321 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1323 *handle = pkgmgr_filter;
1325 return PACKAGE_MANAGER_ERROR_NONE;
1328 API int package_manager_filter_destroy(package_manager_filter_h handle)
1332 if (handle == NULL) {
1334 package_manager_error
1335 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1339 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1340 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1341 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1343 return PACKAGE_MANAGER_ERROR_NONE;
1346 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1347 const char *property, const bool value)
1351 if ((handle == NULL) || (property == NULL)) {
1353 package_manager_error
1354 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1358 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1359 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1360 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1362 return PACKAGE_MANAGER_ERROR_NONE;
1365 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1369 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1370 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1373 if ((handle == NULL) || (count == NULL))
1374 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1376 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1378 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1380 return PACKAGE_MANAGER_ERROR_NONE;
1383 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1384 package_manager_package_info_cb callback, void *user_data)
1388 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1389 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1392 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1394 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1395 return package_manager_error(retval, __FUNCTION__, NULL);
1397 return PACKAGE_MANAGER_ERROR_NONE;
1400 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1403 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1405 package_size_info_t *size_info = (package_size_info_t *)handle;
1407 *data_size = (long long)size_info->data_size;
1408 return PACKAGE_MANAGER_ERROR_NONE;
1411 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1414 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1416 package_size_info_t *size_info = (package_size_info_t *)handle;
1418 *cache_size = size_info->cache_size;
1419 return PACKAGE_MANAGER_ERROR_NONE;
1422 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1425 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1427 package_size_info_t *size_info = (package_size_info_t *)handle;
1428 *app_size = size_info->app_size;
1429 return PACKAGE_MANAGER_ERROR_NONE;
1432 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1435 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1437 package_size_info_t *size_info = (package_size_info_t *)handle;
1438 *ext_data_size = size_info->external_data_size;
1439 return PACKAGE_MANAGER_ERROR_NONE;
1442 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1445 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1447 package_size_info_t *size_info = (package_size_info_t *)handle;
1448 *ext_cache_size = size_info->external_cache_size;
1449 return PACKAGE_MANAGER_ERROR_NONE;
1452 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1455 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1457 package_size_info_t *size_info = (package_size_info_t *)handle;
1458 *ext_app_size = size_info->external_app_size;
1459 return PACKAGE_MANAGER_ERROR_NONE;