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 struct package_manager_filter_s {
65 pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
68 static int package_manager_request_new_id()
70 static int request_handle_id = 0;
71 return request_handle_id++;
74 static int package_manager_new_id()
76 static int manager_handle_id = 0;
77 return manager_handle_id++;
80 API int package_manager_request_create(package_manager_request_h *request)
82 struct package_manager_request_s *package_manager_request;
84 if (request == NULL) {
87 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
91 package_manager_request =
92 calloc(1, sizeof(struct package_manager_request_s));
93 if (package_manager_request == NULL) {
95 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
97 "failed to create a package_manager handle");
100 package_manager_request->ctype = PC_REQUEST;
101 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
102 if (package_manager_request->pc == NULL) {
103 free(package_manager_request);
105 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
107 "failed to create a package_manager client");
110 package_manager_request->handle_id = package_manager_request_new_id();
112 *request = package_manager_request;
114 return PACKAGE_MANAGER_ERROR_NONE;
117 static int package_manager_client_validate_handle(package_manager_request_h
120 if (request == NULL || request->pc == NULL) {
121 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
124 return PACKAGE_MANAGER_ERROR_NONE;
127 API int package_manager_request_destroy(package_manager_request_h request)
129 if (package_manager_client_validate_handle(request)) {
131 package_manager_error
132 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
136 pkgmgr_client_free(request->pc);
140 return PACKAGE_MANAGER_ERROR_NONE;
143 API int package_manager_request_set_event_cb(package_manager_request_h request,
144 package_manager_request_event_cb
145 callback, void *user_data)
149 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
150 if (retval != PACKAGE_MANAGER_ERROR_NONE)
153 if (package_manager_client_validate_handle(request)) {
155 package_manager_error
156 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
160 request->event_cb = callback;
161 request->user_data = user_data;
163 return PACKAGE_MANAGER_ERROR_NONE;
166 API int package_manager_request_unset_event_cb(package_manager_request_h request)
168 // TODO: Please implement this function.
169 if (package_manager_client_validate_handle(request)) {
170 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
173 return PACKAGE_MANAGER_ERROR_NONE;
177 API int package_manager_request_set_type(package_manager_request_h request,
178 const char *pkg_type)
180 if (package_manager_client_validate_handle(request)) {
182 package_manager_error
183 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
187 request->pkg_type = pkg_type;
189 return PACKAGE_MANAGER_ERROR_NONE;
192 API int package_manager_request_set_mode(package_manager_request_h request,
193 package_manager_request_mode_e mode)
195 if (package_manager_client_validate_handle(request)) {
197 package_manager_error
198 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
202 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
203 request->mode = PM_QUIET;
205 request->mode = PM_DEFAULT;
207 return PACKAGE_MANAGER_ERROR_NONE;
210 static int package_manager_get_event_type(const char *key,
211 package_manager_event_type_e *
215 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
217 if (strcasecmp(key, PKGMGR_INSTALLER_INSTALL_EVENT_STR) == 0)
218 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
219 else if (strcasecmp(key, PKGMGR_INSTALLER_UNINSTALL_EVENT_STR) == 0)
220 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
221 else if (strcasecmp(key, PKGMGR_INSTALLER_UPGRADE_EVENT_STR) == 0)
222 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
224 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
226 return PACKAGE_MANAGER_ERROR_NONE;
229 static int __add_event_info(event_info ** head, int req_id,
230 package_manager_event_type_e event_type,
231 package_manager_event_state_e event_state)
233 event_info *evt_info;
237 evt_info = (event_info *) calloc(1, sizeof(event_info));
238 if (evt_info == NULL) {
239 _LOGD("calloc failed");
242 evt_info->req_id = req_id;
243 evt_info->event_type = event_type;
244 evt_info->next = NULL;
249 current = prev = *head;
252 current = current->next;
255 prev->next = evt_info;
261 static int __find_event_info(event_info ** head, int req_id,
262 package_manager_event_type_e * event_type,
263 package_manager_event_state_e * event_state)
270 _LOGE("tmp is NULL");
274 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
277 if (tmp->req_id == req_id) {
278 *event_type = tmp->event_type;
286 static int __update_event_info(event_info ** head, int req_id,
287 package_manager_event_type_e event_type,
288 package_manager_event_state_e event_state)
290 package_manager_event_type_e evt_type;
291 package_manager_event_state_e evt_state;
294 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
295 __add_event_info(head, req_id, event_type, event_state);
300 _LOGE("tmp is NULL");
305 if (tmp->req_id == req_id) {
306 tmp->event_type = event_type;
317 static int __remove_event_info(event_info **head request, int req_id)
328 if (current->next->req_id == req_id) {
330 current->next = current->next->next;
342 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
343 const char *pkg_name, const char *key,
344 const char *val, const void *pmsg, void *data)
347 package_manager_event_type_e event_type = -1;
348 package_manager_event_state_e event_state = -1;
350 _LOGD("request_event_handler is called");
352 package_manager_request_h request = data;
354 if (strcasecmp(key, "start") == 0) {
355 ret = package_manager_get_event_type(val, &event_type);
356 if (ret != PACKAGE_MANAGER_ERROR_NONE)
357 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
359 __add_event_info(&(request->head), req_id, event_type,
360 PACKAGE_MANAGER_EVENT_STATE_STARTED);
362 if (request->event_cb)
363 request->event_cb(req_id, pkg_type, pkg_name,
365 PACKAGE_MANAGER_EVENT_STATE_STARTED,
366 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
368 } else if (strcasecmp(key, "install_percent") == 0
369 || strcasecmp(key, "progress_percent") == 0) {
370 if (__find_event_info
371 (&(request->head), req_id, &event_type,
372 &event_state) == 0) {
373 __update_event_info(&(request->head), req_id,
375 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
376 if (request->event_cb)
377 request->event_cb(req_id, pkg_type, pkg_name,
379 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
381 PACKAGE_MANAGER_ERROR_NONE,
385 } else if (strcasecmp(key, "error") == 0) {
386 if (strcasecmp(key, "0") != 0) {
387 if (__find_event_info
388 (&(request->head), req_id, &event_type,
389 &event_state) == 0) {
390 __update_event_info(&(request->head), req_id,
392 PACKAGE_MANAGER_EVENT_STATE_FAILED);
395 if (request->event_cb)
396 request->event_cb(req_id, pkg_type,
397 pkg_name, event_type,
398 PACKAGE_MANAGER_EVENT_STATE_FAILED,
400 PACKAGE_MANAGER_ERROR_NONE,
404 } else if (strcasecmp(key, "end") == 0) {
405 if (__find_event_info
406 (&(request->head), req_id, &event_type,
407 &event_state) == 0) {
408 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
409 if (request->event_cb)
410 request->event_cb(req_id, pkg_type,
411 pkg_name, event_type,
412 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
414 PACKAGE_MANAGER_ERROR_NONE,
418 if (strcasecmp(key, "ok") != 0)
419 if (request->event_cb)
420 request->event_cb(req_id, pkg_type,
421 pkg_name, event_type,
422 PACKAGE_MANAGER_EVENT_STATE_FAILED,
424 PACKAGE_MANAGER_ERROR_NONE,
429 return PACKAGE_MANAGER_ERROR_NONE;
432 API int package_manager_request_install(package_manager_request_h request,
433 const char *path, int *id)
437 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
438 if (retval != PACKAGE_MANAGER_ERROR_NONE)
441 if (package_manager_client_validate_handle(request)) {
442 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
445 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
449 request->pkg_path = path;
450 uid_t uid = getuid();
451 if (uid != GLOBAL_USER)
452 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
453 request->pkg_path, NULL,
454 request->mode, request_event_handler,
458 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
459 request->pkg_path, NULL,
460 request->mode, request_event_handler,
463 if (request_id == PKGMGR_R_EINVAL) {
464 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
465 } else if (request_id == PKGMGR_R_ENOPKG) {
466 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
467 } else if (request_id == PKGMGR_R_ENOMEM) {
468 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
469 } else if (request_id == PKGMGR_R_EIO) {
470 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
471 } else if (request_id == PKGMGR_R_EPRIV) {
472 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
473 } else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR) {
474 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
479 return PACKAGE_MANAGER_ERROR_NONE;
482 API int package_manager_request_uninstall(package_manager_request_h request,
483 const char *name, int *id)
487 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
488 if (retval != PACKAGE_MANAGER_ERROR_NONE)
491 if (package_manager_client_validate_handle(request)) {
492 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
495 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
499 request->pkg_name = name;
500 uid_t uid = getuid();
501 if (uid != GLOBAL_USER)
502 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
503 request->pkg_name, request->mode,
504 request_event_handler, request, uid);
506 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
507 request->pkg_name, request->mode,
508 request_event_handler, request);
510 if (request_id == PKGMGR_R_EINVAL) {
511 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
512 } else if (request_id == PKGMGR_R_ENOPKG) {
513 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
514 } else if (request_id == PKGMGR_R_ENOMEM) {
515 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
516 } else if (request_id == PKGMGR_R_EIO) {
517 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
518 } else if (request_id == PKGMGR_R_EPRIV) {
519 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
520 } else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR) {
521 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
526 return PACKAGE_MANAGER_ERROR_NONE;
529 API int package_manager_request_move(package_manager_request_h request,
530 const char *name, package_manager_move_type_e move_type)
534 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
535 if (retval != PACKAGE_MANAGER_ERROR_NONE)
538 if (package_manager_client_validate_handle(request)) {
539 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
542 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
546 request->pkg_name = name;
547 uid_t uid = getuid();
548 if (uid != GLOBAL_USER)
549 ret = pkgmgr_client_usr_move(request->pc, request->pkg_type, request->pkg_name,
550 move_type, request->mode, uid);
552 ret = pkgmgr_client_move(request->pc, request->pkg_type, request->pkg_name,
553 move_type, request->mode);
554 if (ret == PKGMGR_R_EINVAL) {
555 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
556 } else if (ret == PKGMGR_R_ENOPKG) {
557 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
558 } else if (ret == PKGMGR_R_ENOMEM) {
559 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
560 } else if (ret == PKGMGR_R_EIO) {
561 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
562 } else if (ret == PKGMGR_R_EPRIV) {
563 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
564 } else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR) {
565 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;
620 return PACKAGE_MANAGER_ERROR_NONE;
623 API int package_manager_destroy(package_manager_h manager)
625 if (package_manager_validate_handle(manager)) {
627 package_manager_error
628 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
632 pkgmgr_client_free(manager->pc);
636 return PACKAGE_MANAGER_ERROR_NONE;
639 static int __add_event(event_info ** head, int req_id,
640 package_manager_event_type_e event_type,
641 package_manager_event_state_e event_state)
643 event_info *evt_info;
645 evt_info = (event_info *) calloc(1, sizeof(event_info));
646 if (evt_info == NULL) {
647 _LOGD("calloc failed");
650 evt_info->req_id = req_id;
651 evt_info->event_type = event_type;
652 evt_info->next = NULL;
659 static int __find_event(event_info ** head, int req_id,
660 package_manager_event_type_e * event_type,
661 package_manager_event_state_e * event_state)
668 _LOGE("tmp is NULL");
672 *event_type = tmp->event_type;
676 static int __update_event(event_info ** head, int req_id,
677 package_manager_event_type_e event_type,
678 package_manager_event_state_e event_state)
680 package_manager_event_type_e evt_type;
681 package_manager_event_state_e evt_state;
684 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
685 __add_event_info(head, req_id, event_type, event_state);
690 _LOGE("tmp is NULL");
694 tmp->event_type = event_type;
701 /* App Event Listening Policy:
702 * +----------------+------------+---------------+------------------+
703 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
704 * +----------------+------------+---------------+------------------+
705 * |User Process App| Grant | Grant | Deny |
706 * +----------------+------------+---------------+------------------+
707 * |Platform module | Grant | Grant | Grant |
708 * +----------------+------------+---------------+------------------+
709 * UID assignment policy:
710 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
712 #define REGULAR_USER 5000
713 static int __validate_event_signal(uid_t target_uid)
715 uid_t self = getuid();
717 if (self == target_uid)
720 if (self < REGULAR_USER)
726 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
727 const char *pkg_name, const char *key,
728 const char *val, const void *pmsg, void *data)
731 package_manager_event_type_e event_type = -1;
732 package_manager_event_state_e event_state = -1;
734 _LOGD("global_event_handler is called");
736 package_manager_h manager = data;
738 if (__validate_event_signal(target_uid))
739 return PACKAGE_MANAGER_ERROR_NONE;
741 if (strcasecmp(key, "start") == 0) {
742 ret = package_manager_get_event_type(val, &event_type);
743 if (ret != PACKAGE_MANAGER_ERROR_NONE)
744 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
746 __add_event(&(manager->head), req_id, event_type,
747 PACKAGE_MANAGER_EVENT_STATE_STARTED);
749 if (manager->event_cb && getuid() == target_uid)
750 manager->event_cb(pkg_type, pkg_name,
752 PACKAGE_MANAGER_EVENT_STATE_STARTED,
753 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
754 if (manager->global_event_cb)
755 manager->global_event_cb(target_uid, pkg_type, pkg_name,
757 PACKAGE_MANAGER_EVENT_STATE_STARTED,
758 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
760 } else if (strcasecmp(key, "install_percent") == 0
761 || strcasecmp(key, "progress_percent") == 0) {
763 (&(manager->head), req_id, &event_type,
764 &event_state) == 0) {
765 __update_event(&(manager->head), req_id,
767 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
768 if (manager->event_cb && getuid() == target_uid)
769 manager->event_cb(pkg_type, pkg_name,
771 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
773 PACKAGE_MANAGER_ERROR_NONE,
775 if (manager->global_event_cb)
776 manager->global_event_cb(target_uid, pkg_type, pkg_name,
778 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
780 PACKAGE_MANAGER_ERROR_NONE,
784 } else if (strcasecmp(key, "error") == 0) {
785 if (strcasecmp(key, "0") != 0) {
787 (&(manager->head), req_id, &event_type,
788 &event_state) == 0) {
789 __update_event(&(manager->head), req_id,
791 PACKAGE_MANAGER_EVENT_STATE_FAILED);
794 if (manager->event_cb && getuid() == target_uid)
795 manager->event_cb(pkg_type,
796 pkg_name, event_type,
797 PACKAGE_MANAGER_EVENT_STATE_FAILED,
799 PACKAGE_MANAGER_ERROR_NONE,
801 if (manager->global_event_cb)
802 manager->global_event_cb(target_uid, pkg_type,
803 pkg_name, event_type,
804 PACKAGE_MANAGER_EVENT_STATE_FAILED,
806 PACKAGE_MANAGER_ERROR_NONE,
809 } else if (strcasecmp(key, "end") == 0) {
811 (&(manager->head), req_id, &event_type,
812 &event_state) == 0) {
813 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
814 if (manager->event_cb && getuid() == target_uid)
815 manager->event_cb(pkg_type,
816 pkg_name, event_type,
817 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
819 PACKAGE_MANAGER_ERROR_NONE,
821 if (manager->global_event_cb)
822 manager->global_event_cb(target_uid, pkg_type,
823 pkg_name, event_type,
824 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
826 PACKAGE_MANAGER_ERROR_NONE,
830 if (strcasecmp(key, "ok") != 0) {
831 if (manager->event_cb && getuid() == target_uid)
832 manager->event_cb(pkg_type,
833 pkg_name, event_type,
834 PACKAGE_MANAGER_EVENT_STATE_FAILED,
836 PACKAGE_MANAGER_ERROR_NONE,
838 if (manager->global_event_cb)
839 manager->global_event_cb(target_uid, pkg_type,
840 pkg_name, event_type,
841 PACKAGE_MANAGER_EVENT_STATE_FAILED,
843 PACKAGE_MANAGER_ERROR_NONE,
849 return PACKAGE_MANAGER_ERROR_NONE;
852 API int package_manager_set_event_status(package_manager_h manager, int status_type)
856 if (manager == NULL){
857 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);
866 return PACKAGE_MANAGER_ERROR_NONE;
869 API int package_manager_set_event_cb(package_manager_h manager,
870 package_manager_event_cb callback,
875 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
876 if (retval != PACKAGE_MANAGER_ERROR_NONE)
879 if (package_manager_validate_handle(manager)) {
881 package_manager_error
882 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
886 manager->event_cb = callback;
887 manager->user_data = user_data;
889 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
891 return PACKAGE_MANAGER_ERROR_NONE;
894 API int package_manager_unset_event_cb(package_manager_h manager)
896 if (manager == NULL) {
898 package_manager_error
899 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
903 // TODO: Please implement this function.
904 return PACKAGE_MANAGER_ERROR_NONE;
907 API int package_manager_set_global_event_cb(package_manager_h manager,
908 package_manager_global_event_cb callback,
913 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
914 if (retval != PACKAGE_MANAGER_ERROR_NONE)
917 if (package_manager_validate_handle(manager)) {
919 package_manager_error
920 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
924 if (getuid() >= REGULAR_USER) {
925 _LOGE("Regular user is not allowed for this api");
926 return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
929 manager->global_event_cb = callback;
930 manager->user_data = user_data;
932 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
934 return PACKAGE_MANAGER_ERROR_NONE;
937 API int package_manager_unset_global_event_cb(package_manager_h manager)
939 if (manager == NULL) {
941 package_manager_error
942 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
946 // TODO: Please implement this function.
947 return PACKAGE_MANAGER_ERROR_NONE;
950 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
952 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
955 char *pkg_id_dup = NULL;
957 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
958 if (retval != PACKAGE_MANAGER_ERROR_NONE)
961 if (app_id == NULL || package_id == NULL)
962 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
964 uid_t uid = getuid();
965 if (uid != GLOBAL_USER)
967 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
968 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
971 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
972 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
974 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
975 if (retval != PMINFO_R_OK)
977 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
980 pkg_id_dup = strdup(pkg_id);
981 if (pkg_id_dup == NULL)
983 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
984 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
987 *package_id = pkg_id_dup;
989 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
991 return PACKAGE_MANAGER_ERROR_NONE;
994 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
997 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
998 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1001 retval = package_info_get_package_info(package_id, package_info);
1003 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1004 return package_manager_error(retval, __FUNCTION__, NULL);
1006 return PACKAGE_MANAGER_ERROR_NONE;
1009 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
1014 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1015 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1018 retval = package_info_foreach_package_info(callback, user_data);
1020 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1021 return package_manager_error(retval, __FUNCTION__, NULL);
1024 return PACKAGE_MANAGER_ERROR_NONE;
1028 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)
1030 pkgmgrinfo_cert_compare_result_type_e result;
1031 uid_t uid = getuid();
1033 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
1034 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1035 if (uid != GLOBAL_USER)
1037 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
1038 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1041 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1042 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1044 *compare_result = (package_manager_compare_result_type_e)result;
1046 return PACKAGE_MANAGER_ERROR_NONE;
1049 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)
1051 pkgmgrinfo_cert_compare_result_type_e result;
1052 uid_t uid = getuid();
1054 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1055 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1056 if (uid != GLOBAL_USER)
1058 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1059 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1062 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1063 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1066 *compare_result = (package_manager_compare_result_type_e)result;
1068 return PACKAGE_MANAGER_ERROR_NONE;
1071 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1075 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1076 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1079 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1080 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1082 char *pkg_id = NULL;
1083 bool is_preload = 0;
1084 uid_t uid = getuid();
1085 if (uid != GLOBAL_USER)
1087 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1088 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1091 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1092 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1094 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1095 if (retval != PMINFO_R_OK)
1097 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1098 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1100 if (uid != GLOBAL_USER)
1102 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
1104 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1105 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1106 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1110 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
1112 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1113 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1114 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1117 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK)
1119 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1120 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1121 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1129 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1130 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1132 return PACKAGE_MANAGER_ERROR_NONE;
1135 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1139 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1140 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1143 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo =NULL;
1144 pkgmgrinfo_permission_type permission = 0;
1145 uid_t uid = getuid();
1146 if (uid != GLOBAL_USER)
1148 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1149 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1151 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1152 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1154 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1155 if (retval != PMINFO_R_OK)
1156 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1158 if (permission == PMINFO_PERMISSION_NORMAL)
1159 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1160 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1161 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1162 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1163 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1165 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1167 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1168 return PACKAGE_MANAGER_ERROR_NONE;
1171 API int package_manager_clear_cache_dir(const char *package_id)
1175 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1176 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1179 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1180 if (res == PKGMGR_R_EINVAL)
1182 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1184 else if (res == PKGMGR_R_ENOPKG)
1186 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1188 else if (res == PKGMGR_R_ENOMEM)
1190 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1192 else if (res == PKGMGR_R_EIO)
1194 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1196 else if (res == PKGMGR_R_EPRIV)
1198 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1200 else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR)
1202 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1204 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 __initialize_cb_table(void)
1226 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, pkgmgr_client_free, NULL);
1229 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1231 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1232 if (callback == NULL)
1234 _LOGE("callback is null.");
1235 g_hash_table_remove(__cb_table, pc);
1239 package_size_info_t size_info;
1240 size_info.data_size = result->data_size;
1241 size_info.cache_size = result->cache_size;
1242 size_info.app_size = result->app_size;
1243 size_info.external_data_size = result->ext_data_size;
1244 size_info.external_cache_size = result->ext_cache_size;
1245 size_info.external_app_size = result->ext_app_size;
1247 callback(pkgid, &size_info, user_data);
1249 g_hash_table_remove(__cb_table, pc);
1252 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1254 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1255 if (callback == NULL)
1257 _LOGE("callback is null.");
1258 g_hash_table_remove(__cb_table, pc);
1262 package_size_info_t size_info;
1263 size_info.data_size = result->data_size;
1264 size_info.cache_size = result->cache_size;
1265 size_info.app_size = result->app_size;
1266 size_info.external_data_size = result->ext_data_size;
1267 size_info.external_cache_size = result->ext_cache_size;
1268 size_info.external_app_size = result->ext_app_size;
1270 callback(&size_info, user_data);
1272 g_hash_table_remove(__cb_table, pc);
1275 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1277 if (package_id == NULL || callback == NULL)
1279 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1282 if (__cb_table == NULL)
1284 __initialize_cb_table();
1287 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1290 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1294 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1296 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1300 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1303 if (res == PKGMGR_R_EINVAL)
1305 pkgmgr_client_free(pc);
1306 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1308 else if (res == PKGMGR_R_ENOPKG)
1310 pkgmgr_client_free(pc);
1311 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1313 else if (res == PKGMGR_R_ENOMEM)
1315 pkgmgr_client_free(pc);
1316 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1318 else if (res == PKGMGR_R_EIO)
1320 pkgmgr_client_free(pc);
1321 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1323 else if (res == PKGMGR_R_EPRIV)
1325 pkgmgr_client_free(pc);
1326 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1328 else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR)
1330 pkgmgr_client_free(pc);
1331 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1333 else if (res != PKGMGR_R_OK)
1335 _LOGE("Unexpected error");
1336 pkgmgr_client_free(pc);
1337 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1340 g_hash_table_insert(__cb_table, pc, callback);
1342 _LOGD("Successful");
1343 return PACKAGE_MANAGER_ERROR_NONE;
1346 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1348 return package_manager_get_package_size_info(PKG_SIZE_INFO_TOTAL, callback, user_data);
1351 API int package_manager_filter_create(package_manager_filter_h *handle)
1354 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1356 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1357 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1363 package_manager_error
1364 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1368 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1369 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1371 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1374 *handle = pkgmgr_filter;
1376 return PACKAGE_MANAGER_ERROR_NONE;
1379 API int package_manager_filter_destroy(package_manager_filter_h handle)
1386 package_manager_error
1387 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1391 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1392 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1394 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1397 return PACKAGE_MANAGER_ERROR_NONE;
1400 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1401 const char *property, const bool value)
1405 if ((handle == NULL) || (property == NULL))
1408 package_manager_error
1409 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1413 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1414 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1416 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1419 return PACKAGE_MANAGER_ERROR_NONE;
1422 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1426 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1427 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1430 if ((handle == NULL) || (count == NULL))
1432 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1435 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1438 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1441 return PACKAGE_MANAGER_ERROR_NONE;
1444 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1445 package_manager_package_info_cb callback, void *user_data)
1449 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1450 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1453 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1455 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1457 return package_manager_error(retval, __FUNCTION__, NULL);
1461 return PACKAGE_MANAGER_ERROR_NONE;
1465 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1468 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1470 package_size_info_t *size_info = (package_size_info_t *)handle;
1472 *data_size = (long long)size_info->data_size;
1473 return PACKAGE_MANAGER_ERROR_NONE;
1476 API int package_size_info_get_cache_size(package_size_info_h handle, long long *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;
1483 *cache_size = size_info->cache_size;
1484 return PACKAGE_MANAGER_ERROR_NONE;
1487 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1490 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1492 package_size_info_t *size_info = (package_size_info_t *)handle;
1493 *app_size = size_info->app_size;
1494 return PACKAGE_MANAGER_ERROR_NONE;
1497 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1500 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1502 package_size_info_t *size_info = (package_size_info_t *)handle;
1503 *ext_data_size = size_info->external_data_size;
1504 return PACKAGE_MANAGER_ERROR_NONE;
1507 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1510 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1512 package_size_info_t *size_info = (package_size_info_t *)handle;
1513 *ext_cache_size = size_info->external_cache_size;
1514 return PACKAGE_MANAGER_ERROR_NONE;
1517 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1520 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1522 package_size_info_t *size_info = (package_size_info_t *)handle;
1523 *ext_app_size = size_info->external_app_size;
1524 return PACKAGE_MANAGER_ERROR_NONE;