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 {
42 pkgmgr_client_type ctype;
46 package_manager_event_cb event_cb;
50 struct package_manager_request_s {
52 pkgmgr_client_type ctype;
57 package_manager_request_event_cb event_cb;
61 typedef struct package_size_info {
66 long long external_data_size;
67 long long external_cache_size;
68 long long external_app_size;
69 } package_size_info_t;
71 struct package_manager_filter_s {
72 pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
75 static int package_manager_request_new_id()
77 static int request_handle_id = 0;
78 return request_handle_id++;
81 static int package_manager_new_id()
83 static int manager_handle_id = 0;
84 return manager_handle_id++;
87 API int package_manager_request_create(package_manager_request_h *request)
89 struct package_manager_request_s *package_manager_request;
91 if (request == NULL) {
94 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
98 package_manager_request =
99 calloc(1, sizeof(struct package_manager_request_s));
100 if (package_manager_request == NULL) {
102 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
104 "failed to create a package_manager handle");
107 package_manager_request->ctype = PC_REQUEST;
108 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
109 if (package_manager_request->pc == NULL) {
110 free(package_manager_request);
112 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
114 "failed to create a package_manager client");
117 package_manager_request->handle_id = package_manager_request_new_id();
119 *request = package_manager_request;
121 return PACKAGE_MANAGER_ERROR_NONE;
124 static int package_manager_client_validate_handle(package_manager_request_h
127 if (request == NULL || request->pc == NULL)
128 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
130 return PACKAGE_MANAGER_ERROR_NONE;
133 API int package_manager_request_destroy(package_manager_request_h request)
135 if (package_manager_client_validate_handle(request)) {
137 package_manager_error
138 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
142 pkgmgr_client_free(request->pc);
144 free(request->pkg_type);
147 return PACKAGE_MANAGER_ERROR_NONE;
150 API int package_manager_request_set_event_cb(package_manager_request_h request,
151 package_manager_request_event_cb
152 callback, void *user_data)
156 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
157 if (retval != PACKAGE_MANAGER_ERROR_NONE)
160 if (package_manager_client_validate_handle(request)) {
162 package_manager_error
163 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
167 request->event_cb = callback;
168 request->user_data = user_data;
170 return PACKAGE_MANAGER_ERROR_NONE;
173 API int package_manager_request_unset_event_cb(package_manager_request_h request)
175 if (package_manager_client_validate_handle(request))
176 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
178 request->event_cb = NULL;
179 request->user_data = NULL;
181 return PACKAGE_MANAGER_ERROR_NONE;
184 API int package_manager_request_set_type(package_manager_request_h request,
185 const char *pkg_type)
187 if (package_manager_client_validate_handle(request)) {
189 package_manager_error
190 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
194 request->pkg_type = strdup(pkg_type);
196 return PACKAGE_MANAGER_ERROR_NONE;
199 API int package_manager_request_set_mode(package_manager_request_h request,
200 package_manager_request_mode_e mode)
202 if (package_manager_client_validate_handle(request)) {
204 package_manager_error
205 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
209 /* request mode is not used anymore */
211 return PACKAGE_MANAGER_ERROR_NONE;
214 API int package_manager_request_set_tep(package_manager_request_h request,
215 const char *tep_path)
219 if (package_manager_client_validate_handle(request) || tep_path == NULL) {
221 package_manager_error
222 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
226 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
227 if (retval != PACKAGE_MANAGER_ERROR_NONE)
230 if (pkgmgr_client_set_tep_path(request->pc, tep_path, true))
231 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
233 return PACKAGE_MANAGER_ERROR_NONE;
236 static int package_manager_get_event_type(const char *key,
237 package_manager_event_type_e *
241 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
243 if (strcasecmp(key, PKGMGR_INSTALLER_INSTALL_EVENT_STR) == 0)
244 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
245 else if (strcasecmp(key, PKGMGR_INSTALLER_UNINSTALL_EVENT_STR) == 0)
246 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
247 else if (strcasecmp(key, PKGMGR_INSTALLER_UPGRADE_EVENT_STR) == 0)
248 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
249 else if (strcasecmp(key, PKGMGR_INSTALLER_MOVE_EVENT_STR) == 0)
250 *event_type = PACKAGE_MANAGER_EVENT_TYPE_MOVE;
251 else if (strcasecmp(key, PKGMGR_INSTALLER_CLEAR_EVENT_STR) == 0)
252 *event_type = PACKAGE_MANAGER_EVENT_TYPE_CLEAR;
254 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
256 return PACKAGE_MANAGER_ERROR_NONE;
259 static int __add_event_info(event_info **head, int req_id,
260 package_manager_event_type_e event_type,
261 package_manager_event_state_e event_state)
263 event_info *evt_info;
267 evt_info = (event_info *) calloc(1, sizeof(event_info));
268 if (evt_info == NULL) {
269 _LOGD("calloc failed");
272 evt_info->req_id = req_id;
273 evt_info->event_type = event_type;
274 evt_info->next = NULL;
279 current = prev = *head;
282 current = current->next;
285 prev->next = evt_info;
291 static int __find_event_info(event_info **head, int req_id,
292 package_manager_event_type_e *event_type,
293 package_manager_event_state_e *event_state)
300 _LOGE("tmp is NULL");
304 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
307 if (tmp->req_id == req_id) {
308 *event_type = tmp->event_type;
316 static int __update_event_info(event_info **head, int req_id,
317 package_manager_event_type_e event_type,
318 package_manager_event_state_e event_state)
320 package_manager_event_type_e evt_type;
321 package_manager_event_state_e evt_state;
324 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
325 __add_event_info(head, req_id, event_type, event_state);
330 _LOGE("tmp is NULL");
335 if (tmp->req_id == req_id) {
336 tmp->event_type = event_type;
347 static int __remove_event_info(event_info **head request, int req_id)
358 if (current->next->req_id == req_id) {
360 current->next = current->next->next;
372 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
373 const char *pkg_name, const char *key,
374 const char *val, const void *pmsg, void *data)
377 package_manager_event_type_e event_type = -1;
378 package_manager_event_state_e event_state = -1;
380 _LOGD("request_event_handler is called");
382 package_manager_request_h request = data;
384 if (strcasecmp(key, "start") == 0) {
385 ret = package_manager_get_event_type(val, &event_type);
386 if (ret != PACKAGE_MANAGER_ERROR_NONE)
387 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
389 __add_event_info(&(request->head), req_id, event_type,
390 PACKAGE_MANAGER_EVENT_STATE_STARTED);
392 if (request->event_cb)
393 request->event_cb(req_id, pkg_type, pkg_name,
395 PACKAGE_MANAGER_EVENT_STATE_STARTED,
396 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
398 } else if (strcasecmp(key, "install_percent") == 0
399 || strcasecmp(key, "progress_percent") == 0) {
400 if (__find_event_info
401 (&(request->head), req_id, &event_type,
402 &event_state) == 0) {
403 __update_event_info(&(request->head), req_id,
405 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
406 if (request->event_cb)
407 request->event_cb(req_id, pkg_type, pkg_name,
409 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
411 PACKAGE_MANAGER_ERROR_NONE,
415 } else if (strcasecmp(key, "error") == 0) {
416 if (strcasecmp(key, "0") != 0) {
417 if (__find_event_info
418 (&(request->head), req_id, &event_type,
419 &event_state) == 0) {
420 __update_event_info(&(request->head), req_id,
422 PACKAGE_MANAGER_EVENT_STATE_FAILED);
425 if (request->event_cb)
426 request->event_cb(req_id, pkg_type,
427 pkg_name, event_type,
428 PACKAGE_MANAGER_EVENT_STATE_FAILED,
430 PACKAGE_MANAGER_ERROR_NONE,
434 } else if (strcasecmp(key, "end") == 0) {
435 if (__find_event_info
436 (&(request->head), req_id, &event_type,
437 &event_state) == 0) {
438 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
439 if (request->event_cb)
440 request->event_cb(req_id, pkg_type,
441 pkg_name, event_type,
442 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
444 PACKAGE_MANAGER_ERROR_NONE,
448 if (strcasecmp(key, "ok") != 0)
449 if (request->event_cb)
450 request->event_cb(req_id, pkg_type,
451 pkg_name, event_type,
452 PACKAGE_MANAGER_EVENT_STATE_FAILED,
454 PACKAGE_MANAGER_ERROR_NONE,
459 return PACKAGE_MANAGER_ERROR_NONE;
462 API int package_manager_request_install(package_manager_request_h request,
463 const char *path, int *id)
467 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
468 if (retval != PACKAGE_MANAGER_ERROR_NONE)
471 if (package_manager_client_validate_handle(request))
472 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
475 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
478 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
479 path, NULL, request->mode, request_event_handler, request);
481 if (request_id == PKGMGR_R_EINVAL)
482 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
483 else if (request_id == PKGMGR_R_ENOPKG)
484 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
485 else if (request_id == PKGMGR_R_ENOMEM)
486 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
487 else if (request_id == PKGMGR_R_EIO)
488 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
489 else if (request_id == PKGMGR_R_EPRIV)
490 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
491 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
492 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
496 return PACKAGE_MANAGER_ERROR_NONE;
499 API int package_manager_request_uninstall(package_manager_request_h request,
500 const char *name, int *id)
504 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
505 if (retval != PACKAGE_MANAGER_ERROR_NONE)
508 if (package_manager_client_validate_handle(request))
509 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
512 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
515 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
516 name, request->mode, request_event_handler, request);
518 if (request_id == PKGMGR_R_EINVAL)
519 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
520 else if (request_id == PKGMGR_R_ENOPKG)
521 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
522 else if (request_id == PKGMGR_R_ENOMEM)
523 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
524 else if (request_id == PKGMGR_R_EIO)
525 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
526 else if (request_id == PKGMGR_R_EPRIV)
527 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
528 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
529 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
533 return PACKAGE_MANAGER_ERROR_NONE;
536 API int package_manager_request_move(package_manager_request_h request,
537 const char *name, package_manager_move_type_e move_type)
541 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
542 if (retval != PACKAGE_MANAGER_ERROR_NONE)
545 if (package_manager_client_validate_handle(request))
546 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
549 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
552 ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, move_type,
553 request->pc, request->pkg_type, name,
554 NULL, request_event_handler, request);
556 if (ret == PKGMGR_R_EINVAL)
557 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
558 else if (ret == PKGMGR_R_ENOPKG)
559 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
560 else if (ret == PKGMGR_R_ENOMEM)
561 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
562 else if (ret == PKGMGR_R_EIO)
563 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
564 else if (ret == PKGMGR_R_EPRIV)
565 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
566 else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR)
567 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
569 return PACKAGE_MANAGER_ERROR_NONE;
572 API int package_manager_create(package_manager_h *manager)
576 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
577 if (retval != PACKAGE_MANAGER_ERROR_NONE)
580 struct package_manager_s *package_manager = NULL;
582 if (manager == NULL) {
584 package_manager_error
585 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
589 package_manager = calloc(1, sizeof(struct package_manager_s));
590 if (package_manager == NULL) {
592 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
594 "failed to create a package_manager handle");
597 package_manager->ctype = PC_LISTENING;
598 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
599 if (package_manager->pc == NULL) {
600 free(package_manager);
602 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
604 "failed to create a package_manager client");
607 package_manager->handle_id = package_manager_new_id();
609 *manager = package_manager;
611 return PACKAGE_MANAGER_ERROR_NONE;
614 static int package_manager_validate_handle(package_manager_h manager)
616 if (manager == NULL || manager->pc == NULL)
617 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
619 return PACKAGE_MANAGER_ERROR_NONE;
622 API int package_manager_destroy(package_manager_h manager)
624 if (package_manager_validate_handle(manager)) {
626 package_manager_error
627 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
631 pkgmgr_client_free(manager->pc);
635 return PACKAGE_MANAGER_ERROR_NONE;
638 static int __add_event(event_info **head, int req_id,
639 package_manager_event_type_e event_type,
640 package_manager_event_state_e event_state)
642 event_info *evt_info;
644 evt_info = (event_info *) calloc(1, sizeof(event_info));
645 if (evt_info == NULL) {
646 _LOGD("calloc failed");
649 evt_info->req_id = req_id;
650 evt_info->event_type = event_type;
651 evt_info->event_state = event_state;
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;
673 *event_state = tmp->event_state;
677 static int __update_event(event_info **head, int req_id,
678 package_manager_event_type_e event_type,
679 package_manager_event_state_e event_state)
681 package_manager_event_type_e evt_type;
682 package_manager_event_state_e evt_state;
685 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
686 __add_event_info(head, req_id, event_type, event_state);
691 _LOGE("tmp is NULL");
695 tmp->event_type = event_type;
696 tmp->event_state = event_state;
703 /* App Event Listening Policy:
704 * +----------------+------------+---------------+------------------+
705 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
706 * +----------------+------------+---------------+------------------+
707 * |User Process App| Grant | Grant | Deny |
708 * +----------------+------------+---------------+------------------+
709 * |Platform module | Grant | Grant | Grant |
710 * +----------------+------------+---------------+------------------+
711 * UID assignment policy:
712 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
714 #define REGULAR_USER 5000
715 static int __validate_event_signal(uid_t target_uid)
717 uid_t self = getuid();
719 if (self == target_uid)
722 if (self < REGULAR_USER)
728 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
729 const char *pkg_name, const char *key,
730 const char *val, const void *pmsg, void *data)
733 package_manager_event_type_e event_type = -1;
734 package_manager_event_state_e event_state = -1;
735 uid_t uid = target_uid;
737 _LOGD("global_event_handler is called");
739 package_manager_h manager = data;
741 if (target_uid == GLOBAL_USER)
744 if (__validate_event_signal(uid))
745 return PACKAGE_MANAGER_ERROR_NONE;
747 if (strcasecmp(key, "start") == 0) {
748 ret = package_manager_get_event_type(val, &event_type);
749 if (ret != PACKAGE_MANAGER_ERROR_NONE)
750 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
752 __add_event(&(manager->head), req_id, event_type,
753 PACKAGE_MANAGER_EVENT_STATE_STARTED);
755 if (manager->event_cb && getuid() == uid)
756 manager->event_cb(pkg_type, pkg_name,
758 PACKAGE_MANAGER_EVENT_STATE_STARTED,
759 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() == uid)
769 manager->event_cb(pkg_type, pkg_name,
771 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
773 PACKAGE_MANAGER_ERROR_NONE,
777 } else if (strcasecmp(key, "error") == 0) {
778 if (strcasecmp(key, "0") != 0) {
780 (&(manager->head), req_id, &event_type,
781 &event_state) == 0) {
782 __update_event(&(manager->head), req_id,
784 PACKAGE_MANAGER_EVENT_STATE_FAILED);
787 if (manager->event_cb && getuid() == uid)
788 manager->event_cb(pkg_type,
789 pkg_name, event_type,
790 PACKAGE_MANAGER_EVENT_STATE_FAILED,
792 PACKAGE_MANAGER_ERROR_NONE,
795 } else if (strcasecmp(key, "end") == 0) {
797 (&(manager->head), req_id, &event_type,
798 &event_state) == 0) {
799 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
800 if (manager->event_cb && getuid() == uid)
801 manager->event_cb(pkg_type,
802 pkg_name, event_type,
803 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
805 PACKAGE_MANAGER_ERROR_NONE,
809 if (strcasecmp(key, "ok") != 0) {
810 if (manager->event_cb && getuid() == uid)
811 manager->event_cb(pkg_type,
812 pkg_name, event_type,
813 PACKAGE_MANAGER_EVENT_STATE_FAILED,
815 PACKAGE_MANAGER_ERROR_NONE,
821 return PACKAGE_MANAGER_ERROR_NONE;
824 static int __convert_status_type(package_manager_status_type_e status_type)
828 if (status_type == PACKAGE_MANAGER_STATUS_TYPE_ALL)
829 return PKGMGR_CLIENT_STATUS_ALL;
831 if (status_type & PACKAGE_MANAGER_STATUS_TYPE_INSTALL)
832 type |= PKGMGR_CLIENT_STATUS_INSTALL;
833 if (status_type & PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL)
834 type |= PKGMGR_CLIENT_STATUS_UNINSTALL;
835 if (status_type & PACKAGE_MANAGER_STATUS_TYPE_UPGRADE)
836 type |= PKGMGR_CLIENT_STATUS_UPGRADE;
837 if (status_type & PACKAGE_MANAGER_STATUS_TYPE_MOVE)
838 type |= PKGMGR_CLIENT_STATUS_MOVE;
839 if (status_type & PACKAGE_MANAGER_STATUS_TYPE_CLEAR_DATA)
840 type |= PKGMGR_CLIENT_STATUS_CLEAR_DATA;
841 if (status_type & PACKAGE_MANAGER_STATUS_TYPE_INSTALL_PROGRESS)
842 type |= PKGMGR_CLIENT_STATUS_INSTALL_PROGRESS;
843 if (status_type & PACKAGE_MANAGER_STATUS_TYPE_GET_SIZE)
844 type |= PKGMGR_CLIENT_STATUS_GET_SIZE;
849 API int package_manager_set_event_status(package_manager_h manager, int status_type)
853 int type_all = PACKAGE_MANAGER_STATUS_TYPE_INSTALL |
854 PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL |
855 PACKAGE_MANAGER_STATUS_TYPE_UPGRADE |
856 PACKAGE_MANAGER_STATUS_TYPE_MOVE |
857 PACKAGE_MANAGER_STATUS_TYPE_CLEAR_DATA |
858 PACKAGE_MANAGER_STATUS_TYPE_INSTALL_PROGRESS |
859 PACKAGE_MANAGER_STATUS_TYPE_GET_SIZE;
862 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
864 if (status_type < 0 || status_type > type_all)
865 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
867 type = __convert_status_type(status_type);
868 retval = pkgmgr_client_set_status_type(manager->pc, type);
871 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
873 return PACKAGE_MANAGER_ERROR_NONE;
876 API int package_manager_set_event_cb(package_manager_h manager,
877 package_manager_event_cb callback,
882 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
883 if (retval != PACKAGE_MANAGER_ERROR_NONE)
886 if (package_manager_validate_handle(manager)) {
888 package_manager_error
889 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
893 manager->event_cb = callback;
894 manager->user_data = user_data;
896 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
898 return PACKAGE_MANAGER_ERROR_NONE;
901 API int package_manager_unset_event_cb(package_manager_h manager)
903 if (manager == NULL) {
905 package_manager_error
906 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
911 manager->event_cb = NULL;
912 manager->user_data = NULL;
914 retval = pkgmgr_client_remove_listen_status(manager->pc);
915 if (retval == PKGMGR_R_EINVAL)
917 package_manager_error
918 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
920 else if (retval == PKGMGR_R_ERROR)
922 package_manager_error
923 (PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__,
926 return PACKAGE_MANAGER_ERROR_NONE;
929 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
931 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
934 char *pkg_id_dup = NULL;
936 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
937 if (retval != PACKAGE_MANAGER_ERROR_NONE)
940 if (app_id == NULL || package_id == NULL)
941 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
943 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
944 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
945 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
946 if (retval != PMINFO_R_OK)
947 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
949 pkg_id_dup = strdup(pkg_id);
950 if (pkg_id_dup == NULL) {
951 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
952 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
955 *package_id = pkg_id_dup;
957 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
959 return PACKAGE_MANAGER_ERROR_NONE;
962 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
965 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
966 if (retval != PACKAGE_MANAGER_ERROR_NONE)
969 retval = package_info_get_package_info(package_id, package_info);
971 if (retval != PACKAGE_MANAGER_ERROR_NONE)
972 return package_manager_error(retval, __FUNCTION__, NULL);
974 return PACKAGE_MANAGER_ERROR_NONE;
977 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
982 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
983 if (retval != PACKAGE_MANAGER_ERROR_NONE)
986 retval = package_info_foreach_package_info(callback, user_data);
988 if (retval != PACKAGE_MANAGER_ERROR_NONE)
989 return package_manager_error(retval, __FUNCTION__, NULL);
991 return PACKAGE_MANAGER_ERROR_NONE;
994 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)
996 pkgmgrinfo_cert_compare_result_type_e result;
998 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
999 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1000 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1001 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1002 *compare_result = (package_manager_compare_result_type_e)result;
1004 return PACKAGE_MANAGER_ERROR_NONE;
1007 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)
1009 pkgmgrinfo_cert_compare_result_type_e result;
1011 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1012 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1013 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1014 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1016 *compare_result = (package_manager_compare_result_type_e)result;
1018 return PACKAGE_MANAGER_ERROR_NONE;
1021 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1025 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1026 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1029 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1030 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1032 char *pkg_id = NULL;
1033 bool is_preload = 0;
1034 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1035 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1037 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1038 if (retval != PMINFO_R_OK) {
1039 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1040 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1042 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1043 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1044 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1045 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1047 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK) {
1048 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1049 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1050 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1058 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1059 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1061 return PACKAGE_MANAGER_ERROR_NONE;
1064 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1068 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1069 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1072 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1073 pkgmgrinfo_permission_type permission = 0;
1074 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1075 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1076 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1077 if (retval != PMINFO_R_OK)
1078 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1080 if (permission == PMINFO_PERMISSION_NORMAL)
1081 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1082 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1083 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1084 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1085 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1087 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1089 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1090 return PACKAGE_MANAGER_ERROR_NONE;
1093 API int package_manager_clear_cache_dir(const char *package_id)
1097 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1098 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1101 int res = pkgmgr_client_clear_cache_dir(package_id);
1102 if (res == PKGMGR_R_EINVAL) {
1103 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1104 } else if (res == PKGMGR_R_ENOPKG) {
1105 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1106 } else if (res == PKGMGR_R_ENOMEM) {
1107 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1108 } else if (res == PKGMGR_R_EIO) {
1109 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1110 } else if (res == PKGMGR_R_EPRIV) {
1111 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1112 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1113 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1114 } else if (res != PKGMGR_R_OK) {
1115 _LOGE("Unexpected error");
1116 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1119 return PACKAGE_MANAGER_ERROR_NONE;
1122 API int package_manager_clear_data(const char *package_id)
1125 pkgmgr_client *pc = NULL;
1126 char *pkg_type = NULL;
1127 pkgmgrinfo_pkginfo_h pkginfo = NULL;
1129 if (package_id == NULL)
1130 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1132 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1133 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1136 retval = pkgmgrinfo_pkginfo_get_pkginfo(package_id, &pkginfo);
1137 if (retval == PMINFO_R_ENOENT)
1138 return PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE;
1139 else if (retval != PMINFO_R_OK || pkginfo == NULL)
1140 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
1142 retval = pkgmgrinfo_pkginfo_get_type(pkginfo, &pkg_type);
1143 if (retval != PMINFO_R_OK || pkg_type == NULL) {
1144 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
1145 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
1148 pc = pkgmgr_client_new(PC_REQUEST);
1150 _LOGE("Out of memory");
1151 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
1152 return PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY;
1155 retval = pkgmgr_client_clear_user_data(pc, pkg_type, package_id, PM_QUIET);
1156 pkgmgr_client_free(pc);
1157 pkgmgrinfo_pkginfo_destroy_pkginfo(pkginfo);
1159 if (retval != PKGMGR_R_OK)
1160 return PACKAGE_MANAGER_ERROR_IO_ERROR;
1162 return PACKAGE_MANAGER_ERROR_NONE;
1165 API int package_manager_clear_all_cache_dir(void)
1169 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1170 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1173 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1176 static void __free_client(gpointer data)
1178 pkgmgr_client *pc = (pkgmgr_client *)data;
1179 pkgmgr_client_free(pc);
1182 static void __initialize_cb_table(void)
1184 __cb_table = g_hash_table_new_full(g_direct_hash, g_direct_equal, __free_client, NULL);
1187 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1189 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1190 if (callback == NULL) {
1191 _LOGE("callback is null.");
1192 g_hash_table_remove(__cb_table, pc);
1196 package_size_info_t size_info;
1197 size_info.data_size = result->data_size;
1198 size_info.cache_size = result->cache_size;
1199 size_info.app_size = result->app_size;
1200 size_info.external_data_size = result->ext_data_size;
1201 size_info.external_cache_size = result->ext_cache_size;
1202 size_info.external_app_size = result->ext_app_size;
1204 callback(pkgid, (package_size_info_h)&size_info, user_data);
1206 g_hash_table_remove(__cb_table, pc);
1209 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1211 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1212 if (callback == NULL) {
1213 _LOGE("callback is null.");
1214 g_hash_table_remove(__cb_table, pc);
1218 package_size_info_t size_info;
1219 size_info.data_size = result->data_size;
1220 size_info.cache_size = result->cache_size;
1221 size_info.app_size = result->app_size;
1222 size_info.external_data_size = result->ext_data_size;
1223 size_info.external_cache_size = result->ext_cache_size;
1224 size_info.external_app_size = result->ext_app_size;
1226 callback((package_size_info_h)&size_info, user_data);
1228 g_hash_table_remove(__cb_table, pc);
1231 static int _get_pkg_size_info(const char *package_id, void *callback, void *user_data)
1233 if (package_id == NULL || callback == NULL)
1234 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1236 if (__cb_table == NULL)
1237 __initialize_cb_table();
1239 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1241 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1244 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1245 res = pkgmgr_client_get_package_size_info(pc, package_id, __result_cb, user_data);
1247 res = pkgmgr_client_get_total_package_size_info(pc, __total_result_cb, user_data);
1249 if (res == PKGMGR_R_EINVAL) {
1250 pkgmgr_client_free(pc);
1251 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1252 } else if (res == PKGMGR_R_ENOPKG) {
1253 pkgmgr_client_free(pc);
1254 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1255 } else if (res == PKGMGR_R_ENOMEM) {
1256 pkgmgr_client_free(pc);
1257 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1258 } else if (res == PKGMGR_R_EIO) {
1259 pkgmgr_client_free(pc);
1260 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1261 } else if (res == PKGMGR_R_EPRIV) {
1262 pkgmgr_client_free(pc);
1263 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1264 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1265 pkgmgr_client_free(pc);
1266 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1267 } else if (res != PKGMGR_R_OK) {
1268 _LOGE("Unexpected error");
1269 pkgmgr_client_free(pc);
1270 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1273 g_hash_table_insert(__cb_table, pc, callback);
1275 _LOGD("Successful");
1276 return PACKAGE_MANAGER_ERROR_NONE;
1279 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1281 return _get_pkg_size_info(package_id, (void *)callback, user_data);
1284 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1286 return _get_pkg_size_info(PKG_SIZE_INFO_TOTAL, (void *)callback, user_data);
1289 API int package_manager_filter_create(package_manager_filter_h *handle)
1292 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1294 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1295 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1298 if (handle == NULL) {
1300 package_manager_error
1301 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1305 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1306 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1307 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1309 *handle = pkgmgr_filter;
1311 return PACKAGE_MANAGER_ERROR_NONE;
1314 API int package_manager_filter_destroy(package_manager_filter_h handle)
1318 if (handle == NULL) {
1320 package_manager_error
1321 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1325 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1326 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1327 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1329 return PACKAGE_MANAGER_ERROR_NONE;
1332 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1333 const char *property, const bool value)
1337 if ((handle == NULL) || (property == NULL)) {
1339 package_manager_error
1340 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1344 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1345 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1346 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1348 return PACKAGE_MANAGER_ERROR_NONE;
1351 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1355 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1356 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1359 if ((handle == NULL) || (count == NULL))
1360 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1362 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1364 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1366 return PACKAGE_MANAGER_ERROR_NONE;
1369 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1370 package_manager_package_info_cb callback, void *user_data)
1374 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1375 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1378 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1380 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1381 return package_manager_error(retval, __FUNCTION__, NULL);
1383 return PACKAGE_MANAGER_ERROR_NONE;
1386 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1389 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1391 package_size_info_t *size_info = (package_size_info_t *)handle;
1393 *data_size = (long long)size_info->data_size;
1394 return PACKAGE_MANAGER_ERROR_NONE;
1397 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1400 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1402 package_size_info_t *size_info = (package_size_info_t *)handle;
1404 *cache_size = size_info->cache_size;
1405 return PACKAGE_MANAGER_ERROR_NONE;
1408 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1411 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1413 package_size_info_t *size_info = (package_size_info_t *)handle;
1414 *app_size = size_info->app_size;
1415 return PACKAGE_MANAGER_ERROR_NONE;
1418 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1421 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1423 package_size_info_t *size_info = (package_size_info_t *)handle;
1424 *ext_data_size = size_info->external_data_size;
1425 return PACKAGE_MANAGER_ERROR_NONE;
1428 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1431 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1433 package_size_info_t *size_info = (package_size_info_t *)handle;
1434 *ext_cache_size = size_info->external_cache_size;
1435 return PACKAGE_MANAGER_ERROR_NONE;
1438 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1441 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1443 package_size_info_t *size_info = (package_size_info_t *)handle;
1444 *ext_app_size = size_info->external_app_size;
1445 return PACKAGE_MANAGER_ERROR_NONE;