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
70 long long external_data_size;
71 long long external_cache_size;
72 long long external_app_size;
73 } package_size_info_t;
75 struct package_manager_filter_s {
76 pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
79 static int package_manager_request_new_id()
81 static int request_handle_id = 0;
82 return request_handle_id++;
85 static int package_manager_new_id()
87 static int manager_handle_id = 0;
88 return manager_handle_id++;
91 API int package_manager_request_create(package_manager_request_h *request)
93 struct package_manager_request_s *package_manager_request;
95 if (request == NULL) {
98 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
102 package_manager_request =
103 calloc(1, sizeof(struct package_manager_request_s));
104 if (package_manager_request == NULL) {
106 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
108 "failed to create a package_manager handle");
111 package_manager_request->ctype = PC_REQUEST;
112 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
113 if (package_manager_request->pc == NULL) {
114 free(package_manager_request);
116 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
118 "failed to create a package_manager client");
121 package_manager_request->handle_id = package_manager_request_new_id();
123 *request = package_manager_request;
125 return PACKAGE_MANAGER_ERROR_NONE;
128 static int package_manager_client_validate_handle(package_manager_request_h
131 if (request == NULL || request->pc == NULL)
132 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
134 return PACKAGE_MANAGER_ERROR_NONE;
137 API int package_manager_request_destroy(package_manager_request_h request)
139 if (package_manager_client_validate_handle(request)) {
141 package_manager_error
142 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
146 pkgmgr_client_free(request->pc);
150 return PACKAGE_MANAGER_ERROR_NONE;
153 API int package_manager_request_set_event_cb(package_manager_request_h request,
154 package_manager_request_event_cb
155 callback, void *user_data)
159 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
160 if (retval != PACKAGE_MANAGER_ERROR_NONE)
163 if (package_manager_client_validate_handle(request)) {
165 package_manager_error
166 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
170 request->event_cb = callback;
171 request->user_data = user_data;
173 return PACKAGE_MANAGER_ERROR_NONE;
176 API int package_manager_request_unset_event_cb(package_manager_request_h request)
178 /* TODO: Please implement this function. */
179 if (package_manager_client_validate_handle(request))
180 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
182 return PACKAGE_MANAGER_ERROR_NONE;
186 API int package_manager_request_set_type(package_manager_request_h request,
187 const char *pkg_type)
189 if (package_manager_client_validate_handle(request)) {
191 package_manager_error
192 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
196 request->pkg_type = pkg_type;
198 return PACKAGE_MANAGER_ERROR_NONE;
201 API int package_manager_request_set_mode(package_manager_request_h request,
202 package_manager_request_mode_e mode)
204 if (package_manager_client_validate_handle(request)) {
206 package_manager_error
207 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
211 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
212 request->mode = PM_QUIET;
214 request->mode = PM_DEFAULT;
216 return PACKAGE_MANAGER_ERROR_NONE;
219 static int package_manager_get_event_type(const char *key,
220 package_manager_event_type_e *
224 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
226 if (strcasecmp(key, PKGMGR_INSTALLER_INSTALL_EVENT_STR) == 0)
227 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
228 else if (strcasecmp(key, PKGMGR_INSTALLER_UNINSTALL_EVENT_STR) == 0)
229 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
230 else if (strcasecmp(key, PKGMGR_INSTALLER_UPGRADE_EVENT_STR) == 0)
231 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
233 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
235 return PACKAGE_MANAGER_ERROR_NONE;
238 static int __add_event_info(event_info ** head, int req_id,
239 package_manager_event_type_e event_type,
240 package_manager_event_state_e event_state)
242 event_info *evt_info;
246 evt_info = (event_info *) calloc(1, sizeof(event_info));
247 if (evt_info == NULL) {
248 _LOGD("calloc failed");
251 evt_info->req_id = req_id;
252 evt_info->event_type = event_type;
253 evt_info->next = NULL;
258 current = prev = *head;
261 current = current->next;
264 prev->next = evt_info;
270 static int __find_event_info(event_info ** head, int req_id,
271 package_manager_event_type_e * event_type,
272 package_manager_event_state_e * event_state)
279 _LOGE("tmp is NULL");
283 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
286 if (tmp->req_id == req_id) {
287 *event_type = tmp->event_type;
295 static int __update_event_info(event_info ** head, int req_id,
296 package_manager_event_type_e event_type,
297 package_manager_event_state_e event_state)
299 package_manager_event_type_e evt_type;
300 package_manager_event_state_e evt_state;
303 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
304 __add_event_info(head, req_id, event_type, event_state);
309 _LOGE("tmp is NULL");
314 if (tmp->req_id == req_id) {
315 tmp->event_type = event_type;
326 static int __remove_event_info(event_info **head request, int req_id)
337 if (current->next->req_id == req_id) {
339 current->next = current->next->next;
351 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
352 const char *pkg_name, const char *key,
353 const char *val, const void *pmsg, void *data)
356 package_manager_event_type_e event_type = -1;
357 package_manager_event_state_e event_state = -1;
359 _LOGD("request_event_handler is called");
361 package_manager_request_h request = data;
363 if (strcasecmp(key, "start") == 0) {
364 ret = package_manager_get_event_type(val, &event_type);
365 if (ret != PACKAGE_MANAGER_ERROR_NONE)
366 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
368 __add_event_info(&(request->head), req_id, event_type,
369 PACKAGE_MANAGER_EVENT_STATE_STARTED);
371 if (request->event_cb)
372 request->event_cb(req_id, pkg_type, pkg_name,
374 PACKAGE_MANAGER_EVENT_STATE_STARTED,
375 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
377 } else if (strcasecmp(key, "install_percent") == 0
378 || strcasecmp(key, "progress_percent") == 0) {
379 if (__find_event_info
380 (&(request->head), req_id, &event_type,
381 &event_state) == 0) {
382 __update_event_info(&(request->head), req_id,
384 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
385 if (request->event_cb)
386 request->event_cb(req_id, pkg_type, pkg_name,
388 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
390 PACKAGE_MANAGER_ERROR_NONE,
394 } else if (strcasecmp(key, "error") == 0) {
395 if (strcasecmp(key, "0") != 0) {
396 if (__find_event_info
397 (&(request->head), req_id, &event_type,
398 &event_state) == 0) {
399 __update_event_info(&(request->head), req_id,
401 PACKAGE_MANAGER_EVENT_STATE_FAILED);
404 if (request->event_cb)
405 request->event_cb(req_id, pkg_type,
406 pkg_name, event_type,
407 PACKAGE_MANAGER_EVENT_STATE_FAILED,
409 PACKAGE_MANAGER_ERROR_NONE,
413 } else if (strcasecmp(key, "end") == 0) {
414 if (__find_event_info
415 (&(request->head), req_id, &event_type,
416 &event_state) == 0) {
417 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
418 if (request->event_cb)
419 request->event_cb(req_id, pkg_type,
420 pkg_name, event_type,
421 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
423 PACKAGE_MANAGER_ERROR_NONE,
427 if (strcasecmp(key, "ok") != 0)
428 if (request->event_cb)
429 request->event_cb(req_id, pkg_type,
430 pkg_name, event_type,
431 PACKAGE_MANAGER_EVENT_STATE_FAILED,
433 PACKAGE_MANAGER_ERROR_NONE,
438 return PACKAGE_MANAGER_ERROR_NONE;
441 API int package_manager_request_install(package_manager_request_h request,
442 const char *path, int *id)
446 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
447 if (retval != PACKAGE_MANAGER_ERROR_NONE)
450 if (package_manager_client_validate_handle(request))
451 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
454 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
457 request->pkg_path = path;
458 uid_t uid = getuid();
459 if (uid != GLOBAL_USER)
460 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
461 request->pkg_path, NULL,
462 request->mode, request_event_handler,
466 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
467 request->pkg_path, NULL,
468 request->mode, request_event_handler,
471 if (request_id == PKGMGR_R_EINVAL)
472 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
473 else if (request_id == PKGMGR_R_ENOPKG)
474 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
475 else if (request_id == PKGMGR_R_ENOMEM)
476 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
477 else if (request_id == PKGMGR_R_EIO)
478 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
479 else if (request_id == PKGMGR_R_EPRIV)
480 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
481 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
482 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
486 return PACKAGE_MANAGER_ERROR_NONE;
489 API int package_manager_request_uninstall(package_manager_request_h request,
490 const char *name, int *id)
494 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
495 if (retval != PACKAGE_MANAGER_ERROR_NONE)
498 if (package_manager_client_validate_handle(request))
499 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
502 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
505 request->pkg_name = name;
506 uid_t uid = getuid();
507 if (uid != GLOBAL_USER)
508 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
509 request->pkg_name, request->mode,
510 request_event_handler, request, uid);
512 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
513 request->pkg_name, request->mode,
514 request_event_handler, request);
516 if (request_id == PKGMGR_R_EINVAL)
517 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
518 else if (request_id == PKGMGR_R_ENOPKG)
519 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
520 else if (request_id == PKGMGR_R_ENOMEM)
521 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
522 else if (request_id == PKGMGR_R_EIO)
523 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
524 else if (request_id == PKGMGR_R_EPRIV)
525 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
526 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
527 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
531 return PACKAGE_MANAGER_ERROR_NONE;
534 API int package_manager_request_move(package_manager_request_h request,
535 const char *name, package_manager_move_type_e move_type)
539 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
540 if (retval != PACKAGE_MANAGER_ERROR_NONE)
543 if (package_manager_client_validate_handle(request))
544 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
547 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
550 request->pkg_name = name;
551 uid_t uid = getuid();
552 if (uid != GLOBAL_USER)
553 ret = pkgmgr_client_usr_move(request->pc, request->pkg_type, request->pkg_name,
554 move_type, request->mode, uid);
556 ret = pkgmgr_client_move(request->pc, request->pkg_type, request->pkg_name,
557 move_type, request->mode);
558 if (ret == PKGMGR_R_EINVAL)
559 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
560 else if (ret == PKGMGR_R_ENOPKG)
561 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
562 else if (ret == PKGMGR_R_ENOMEM)
563 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
564 else if (ret == PKGMGR_R_EIO)
565 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
566 else if (ret == PKGMGR_R_EPRIV)
567 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
568 else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR)
569 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
571 return PACKAGE_MANAGER_ERROR_NONE;
574 API int package_manager_create(package_manager_h * manager)
578 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
579 if (retval != PACKAGE_MANAGER_ERROR_NONE)
582 struct package_manager_s *package_manager = NULL;
584 if (manager == NULL) {
586 package_manager_error
587 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
591 package_manager = calloc(1, sizeof(struct package_manager_s));
592 if (package_manager == NULL) {
594 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
596 "failed to create a package_manager handle");
599 package_manager->ctype = PC_LISTENING;
600 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
601 if (package_manager->pc == NULL) {
602 free(package_manager);
604 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
606 "failed to create a package_manager client");
609 package_manager->handle_id = package_manager_new_id();
611 *manager = package_manager;
613 return PACKAGE_MANAGER_ERROR_NONE;
616 static int package_manager_validate_handle(package_manager_h manager)
618 if (manager == NULL || manager->pc == NULL)
619 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
621 return PACKAGE_MANAGER_ERROR_NONE;
624 API int package_manager_destroy(package_manager_h manager)
626 if (package_manager_validate_handle(manager)) {
628 package_manager_error
629 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
633 pkgmgr_client_free(manager->pc);
637 return PACKAGE_MANAGER_ERROR_NONE;
640 static int __add_event(event_info ** head, int req_id,
641 package_manager_event_type_e event_type,
642 package_manager_event_state_e event_state)
644 event_info *evt_info;
646 evt_info = (event_info *) calloc(1, sizeof(event_info));
647 if (evt_info == NULL) {
648 _LOGD("calloc failed");
651 evt_info->req_id = req_id;
652 evt_info->event_type = event_type;
653 evt_info->next = NULL;
660 static int __find_event(event_info ** head, int req_id,
661 package_manager_event_type_e * event_type,
662 package_manager_event_state_e * event_state)
669 _LOGE("tmp is NULL");
673 *event_type = tmp->event_type;
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;
702 /* App Event Listening Policy:
703 * +----------------+------------+---------------+------------------+
704 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
705 * +----------------+------------+---------------+------------------+
706 * |User Process App| Grant | Grant | Deny |
707 * +----------------+------------+---------------+------------------+
708 * |Platform module | Grant | Grant | Grant |
709 * +----------------+------------+---------------+------------------+
710 * UID assignment policy:
711 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
713 #define REGULAR_USER 5000
714 static int __validate_event_signal(uid_t target_uid)
716 uid_t self = getuid();
718 if (self == target_uid)
721 if (self < REGULAR_USER)
727 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
728 const char *pkg_name, const char *key,
729 const char *val, const void *pmsg, void *data)
732 package_manager_event_type_e event_type = -1;
733 package_manager_event_state_e event_state = -1;
735 _LOGD("global_event_handler is called");
737 package_manager_h manager = data;
739 if (__validate_event_signal(target_uid))
740 return PACKAGE_MANAGER_ERROR_NONE;
742 if (strcasecmp(key, "start") == 0) {
743 ret = package_manager_get_event_type(val, &event_type);
744 if (ret != PACKAGE_MANAGER_ERROR_NONE)
745 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
747 __add_event(&(manager->head), req_id, event_type,
748 PACKAGE_MANAGER_EVENT_STATE_STARTED);
750 if (manager->event_cb && getuid() == target_uid)
751 manager->event_cb(pkg_type, pkg_name,
753 PACKAGE_MANAGER_EVENT_STATE_STARTED,
754 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
755 if (manager->global_event_cb)
756 manager->global_event_cb(target_uid, pkg_type, pkg_name,
758 PACKAGE_MANAGER_EVENT_STATE_STARTED,
759 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
761 } else if (strcasecmp(key, "install_percent") == 0
762 || strcasecmp(key, "progress_percent") == 0) {
764 (&(manager->head), req_id, &event_type,
765 &event_state) == 0) {
766 __update_event(&(manager->head), req_id,
768 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
769 if (manager->event_cb && getuid() == target_uid)
770 manager->event_cb(pkg_type, pkg_name,
772 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
774 PACKAGE_MANAGER_ERROR_NONE,
776 if (manager->global_event_cb)
777 manager->global_event_cb(target_uid, pkg_type, pkg_name,
779 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
781 PACKAGE_MANAGER_ERROR_NONE,
785 } else if (strcasecmp(key, "error") == 0) {
786 if (strcasecmp(key, "0") != 0) {
788 (&(manager->head), req_id, &event_type,
789 &event_state) == 0) {
790 __update_event(&(manager->head), req_id,
792 PACKAGE_MANAGER_EVENT_STATE_FAILED);
795 if (manager->event_cb && getuid() == target_uid)
796 manager->event_cb(pkg_type,
797 pkg_name, event_type,
798 PACKAGE_MANAGER_EVENT_STATE_FAILED,
800 PACKAGE_MANAGER_ERROR_NONE,
802 if (manager->global_event_cb)
803 manager->global_event_cb(target_uid, pkg_type,
804 pkg_name, event_type,
805 PACKAGE_MANAGER_EVENT_STATE_FAILED,
807 PACKAGE_MANAGER_ERROR_NONE,
810 } else if (strcasecmp(key, "end") == 0) {
812 (&(manager->head), req_id, &event_type,
813 &event_state) == 0) {
814 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
815 if (manager->event_cb && getuid() == target_uid)
816 manager->event_cb(pkg_type,
817 pkg_name, event_type,
818 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
820 PACKAGE_MANAGER_ERROR_NONE,
822 if (manager->global_event_cb)
823 manager->global_event_cb(target_uid, pkg_type,
824 pkg_name, event_type,
825 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
827 PACKAGE_MANAGER_ERROR_NONE,
831 if (strcasecmp(key, "ok") != 0) {
832 if (manager->event_cb && getuid() == target_uid)
833 manager->event_cb(pkg_type,
834 pkg_name, event_type,
835 PACKAGE_MANAGER_EVENT_STATE_FAILED,
837 PACKAGE_MANAGER_ERROR_NONE,
839 if (manager->global_event_cb)
840 manager->global_event_cb(target_uid, pkg_type,
841 pkg_name, event_type,
842 PACKAGE_MANAGER_EVENT_STATE_FAILED,
844 PACKAGE_MANAGER_ERROR_NONE,
850 return PACKAGE_MANAGER_ERROR_NONE;
853 API int package_manager_set_event_status(package_manager_h manager, int status_type)
858 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
860 retval = pkgmgrinfo_client_set_status_type(manager->pc, status_type);
863 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
865 return PACKAGE_MANAGER_ERROR_NONE;
868 API int package_manager_set_event_cb(package_manager_h manager,
869 package_manager_event_cb callback,
874 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
875 if (retval != PACKAGE_MANAGER_ERROR_NONE)
878 if (package_manager_validate_handle(manager)) {
880 package_manager_error
881 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
885 manager->event_cb = callback;
886 manager->user_data = user_data;
888 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
890 return PACKAGE_MANAGER_ERROR_NONE;
893 API int package_manager_unset_event_cb(package_manager_h manager)
895 if (manager == NULL) {
897 package_manager_error
898 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
902 /* TODO: Please implement this function. */
903 return PACKAGE_MANAGER_ERROR_NONE;
906 API int package_manager_set_global_event_cb(package_manager_h manager,
907 package_manager_global_event_cb callback,
912 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
913 if (retval != PACKAGE_MANAGER_ERROR_NONE)
916 if (package_manager_validate_handle(manager)) {
918 package_manager_error
919 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
923 if (getuid() >= REGULAR_USER) {
924 _LOGE("Regular user is not allowed for this api");
925 return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
928 manager->global_event_cb = callback;
929 manager->user_data = user_data;
931 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
933 return PACKAGE_MANAGER_ERROR_NONE;
936 API int package_manager_unset_global_event_cb(package_manager_h manager)
938 if (manager == NULL) {
940 package_manager_error
941 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
945 /* TODO: Please implement this function. */
946 return PACKAGE_MANAGER_ERROR_NONE;
949 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
951 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
954 char *pkg_id_dup = NULL;
956 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
957 if (retval != PACKAGE_MANAGER_ERROR_NONE)
960 if (app_id == NULL || package_id == NULL)
961 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
963 uid_t uid = getuid();
964 if (uid != GLOBAL_USER) {
965 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
966 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
968 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
969 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
971 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
972 if (retval != PMINFO_R_OK)
973 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
975 pkg_id_dup = strdup(pkg_id);
976 if (pkg_id_dup == NULL) {
977 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
978 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
981 *package_id = pkg_id_dup;
983 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
985 return PACKAGE_MANAGER_ERROR_NONE;
988 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
991 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
992 if (retval != PACKAGE_MANAGER_ERROR_NONE)
995 retval = package_info_get_package_info(package_id, package_info);
997 if (retval != PACKAGE_MANAGER_ERROR_NONE)
998 return package_manager_error(retval, __FUNCTION__, NULL);
1000 return PACKAGE_MANAGER_ERROR_NONE;
1003 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
1008 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1009 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1012 retval = package_info_foreach_package_info(callback, user_data);
1014 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1015 return package_manager_error(retval, __FUNCTION__, NULL);
1017 return PACKAGE_MANAGER_ERROR_NONE;
1020 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)
1022 pkgmgrinfo_cert_compare_result_type_e result;
1023 uid_t uid = getuid();
1025 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
1026 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1027 if (uid != GLOBAL_USER) {
1028 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
1029 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1031 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1032 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1034 *compare_result = (package_manager_compare_result_type_e)result;
1036 return PACKAGE_MANAGER_ERROR_NONE;
1039 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)
1041 pkgmgrinfo_cert_compare_result_type_e result;
1042 uid_t uid = getuid();
1044 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1045 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1046 if (uid != GLOBAL_USER) {
1047 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1048 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1050 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1051 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1054 *compare_result = (package_manager_compare_result_type_e)result;
1056 return PACKAGE_MANAGER_ERROR_NONE;
1059 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1063 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1064 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1067 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1068 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1070 char *pkg_id = NULL;
1071 bool is_preload = 0;
1072 uid_t uid = getuid();
1073 if (uid != GLOBAL_USER) {
1074 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1075 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1077 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1078 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1081 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1082 if (retval != PMINFO_R_OK) {
1083 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1084 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1086 if (uid != GLOBAL_USER) {
1087 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1088 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1089 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1090 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1093 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1094 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1095 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1096 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1099 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK) {
1100 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1101 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1102 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1110 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1111 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1113 return PACKAGE_MANAGER_ERROR_NONE;
1116 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1120 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1121 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1124 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1125 pkgmgrinfo_permission_type permission = 0;
1126 uid_t uid = getuid();
1127 if (uid != GLOBAL_USER) {
1128 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1129 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1131 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1132 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1134 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1135 if (retval != PMINFO_R_OK)
1136 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1138 if (permission == PMINFO_PERMISSION_NORMAL)
1139 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1140 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1141 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1142 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1143 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1145 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1147 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1148 return PACKAGE_MANAGER_ERROR_NONE;
1151 API int package_manager_clear_cache_dir(const char *package_id)
1155 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1156 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1159 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1160 if (res == PKGMGR_R_EINVAL) {
1161 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1162 } else if (res == PKGMGR_R_ENOPKG) {
1163 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1164 } else if (res == PKGMGR_R_ENOMEM) {
1165 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1166 } else if (res == PKGMGR_R_EIO) {
1167 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1168 } else if (res == PKGMGR_R_EPRIV) {
1169 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1170 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1171 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1172 } else if (res != PKGMGR_R_OK) {
1173 _LOGE("Unexpected error");
1174 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1177 return PACKAGE_MANAGER_ERROR_NONE;
1180 API int package_manager_clear_all_cache_dir(void)
1184 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1185 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1188 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1191 static void __free_client(gpointer data)
1193 pkgmgr_client *pc = (pkgmgr_client *)data;
1194 pkgmgr_client_free(pc);
1197 static void __initialize_cb_table(void)
1199 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, __free_client, NULL);
1202 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1204 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1205 if (callback == NULL) {
1206 _LOGE("callback is null.");
1207 g_hash_table_remove(__cb_table, pc);
1211 package_size_info_t size_info;
1212 size_info.data_size = result->data_size;
1213 size_info.cache_size = result->cache_size;
1214 size_info.app_size = result->app_size;
1215 size_info.external_data_size = result->ext_data_size;
1216 size_info.external_cache_size = result->ext_cache_size;
1217 size_info.external_app_size = result->ext_app_size;
1219 callback(pkgid, (package_size_info_h)&size_info, user_data);
1221 g_hash_table_remove(__cb_table, pc);
1224 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1226 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1227 if (callback == NULL) {
1228 _LOGE("callback is null.");
1229 g_hash_table_remove(__cb_table, pc);
1233 package_size_info_t size_info;
1234 size_info.data_size = result->data_size;
1235 size_info.cache_size = result->cache_size;
1236 size_info.app_size = result->app_size;
1237 size_info.external_data_size = result->ext_data_size;
1238 size_info.external_cache_size = result->ext_cache_size;
1239 size_info.external_app_size = result->ext_app_size;
1241 callback((package_size_info_h)&size_info, user_data);
1243 g_hash_table_remove(__cb_table, pc);
1246 static int _get_pkg_size_info(const char *package_id, void *callback, void *user_data)
1248 if (package_id == NULL || callback == NULL)
1249 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1251 if (__cb_table == NULL)
1252 __initialize_cb_table();
1254 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1256 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1259 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1260 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1262 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1264 if (res == PKGMGR_R_EINVAL) {
1265 pkgmgr_client_free(pc);
1266 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1267 } else if (res == PKGMGR_R_ENOPKG) {
1268 pkgmgr_client_free(pc);
1269 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1270 } else if (res == PKGMGR_R_ENOMEM) {
1271 pkgmgr_client_free(pc);
1272 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1273 } else if (res == PKGMGR_R_EIO) {
1274 pkgmgr_client_free(pc);
1275 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1276 } else if (res == PKGMGR_R_EPRIV) {
1277 pkgmgr_client_free(pc);
1278 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1279 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1280 pkgmgr_client_free(pc);
1281 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1282 } else if (res != PKGMGR_R_OK) {
1283 _LOGE("Unexpected error");
1284 pkgmgr_client_free(pc);
1285 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1288 g_hash_table_insert(__cb_table, pc, callback);
1290 _LOGD("Successful");
1291 return PACKAGE_MANAGER_ERROR_NONE;
1294 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1296 return _get_pkg_size_info(package_id, (void *)callback, user_data);
1299 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1301 return _get_pkg_size_info(PKG_SIZE_INFO_TOTAL, (void *)callback, user_data);
1304 API int package_manager_filter_create(package_manager_filter_h *handle)
1307 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1309 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1310 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1313 if (handle == NULL) {
1315 package_manager_error
1316 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1320 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1321 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1322 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1324 *handle = pkgmgr_filter;
1326 return PACKAGE_MANAGER_ERROR_NONE;
1329 API int package_manager_filter_destroy(package_manager_filter_h handle)
1333 if (handle == NULL) {
1335 package_manager_error
1336 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1340 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1341 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1342 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1344 return PACKAGE_MANAGER_ERROR_NONE;
1347 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1348 const char *property, const bool value)
1352 if ((handle == NULL) || (property == NULL)) {
1354 package_manager_error
1355 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1359 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1360 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1361 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1363 return PACKAGE_MANAGER_ERROR_NONE;
1366 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1370 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1371 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1374 if ((handle == NULL) || (count == NULL))
1375 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1377 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1379 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1381 return PACKAGE_MANAGER_ERROR_NONE;
1384 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1385 package_manager_package_info_cb callback, void *user_data)
1389 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1390 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1393 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1395 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1396 return package_manager_error(retval, __FUNCTION__, NULL);
1398 return PACKAGE_MANAGER_ERROR_NONE;
1401 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1404 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1406 package_size_info_t *size_info = (package_size_info_t *)handle;
1408 *data_size = (long long)size_info->data_size;
1409 return PACKAGE_MANAGER_ERROR_NONE;
1412 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1415 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1417 package_size_info_t *size_info = (package_size_info_t *)handle;
1419 *cache_size = size_info->cache_size;
1420 return PACKAGE_MANAGER_ERROR_NONE;
1423 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1426 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1428 package_size_info_t *size_info = (package_size_info_t *)handle;
1429 *app_size = size_info->app_size;
1430 return PACKAGE_MANAGER_ERROR_NONE;
1433 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1436 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1438 package_size_info_t *size_info = (package_size_info_t *)handle;
1439 *ext_data_size = size_info->external_data_size;
1440 return PACKAGE_MANAGER_ERROR_NONE;
1443 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1446 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1448 package_size_info_t *size_info = (package_size_info_t *)handle;
1449 *ext_cache_size = size_info->external_cache_size;
1450 return PACKAGE_MANAGER_ERROR_NONE;
1453 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1456 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1458 package_size_info_t *size_info = (package_size_info_t *)handle;
1459 *ext_app_size = size_info->external_app_size;
1460 return PACKAGE_MANAGER_ERROR_NONE;