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 {
61 package_manager_request_event_cb event_cb;
66 typedef struct package_size_info {
71 long long external_data_size;
72 long long external_cache_size;
73 long long external_app_size;
74 } package_size_info_t;
76 struct package_manager_filter_s {
77 pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
80 static int package_manager_request_new_id()
82 static int request_handle_id = 0;
83 return request_handle_id++;
86 static int package_manager_new_id()
88 static int manager_handle_id = 0;
89 return manager_handle_id++;
92 API int package_manager_request_create(package_manager_request_h *request)
94 struct package_manager_request_s *package_manager_request;
96 if (request == NULL) {
99 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
103 package_manager_request =
104 calloc(1, sizeof(struct package_manager_request_s));
105 if (package_manager_request == NULL) {
107 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
109 "failed to create a package_manager handle");
112 package_manager_request->ctype = PC_REQUEST;
113 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
114 if (package_manager_request->pc == NULL) {
115 free(package_manager_request);
117 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
119 "failed to create a package_manager client");
122 package_manager_request->handle_id = package_manager_request_new_id();
124 *request = package_manager_request;
126 return PACKAGE_MANAGER_ERROR_NONE;
129 static int package_manager_client_validate_handle(package_manager_request_h
132 if (request == NULL || request->pc == NULL)
133 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
135 return PACKAGE_MANAGER_ERROR_NONE;
138 API int package_manager_request_destroy(package_manager_request_h request)
140 if (package_manager_client_validate_handle(request)) {
142 package_manager_error
143 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
147 pkgmgr_client_free(request->pc);
151 return PACKAGE_MANAGER_ERROR_NONE;
154 API int package_manager_request_set_event_cb(package_manager_request_h request,
155 package_manager_request_event_cb
156 callback, void *user_data)
160 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
161 if (retval != PACKAGE_MANAGER_ERROR_NONE)
164 if (package_manager_client_validate_handle(request)) {
166 package_manager_error
167 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
171 request->event_cb = callback;
172 request->user_data = user_data;
174 return PACKAGE_MANAGER_ERROR_NONE;
177 API int package_manager_request_unset_event_cb(package_manager_request_h request)
179 /* TODO: Please implement this function. */
180 if (package_manager_client_validate_handle(request))
181 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
183 return PACKAGE_MANAGER_ERROR_NONE;
187 API int package_manager_request_set_type(package_manager_request_h request,
188 const char *pkg_type)
190 if (package_manager_client_validate_handle(request)) {
192 package_manager_error
193 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
197 request->pkg_type = pkg_type;
199 return PACKAGE_MANAGER_ERROR_NONE;
202 API int package_manager_request_set_mode(package_manager_request_h request,
203 package_manager_request_mode_e mode)
205 if (package_manager_client_validate_handle(request)) {
207 package_manager_error
208 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
212 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
213 request->mode = PM_QUIET;
215 request->mode = PM_DEFAULT;
217 return PACKAGE_MANAGER_ERROR_NONE;
220 int package_manager_request_set_tep(package_manager_request_h request,
221 const char *tep_path)
225 if (package_manager_client_validate_handle(request) || tep_path == NULL) {
227 package_manager_error
228 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
232 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
233 if (retval != PACKAGE_MANAGER_ERROR_NONE)
236 if (request->tep_path)
237 free((void *)request->tep_path);
239 request->tep_path = strdup(tep_path);
240 request->tep_move = true;
242 if (request ->tep_path == NULL)
243 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
245 return PACKAGE_MANAGER_ERROR_NONE;
248 static int package_manager_get_event_type(const char *key,
249 package_manager_event_type_e *
253 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
255 if (strcasecmp(key, PKGMGR_INSTALLER_INSTALL_EVENT_STR) == 0)
256 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
257 else if (strcasecmp(key, PKGMGR_INSTALLER_UNINSTALL_EVENT_STR) == 0)
258 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
259 else if (strcasecmp(key, PKGMGR_INSTALLER_UPGRADE_EVENT_STR) == 0)
260 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
262 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
264 return PACKAGE_MANAGER_ERROR_NONE;
267 static int __add_event_info(event_info **head, int req_id,
268 package_manager_event_type_e event_type,
269 package_manager_event_state_e event_state)
271 event_info *evt_info;
275 evt_info = (event_info *) calloc(1, sizeof(event_info));
276 if (evt_info == NULL) {
277 _LOGD("calloc failed");
280 evt_info->req_id = req_id;
281 evt_info->event_type = event_type;
282 evt_info->next = NULL;
287 current = prev = *head;
290 current = current->next;
293 prev->next = evt_info;
299 static int __find_event_info(event_info **head, int req_id,
300 package_manager_event_type_e *event_type,
301 package_manager_event_state_e *event_state)
308 _LOGE("tmp is NULL");
312 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
315 if (tmp->req_id == req_id) {
316 *event_type = tmp->event_type;
324 static int __update_event_info(event_info **head, int req_id,
325 package_manager_event_type_e event_type,
326 package_manager_event_state_e event_state)
328 package_manager_event_type_e evt_type;
329 package_manager_event_state_e evt_state;
332 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
333 __add_event_info(head, req_id, event_type, event_state);
338 _LOGE("tmp is NULL");
343 if (tmp->req_id == req_id) {
344 tmp->event_type = event_type;
355 static int __remove_event_info(event_info **head request, int req_id)
366 if (current->next->req_id == req_id) {
368 current->next = current->next->next;
380 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
381 const char *pkg_name, const char *key,
382 const char *val, const void *pmsg, void *data)
385 package_manager_event_type_e event_type = -1;
386 package_manager_event_state_e event_state = -1;
388 _LOGD("request_event_handler is called");
390 package_manager_request_h request = data;
392 if (strcasecmp(key, "start") == 0) {
393 ret = package_manager_get_event_type(val, &event_type);
394 if (ret != PACKAGE_MANAGER_ERROR_NONE)
395 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
397 __add_event_info(&(request->head), req_id, event_type,
398 PACKAGE_MANAGER_EVENT_STATE_STARTED);
400 if (request->event_cb)
401 request->event_cb(req_id, pkg_type, pkg_name,
403 PACKAGE_MANAGER_EVENT_STATE_STARTED,
404 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
406 } else if (strcasecmp(key, "install_percent") == 0
407 || strcasecmp(key, "progress_percent") == 0) {
408 if (__find_event_info
409 (&(request->head), req_id, &event_type,
410 &event_state) == 0) {
411 __update_event_info(&(request->head), req_id,
413 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
414 if (request->event_cb)
415 request->event_cb(req_id, pkg_type, pkg_name,
417 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
419 PACKAGE_MANAGER_ERROR_NONE,
423 } else if (strcasecmp(key, "error") == 0) {
424 if (strcasecmp(key, "0") != 0) {
425 if (__find_event_info
426 (&(request->head), req_id, &event_type,
427 &event_state) == 0) {
428 __update_event_info(&(request->head), req_id,
430 PACKAGE_MANAGER_EVENT_STATE_FAILED);
433 if (request->event_cb)
434 request->event_cb(req_id, pkg_type,
435 pkg_name, event_type,
436 PACKAGE_MANAGER_EVENT_STATE_FAILED,
438 PACKAGE_MANAGER_ERROR_NONE,
442 } else if (strcasecmp(key, "end") == 0) {
443 if (__find_event_info
444 (&(request->head), req_id, &event_type,
445 &event_state) == 0) {
446 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
447 if (request->event_cb)
448 request->event_cb(req_id, pkg_type,
449 pkg_name, event_type,
450 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
452 PACKAGE_MANAGER_ERROR_NONE,
456 if (strcasecmp(key, "ok") != 0)
457 if (request->event_cb)
458 request->event_cb(req_id, pkg_type,
459 pkg_name, event_type,
460 PACKAGE_MANAGER_EVENT_STATE_FAILED,
462 PACKAGE_MANAGER_ERROR_NONE,
467 return PACKAGE_MANAGER_ERROR_NONE;
470 API int package_manager_request_install(package_manager_request_h request,
471 const char *path, int *id)
475 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
476 if (retval != PACKAGE_MANAGER_ERROR_NONE)
479 if (package_manager_client_validate_handle(request))
480 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
483 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
486 request->pkg_path = path;
487 uid_t uid = getuid();
488 if (uid != GLOBAL_USER)
489 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
490 request->pkg_path, NULL,
491 request->mode, request_event_handler,
495 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
496 request->pkg_path, NULL,
497 request->mode, request_event_handler,
500 if (request_id == PKGMGR_R_EINVAL)
501 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
502 else if (request_id == PKGMGR_R_ENOPKG)
503 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
504 else if (request_id == PKGMGR_R_ENOMEM)
505 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
506 else if (request_id == PKGMGR_R_EIO)
507 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
508 else if (request_id == PKGMGR_R_EPRIV)
509 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
510 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
511 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
515 return PACKAGE_MANAGER_ERROR_NONE;
518 API int package_manager_request_uninstall(package_manager_request_h request,
519 const char *name, int *id)
523 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
524 if (retval != PACKAGE_MANAGER_ERROR_NONE)
527 if (package_manager_client_validate_handle(request))
528 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
531 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
534 request->pkg_name = name;
535 uid_t uid = getuid();
536 if (uid != GLOBAL_USER)
537 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
538 request->pkg_name, request->mode,
539 request_event_handler, request, uid);
541 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
542 request->pkg_name, request->mode,
543 request_event_handler, request);
545 if (request_id == PKGMGR_R_EINVAL)
546 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
547 else if (request_id == PKGMGR_R_ENOPKG)
548 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
549 else if (request_id == PKGMGR_R_ENOMEM)
550 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
551 else if (request_id == PKGMGR_R_EIO)
552 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
553 else if (request_id == PKGMGR_R_EPRIV)
554 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
555 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
556 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
560 return PACKAGE_MANAGER_ERROR_NONE;
563 API int package_manager_request_move(package_manager_request_h request,
564 const char *name, package_manager_move_type_e move_type)
568 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
569 if (retval != PACKAGE_MANAGER_ERROR_NONE)
572 if (package_manager_client_validate_handle(request))
573 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
576 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
579 request->pkg_name = name;
580 uid_t uid = getuid();
581 if (uid != GLOBAL_USER)
582 ret = pkgmgr_client_usr_move(request->pc, request->pkg_type, request->pkg_name,
583 move_type, request->mode, uid);
585 ret = pkgmgr_client_move(request->pc, request->pkg_type, request->pkg_name,
586 move_type, request->mode);
587 if (ret == PKGMGR_R_EINVAL)
588 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
589 else if (ret == PKGMGR_R_ENOPKG)
590 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
591 else if (ret == PKGMGR_R_ENOMEM)
592 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
593 else if (ret == PKGMGR_R_EIO)
594 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
595 else if (ret == PKGMGR_R_EPRIV)
596 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
597 else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR)
598 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
600 return PACKAGE_MANAGER_ERROR_NONE;
603 API int package_manager_create(package_manager_h *manager)
607 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
608 if (retval != PACKAGE_MANAGER_ERROR_NONE)
611 struct package_manager_s *package_manager = NULL;
613 if (manager == NULL) {
615 package_manager_error
616 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
620 package_manager = calloc(1, sizeof(struct package_manager_s));
621 if (package_manager == NULL) {
623 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
625 "failed to create a package_manager handle");
628 package_manager->ctype = PC_LISTENING;
629 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
630 if (package_manager->pc == NULL) {
631 free(package_manager);
633 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
635 "failed to create a package_manager client");
638 package_manager->handle_id = package_manager_new_id();
640 *manager = package_manager;
642 return PACKAGE_MANAGER_ERROR_NONE;
645 static int package_manager_validate_handle(package_manager_h manager)
647 if (manager == NULL || manager->pc == NULL)
648 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
650 return PACKAGE_MANAGER_ERROR_NONE;
653 API int package_manager_destroy(package_manager_h manager)
655 if (package_manager_validate_handle(manager)) {
657 package_manager_error
658 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
662 pkgmgr_client_free(manager->pc);
666 return PACKAGE_MANAGER_ERROR_NONE;
669 static int __add_event(event_info **head, int req_id,
670 package_manager_event_type_e event_type,
671 package_manager_event_state_e event_state)
673 event_info *evt_info;
675 evt_info = (event_info *) calloc(1, sizeof(event_info));
676 if (evt_info == NULL) {
677 _LOGD("calloc failed");
680 evt_info->req_id = req_id;
681 evt_info->event_type = event_type;
682 evt_info->next = NULL;
689 static int __find_event(event_info **head, int req_id,
690 package_manager_event_type_e *event_type,
691 package_manager_event_state_e *event_state)
698 _LOGE("tmp is NULL");
702 *event_type = tmp->event_type;
706 static int __update_event(event_info **head, int req_id,
707 package_manager_event_type_e event_type,
708 package_manager_event_state_e event_state)
710 package_manager_event_type_e evt_type;
711 package_manager_event_state_e evt_state;
714 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
715 __add_event_info(head, req_id, event_type, event_state);
720 _LOGE("tmp is NULL");
724 tmp->event_type = event_type;
731 /* App Event Listening Policy:
732 * +----------------+------------+---------------+------------------+
733 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
734 * +----------------+------------+---------------+------------------+
735 * |User Process App| Grant | Grant | Deny |
736 * +----------------+------------+---------------+------------------+
737 * |Platform module | Grant | Grant | Grant |
738 * +----------------+------------+---------------+------------------+
739 * UID assignment policy:
740 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
742 #define REGULAR_USER 5000
743 static int __validate_event_signal(uid_t target_uid)
745 uid_t self = getuid();
747 if (self == target_uid)
750 if (self < REGULAR_USER)
756 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
757 const char *pkg_name, const char *key,
758 const char *val, const void *pmsg, void *data)
761 package_manager_event_type_e event_type = -1;
762 package_manager_event_state_e event_state = -1;
763 uid_t uid = target_uid;
765 _LOGD("global_event_handler is called");
767 package_manager_h manager = data;
769 if (target_uid == GLOBAL_USER)
772 if (__validate_event_signal(uid))
773 return PACKAGE_MANAGER_ERROR_NONE;
775 if (strcasecmp(key, "start") == 0) {
776 ret = package_manager_get_event_type(val, &event_type);
777 if (ret != PACKAGE_MANAGER_ERROR_NONE)
778 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
780 __add_event(&(manager->head), req_id, event_type,
781 PACKAGE_MANAGER_EVENT_STATE_STARTED);
783 if (manager->event_cb && getuid() == uid)
784 manager->event_cb(pkg_type, pkg_name,
786 PACKAGE_MANAGER_EVENT_STATE_STARTED,
787 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
788 if (manager->global_event_cb)
789 manager->global_event_cb(target_uid, pkg_type, pkg_name,
791 PACKAGE_MANAGER_EVENT_STATE_STARTED,
792 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
794 } else if (strcasecmp(key, "install_percent") == 0
795 || strcasecmp(key, "progress_percent") == 0) {
797 (&(manager->head), req_id, &event_type,
798 &event_state) == 0) {
799 __update_event(&(manager->head), req_id,
801 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
802 if (manager->event_cb && getuid() == uid)
803 manager->event_cb(pkg_type, pkg_name,
805 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
807 PACKAGE_MANAGER_ERROR_NONE,
809 if (manager->global_event_cb)
810 manager->global_event_cb(target_uid, pkg_type, pkg_name,
812 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
814 PACKAGE_MANAGER_ERROR_NONE,
818 } else if (strcasecmp(key, "error") == 0) {
819 if (strcasecmp(key, "0") != 0) {
821 (&(manager->head), req_id, &event_type,
822 &event_state) == 0) {
823 __update_event(&(manager->head), req_id,
825 PACKAGE_MANAGER_EVENT_STATE_FAILED);
828 if (manager->event_cb && getuid() == uid)
829 manager->event_cb(pkg_type,
830 pkg_name, event_type,
831 PACKAGE_MANAGER_EVENT_STATE_FAILED,
833 PACKAGE_MANAGER_ERROR_NONE,
835 if (manager->global_event_cb)
836 manager->global_event_cb(target_uid, pkg_type,
837 pkg_name, event_type,
838 PACKAGE_MANAGER_EVENT_STATE_FAILED,
840 PACKAGE_MANAGER_ERROR_NONE,
843 } else if (strcasecmp(key, "end") == 0) {
845 (&(manager->head), req_id, &event_type,
846 &event_state) == 0) {
847 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
848 if (manager->event_cb && getuid() == uid)
849 manager->event_cb(pkg_type,
850 pkg_name, event_type,
851 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
853 PACKAGE_MANAGER_ERROR_NONE,
855 if (manager->global_event_cb)
856 manager->global_event_cb(target_uid, pkg_type,
857 pkg_name, event_type,
858 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
860 PACKAGE_MANAGER_ERROR_NONE,
864 if (strcasecmp(key, "ok") != 0) {
865 if (manager->event_cb && getuid() == uid)
866 manager->event_cb(pkg_type,
867 pkg_name, event_type,
868 PACKAGE_MANAGER_EVENT_STATE_FAILED,
870 PACKAGE_MANAGER_ERROR_NONE,
872 if (manager->global_event_cb)
873 manager->global_event_cb(target_uid, pkg_type,
874 pkg_name, event_type,
875 PACKAGE_MANAGER_EVENT_STATE_FAILED,
877 PACKAGE_MANAGER_ERROR_NONE,
883 return PACKAGE_MANAGER_ERROR_NONE;
886 API int package_manager_set_event_status(package_manager_h manager, int status_type)
891 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
893 retval = pkgmgrinfo_client_set_status_type(manager->pc, status_type);
896 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
898 return PACKAGE_MANAGER_ERROR_NONE;
901 API int package_manager_set_event_cb(package_manager_h manager,
902 package_manager_event_cb callback,
907 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
908 if (retval != PACKAGE_MANAGER_ERROR_NONE)
911 if (package_manager_validate_handle(manager)) {
913 package_manager_error
914 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
918 manager->event_cb = callback;
919 manager->user_data = user_data;
921 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
923 return PACKAGE_MANAGER_ERROR_NONE;
926 API int package_manager_unset_event_cb(package_manager_h manager)
928 if (manager == NULL) {
930 package_manager_error
931 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
935 /* TODO: Please implement this function. */
936 return PACKAGE_MANAGER_ERROR_NONE;
939 API int package_manager_set_global_event_cb(package_manager_h manager,
940 package_manager_global_event_cb callback,
945 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
946 if (retval != PACKAGE_MANAGER_ERROR_NONE)
949 if (package_manager_validate_handle(manager)) {
951 package_manager_error
952 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
956 if (getuid() >= REGULAR_USER) {
957 _LOGE("Regular user is not allowed for this api");
958 return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
961 manager->global_event_cb = callback;
962 manager->user_data = user_data;
964 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
966 return PACKAGE_MANAGER_ERROR_NONE;
969 API int package_manager_unset_global_event_cb(package_manager_h manager)
971 if (manager == NULL) {
973 package_manager_error
974 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
978 /* TODO: Please implement this function. */
979 return PACKAGE_MANAGER_ERROR_NONE;
982 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
984 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
987 char *pkg_id_dup = NULL;
989 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
990 if (retval != PACKAGE_MANAGER_ERROR_NONE)
993 if (app_id == NULL || package_id == NULL)
994 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
996 uid_t uid = getuid();
997 if (uid != GLOBAL_USER) {
998 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
999 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1001 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1002 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1004 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1005 if (retval != PMINFO_R_OK)
1006 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1008 pkg_id_dup = strdup(pkg_id);
1009 if (pkg_id_dup == NULL) {
1010 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1011 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1014 *package_id = pkg_id_dup;
1016 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1018 return PACKAGE_MANAGER_ERROR_NONE;
1021 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
1024 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1025 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1028 retval = package_info_get_package_info(package_id, package_info);
1030 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1031 return package_manager_error(retval, __FUNCTION__, NULL);
1033 return PACKAGE_MANAGER_ERROR_NONE;
1036 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
1041 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1042 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1045 retval = package_info_foreach_package_info(callback, user_data);
1047 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1048 return package_manager_error(retval, __FUNCTION__, NULL);
1050 return PACKAGE_MANAGER_ERROR_NONE;
1053 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)
1055 pkgmgrinfo_cert_compare_result_type_e result;
1056 uid_t uid = getuid();
1058 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
1059 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1060 if (uid != GLOBAL_USER) {
1061 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
1062 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1064 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1065 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1067 *compare_result = (package_manager_compare_result_type_e)result;
1069 return PACKAGE_MANAGER_ERROR_NONE;
1072 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)
1074 pkgmgrinfo_cert_compare_result_type_e result;
1075 uid_t uid = getuid();
1077 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1078 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1079 if (uid != GLOBAL_USER) {
1080 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1081 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1083 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1084 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1087 *compare_result = (package_manager_compare_result_type_e)result;
1089 return PACKAGE_MANAGER_ERROR_NONE;
1092 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1096 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1097 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1100 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1101 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1103 char *pkg_id = NULL;
1104 bool is_preload = 0;
1105 uid_t uid = getuid();
1106 if (uid != GLOBAL_USER) {
1107 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1108 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1110 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1111 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1114 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1115 if (retval != PMINFO_R_OK) {
1116 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1117 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1119 if (uid != GLOBAL_USER) {
1120 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1121 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1122 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1123 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1126 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1127 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1128 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1129 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1132 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK) {
1133 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1134 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1135 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1143 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1144 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1146 return PACKAGE_MANAGER_ERROR_NONE;
1149 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1153 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1154 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1157 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1158 pkgmgrinfo_permission_type permission = 0;
1159 uid_t uid = getuid();
1160 if (uid != GLOBAL_USER) {
1161 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1162 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1164 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1165 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1167 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1168 if (retval != PMINFO_R_OK)
1169 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1171 if (permission == PMINFO_PERMISSION_NORMAL)
1172 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1173 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1174 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1175 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1176 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1178 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1180 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1181 return PACKAGE_MANAGER_ERROR_NONE;
1184 API int package_manager_clear_cache_dir(const char *package_id)
1188 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1189 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1192 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1193 if (res == PKGMGR_R_EINVAL) {
1194 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1195 } else if (res == PKGMGR_R_ENOPKG) {
1196 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1197 } else if (res == PKGMGR_R_ENOMEM) {
1198 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1199 } else if (res == PKGMGR_R_EIO) {
1200 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1201 } else if (res == PKGMGR_R_EPRIV) {
1202 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1203 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1204 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1205 } else if (res != PKGMGR_R_OK) {
1206 _LOGE("Unexpected error");
1207 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1210 return PACKAGE_MANAGER_ERROR_NONE;
1213 API int package_manager_clear_all_cache_dir(void)
1217 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1218 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1221 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1224 static void __free_client(gpointer data)
1226 pkgmgr_client *pc = (pkgmgr_client *)data;
1227 pkgmgr_client_free(pc);
1230 static void __initialize_cb_table(void)
1232 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, __free_client, NULL);
1235 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1237 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1238 if (callback == NULL) {
1239 _LOGE("callback is null.");
1240 g_hash_table_remove(__cb_table, pc);
1244 package_size_info_t size_info;
1245 size_info.data_size = result->data_size;
1246 size_info.cache_size = result->cache_size;
1247 size_info.app_size = result->app_size;
1248 size_info.external_data_size = result->ext_data_size;
1249 size_info.external_cache_size = result->ext_cache_size;
1250 size_info.external_app_size = result->ext_app_size;
1252 callback(pkgid, (package_size_info_h)&size_info, user_data);
1254 g_hash_table_remove(__cb_table, pc);
1257 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1259 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1260 if (callback == NULL) {
1261 _LOGE("callback is null.");
1262 g_hash_table_remove(__cb_table, pc);
1266 package_size_info_t size_info;
1267 size_info.data_size = result->data_size;
1268 size_info.cache_size = result->cache_size;
1269 size_info.app_size = result->app_size;
1270 size_info.external_data_size = result->ext_data_size;
1271 size_info.external_cache_size = result->ext_cache_size;
1272 size_info.external_app_size = result->ext_app_size;
1274 callback((package_size_info_h)&size_info, user_data);
1276 g_hash_table_remove(__cb_table, pc);
1279 static int _get_pkg_size_info(const char *package_id, void *callback, void *user_data)
1281 if (package_id == NULL || callback == NULL)
1282 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1284 if (__cb_table == NULL)
1285 __initialize_cb_table();
1287 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1289 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1292 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1293 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1295 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1297 if (res == PKGMGR_R_EINVAL) {
1298 pkgmgr_client_free(pc);
1299 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1300 } else if (res == PKGMGR_R_ENOPKG) {
1301 pkgmgr_client_free(pc);
1302 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1303 } else if (res == PKGMGR_R_ENOMEM) {
1304 pkgmgr_client_free(pc);
1305 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1306 } else if (res == PKGMGR_R_EIO) {
1307 pkgmgr_client_free(pc);
1308 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1309 } else if (res == PKGMGR_R_EPRIV) {
1310 pkgmgr_client_free(pc);
1311 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1312 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1313 pkgmgr_client_free(pc);
1314 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1315 } else if (res != PKGMGR_R_OK) {
1316 _LOGE("Unexpected error");
1317 pkgmgr_client_free(pc);
1318 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1321 g_hash_table_insert(__cb_table, pc, callback);
1323 _LOGD("Successful");
1324 return PACKAGE_MANAGER_ERROR_NONE;
1327 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1329 return _get_pkg_size_info(package_id, (void *)callback, user_data);
1332 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1334 return _get_pkg_size_info(PKG_SIZE_INFO_TOTAL, (void *)callback, user_data);
1337 API int package_manager_filter_create(package_manager_filter_h *handle)
1340 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1342 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1343 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1346 if (handle == NULL) {
1348 package_manager_error
1349 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1353 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1354 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1355 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1357 *handle = pkgmgr_filter;
1359 return PACKAGE_MANAGER_ERROR_NONE;
1362 API int package_manager_filter_destroy(package_manager_filter_h handle)
1366 if (handle == NULL) {
1368 package_manager_error
1369 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1373 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1374 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1375 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1377 return PACKAGE_MANAGER_ERROR_NONE;
1380 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1381 const char *property, const bool value)
1385 if ((handle == NULL) || (property == NULL)) {
1387 package_manager_error
1388 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1392 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1393 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1394 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1396 return PACKAGE_MANAGER_ERROR_NONE;
1399 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1403 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1404 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1407 if ((handle == NULL) || (count == NULL))
1408 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1410 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1412 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1414 return PACKAGE_MANAGER_ERROR_NONE;
1417 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1418 package_manager_package_info_cb callback, void *user_data)
1422 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1423 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1426 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1428 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1429 return package_manager_error(retval, __FUNCTION__, NULL);
1431 return PACKAGE_MANAGER_ERROR_NONE;
1434 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1437 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1439 package_size_info_t *size_info = (package_size_info_t *)handle;
1441 *data_size = (long long)size_info->data_size;
1442 return PACKAGE_MANAGER_ERROR_NONE;
1445 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1448 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1450 package_size_info_t *size_info = (package_size_info_t *)handle;
1452 *cache_size = size_info->cache_size;
1453 return PACKAGE_MANAGER_ERROR_NONE;
1456 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1459 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1461 package_size_info_t *size_info = (package_size_info_t *)handle;
1462 *app_size = size_info->app_size;
1463 return PACKAGE_MANAGER_ERROR_NONE;
1466 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1469 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1471 package_size_info_t *size_info = (package_size_info_t *)handle;
1472 *ext_data_size = size_info->external_data_size;
1473 return PACKAGE_MANAGER_ERROR_NONE;
1476 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1479 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1481 package_size_info_t *size_info = (package_size_info_t *)handle;
1482 *ext_cache_size = size_info->external_cache_size;
1483 return PACKAGE_MANAGER_ERROR_NONE;
1486 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1489 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1491 package_size_info_t *size_info = (package_size_info_t *)handle;
1492 *ext_app_size = size_info->external_app_size;
1493 return PACKAGE_MANAGER_ERROR_NONE;