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-info.h>
24 #include <tzplatform_config.h>
26 #include "package_manager.h"
27 #include "package_manager_internal.h"
29 static GHashTable *__cb_table = NULL;
31 #define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
32 typedef struct _event_info {
34 package_manager_event_type_e event_type;
35 package_manager_event_state_e event_state;
36 struct _event_info *next;
39 struct package_manager_s {
45 package_manager_event_cb event_cb;
46 package_manager_global_event_cb global_event_cb;
50 struct package_manager_request_s {
59 package_manager_request_event_cb event_cb;
63 struct package_manager_filter_s {
64 pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
67 static int package_manager_request_new_id()
69 static int request_handle_id = 0;
70 return request_handle_id++;
73 static int package_manager_new_id()
75 static int manager_handle_id = 0;
76 return manager_handle_id++;
79 API int package_manager_request_create(package_manager_request_h *request)
81 struct package_manager_request_s *package_manager_request;
83 if (request == NULL) {
86 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
90 package_manager_request =
91 calloc(1, sizeof(struct package_manager_request_s));
92 if (package_manager_request == NULL) {
94 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
96 "failed to create a package_manager handle");
99 package_manager_request->ctype = PC_REQUEST;
100 package_manager_request->pc = pkgmgr_client_new(PC_REQUEST);
101 if (package_manager_request->pc == NULL) {
102 free(package_manager_request);
104 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
106 "failed to create a package_manager client");
109 package_manager_request->handle_id = package_manager_request_new_id();
111 *request = package_manager_request;
113 return PACKAGE_MANAGER_ERROR_NONE;
116 static int package_manager_client_validate_handle(package_manager_request_h
119 if (request == NULL || request->pc == NULL) {
120 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
123 return PACKAGE_MANAGER_ERROR_NONE;
126 API int package_manager_request_destroy(package_manager_request_h request)
128 if (package_manager_client_validate_handle(request)) {
130 package_manager_error
131 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
135 pkgmgr_client_free(request->pc);
139 return PACKAGE_MANAGER_ERROR_NONE;
142 API int package_manager_request_set_event_cb(package_manager_request_h request,
143 package_manager_request_event_cb
144 callback, void *user_data)
146 if (package_manager_client_validate_handle(request)) {
148 package_manager_error
149 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
153 request->event_cb = callback;
154 request->user_data = user_data;
156 return PACKAGE_MANAGER_ERROR_NONE;
159 API int package_manager_request_unset_event_cb(package_manager_request_h request)
161 // TODO: Please implement this function.
162 if (package_manager_client_validate_handle(request)) {
163 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
166 return PACKAGE_MANAGER_ERROR_NONE;
170 API int package_manager_request_set_type(package_manager_request_h request,
171 const char *pkg_type)
173 if (package_manager_client_validate_handle(request)) {
175 package_manager_error
176 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
180 request->pkg_type = pkg_type;
182 return PACKAGE_MANAGER_ERROR_NONE;
185 API int package_manager_request_set_mode(package_manager_request_h request,
186 package_manager_request_mode_e mode)
188 if (package_manager_client_validate_handle(request)) {
190 package_manager_error
191 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
195 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
196 request->mode = PM_QUIET;
198 request->mode = PM_DEFAULT;
200 return PACKAGE_MANAGER_ERROR_NONE;
203 static int package_manager_get_event_type(const char *key,
204 package_manager_event_type_e *
208 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
210 if (strcasecmp(key, "install") == 0)
211 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
212 else if (strcasecmp(key, "uninstall") == 0)
213 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
214 else if (strcasecmp(key, "update") == 0)
215 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
217 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
219 return PACKAGE_MANAGER_ERROR_NONE;
222 static int __add_event_info(event_info ** head, int req_id,
223 package_manager_event_type_e event_type,
224 package_manager_event_state_e event_state)
226 event_info *evt_info;
230 evt_info = (event_info *) calloc(1, sizeof(event_info));
231 if (evt_info == NULL) {
232 _LOGD("calloc failed");
235 evt_info->req_id = req_id;
236 evt_info->event_type = event_type;
237 evt_info->next = NULL;
242 current = prev = *head;
245 current = current->next;
248 prev->next = evt_info;
254 static int __find_event_info(event_info ** head, int req_id,
255 package_manager_event_type_e * event_type,
256 package_manager_event_state_e * event_state)
263 _LOGE("tmp is NULL");
267 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
270 if (tmp->req_id == req_id) {
271 *event_type = tmp->event_type;
279 static int __update_event_info(event_info ** head, int req_id,
280 package_manager_event_type_e event_type,
281 package_manager_event_state_e event_state)
283 package_manager_event_type_e evt_type;
284 package_manager_event_state_e evt_state;
287 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
288 __add_event_info(head, req_id, event_type, event_state);
293 _LOGE("tmp is NULL");
298 if (tmp->req_id == req_id) {
299 tmp->event_type = event_type;
310 static int __remove_event_info(event_info **head request, int req_id)
321 if (current->next->req_id == req_id) {
323 current->next = current->next->next;
335 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
336 const char *pkg_name, const char *key,
337 const char *val, const void *pmsg, void *data)
340 package_manager_event_type_e event_type = -1;
341 package_manager_event_state_e event_state = -1;
343 _LOGD("request_event_handler is called");
345 package_manager_request_h request = data;
347 if (strcasecmp(key, "start") == 0) {
348 ret = package_manager_get_event_type(val, &event_type);
349 if (ret != PACKAGE_MANAGER_ERROR_NONE)
350 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
352 __add_event_info(&(request->head), req_id, event_type,
353 PACKAGE_MANAGER_EVENT_STATE_STARTED);
355 if (request->event_cb)
356 request->event_cb(req_id, pkg_type, pkg_name,
358 PACKAGE_MANAGER_EVENT_STATE_STARTED,
359 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
361 } else if (strcasecmp(key, "install_percent") == 0
362 || strcasecmp(key, "progress_percent") == 0) {
363 if (__find_event_info
364 (&(request->head), req_id, &event_type,
365 &event_state) == 0) {
366 __update_event_info(&(request->head), req_id,
368 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
369 if (request->event_cb)
370 request->event_cb(req_id, pkg_type, pkg_name,
372 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
374 PACKAGE_MANAGER_ERROR_NONE,
378 } else if (strcasecmp(key, "error") == 0) {
379 if (strcasecmp(key, "0") != 0) {
380 if (__find_event_info
381 (&(request->head), req_id, &event_type,
382 &event_state) == 0) {
383 __update_event_info(&(request->head), req_id,
385 PACKAGE_MANAGER_EVENT_STATE_FAILED);
388 if (request->event_cb)
389 request->event_cb(req_id, pkg_type,
390 pkg_name, event_type,
391 PACKAGE_MANAGER_EVENT_STATE_FAILED,
393 PACKAGE_MANAGER_ERROR_NONE,
397 } else if (strcasecmp(key, "end") == 0) {
398 if (__find_event_info
399 (&(request->head), req_id, &event_type,
400 &event_state) == 0) {
401 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
402 if (request->event_cb)
403 request->event_cb(req_id, pkg_type,
404 pkg_name, event_type,
405 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
407 PACKAGE_MANAGER_ERROR_NONE,
411 if (strcasecmp(key, "ok") != 0)
412 if (request->event_cb)
413 request->event_cb(req_id, pkg_type,
414 pkg_name, event_type,
415 PACKAGE_MANAGER_EVENT_STATE_FAILED,
417 PACKAGE_MANAGER_ERROR_NONE,
422 return PACKAGE_MANAGER_ERROR_NONE;
425 API int package_manager_request_install(package_manager_request_h request,
426 const char *path, int *id)
428 if (package_manager_client_validate_handle(request)) {
429 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
432 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
436 request->pkg_path = path;
437 uid_t uid = getuid();
438 if (uid != GLOBAL_USER)
439 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
440 request->pkg_path, NULL,
441 request->mode, request_event_handler,
445 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
446 request->pkg_path, NULL,
447 request->mode, request_event_handler,
450 if (request_id == PKGMGR_R_EINVAL) {
451 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
452 } else if (request_id == PKGMGR_R_ENOPKG) {
453 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
454 } else if (request_id == PKGMGR_R_ENOMEM) {
455 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
456 } else if (request_id == PKGMGR_R_EIO) {
457 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
458 } else if (request_id == PKGMGR_R_EPRIV) {
459 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
460 } else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR) {
461 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
462 } else if (request_id != PKGMGR_R_OK) {
463 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, "Unexpected error");
468 return PACKAGE_MANAGER_ERROR_NONE;
471 API int package_manager_request_uninstall(package_manager_request_h request,
472 const char *name, int *id)
474 if (package_manager_client_validate_handle(request)) {
475 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
478 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
482 request->pkg_name = name;
483 uid_t uid = getuid();
484 if (uid != GLOBAL_USER)
485 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
486 request->pkg_name, request->mode,
487 request_event_handler, request, uid);
489 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
490 request->pkg_name, request->mode,
491 request_event_handler, request);
493 if (request_id == PKGMGR_R_EINVAL) {
494 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
495 } else if (request_id == PKGMGR_R_ENOPKG) {
496 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
497 } else if (request_id == PKGMGR_R_ENOMEM) {
498 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
499 } else if (request_id == PKGMGR_R_EIO) {
500 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
501 } else if (request_id == PKGMGR_R_EPRIV) {
502 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
503 } else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR) {
504 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
505 } else if (request_id != PKGMGR_R_OK) {
506 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, "Unexpected error");
511 return PACKAGE_MANAGER_ERROR_NONE;
514 API int package_manager_request_move(package_manager_request_h request,
515 const char *name, package_manager_move_type_e move_type)
517 if (package_manager_client_validate_handle(request)) {
518 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
521 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
525 request->pkg_name = name;
526 uid_t uid = getuid();
527 if (uid != GLOBAL_USER)
528 ret = pkgmgr_client_usr_move(request->pc, request->pkg_type, request->pkg_name,
529 move_type, request->mode, uid);
531 ret = pkgmgr_client_move(request->pc, request->pkg_type, request->pkg_name,
532 move_type, request->mode);
533 if (ret == PKGMGR_R_EINVAL) {
534 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
535 } else if (ret == PKGMGR_R_ENOPKG) {
536 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
537 } else if (ret == PKGMGR_R_ENOMEM) {
538 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
539 } else if (ret == PKGMGR_R_EIO) {
540 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
541 } else if (ret == PKGMGR_R_EPRIV) {
542 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
543 } else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR) {
544 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
545 } else if (ret != PKGMGR_R_OK) {
546 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, "Unexpected error");
550 return PACKAGE_MANAGER_ERROR_NONE;
553 API int package_manager_create(package_manager_h * manager)
555 struct package_manager_s *package_manager = NULL;
557 if (manager == NULL) {
559 package_manager_error
560 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
564 package_manager = calloc(1, sizeof(struct package_manager_s));
565 if (package_manager == NULL) {
567 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
569 "failed to create a package_manager handle");
572 package_manager->ctype = PC_LISTENING;
573 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
574 if (package_manager->pc == NULL) {
575 free(package_manager);
577 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
579 "failed to create a package_manager client");
582 package_manager->handle_id = package_manager_new_id();
584 *manager = package_manager;
586 return PACKAGE_MANAGER_ERROR_NONE;
589 static int package_manager_validate_handle(package_manager_h manager)
591 if (manager == NULL || manager->pc == NULL) {
592 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
595 return PACKAGE_MANAGER_ERROR_NONE;
598 API int package_manager_destroy(package_manager_h manager)
600 if (package_manager_validate_handle(manager)) {
602 package_manager_error
603 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
607 pkgmgr_client_free(manager->pc);
611 return PACKAGE_MANAGER_ERROR_NONE;
614 static int __add_event(event_info ** head, int req_id,
615 package_manager_event_type_e event_type,
616 package_manager_event_state_e event_state)
618 event_info *evt_info;
620 evt_info = (event_info *) calloc(1, sizeof(event_info));
621 if (evt_info == NULL) {
622 _LOGD("calloc failed");
625 evt_info->req_id = req_id;
626 evt_info->event_type = event_type;
627 evt_info->next = NULL;
634 static int __find_event(event_info ** head, int req_id,
635 package_manager_event_type_e * event_type,
636 package_manager_event_state_e * event_state)
643 _LOGE("tmp is NULL");
647 *event_type = tmp->event_type;
651 static int __update_event(event_info ** head, int req_id,
652 package_manager_event_type_e event_type,
653 package_manager_event_state_e event_state)
655 package_manager_event_type_e evt_type;
656 package_manager_event_state_e evt_state;
659 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
660 __add_event_info(head, req_id, event_type, event_state);
665 _LOGE("tmp is NULL");
669 tmp->event_type = event_type;
676 /* App Event Listening Policy:
677 * +----------------+------------+---------------+------------------+
678 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
679 * +----------------+------------+---------------+------------------+
680 * |User Process App| Grant | Grant | Deny |
681 * +----------------+------------+---------------+------------------+
682 * |Platform module | Grant | Grant | Grant |
683 * +----------------+------------+---------------+------------------+
684 * UID assignment policy:
685 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
687 #define REGULAR_USER 5000
688 static int __validate_event_signal(uid_t target_uid)
690 uid_t self = getuid();
692 if (self == target_uid)
695 if (self < REGULAR_USER)
701 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
702 const char *pkg_name, const char *key,
703 const char *val, const void *pmsg, void *data)
706 package_manager_event_type_e event_type = -1;
707 package_manager_event_state_e event_state = -1;
709 _LOGD("global_event_handler is called");
711 package_manager_h manager = data;
713 if (__validate_event_signal(target_uid))
714 return PACKAGE_MANAGER_ERROR_NONE;
716 if (strcasecmp(key, "start") == 0) {
717 ret = package_manager_get_event_type(val, &event_type);
718 if (ret != PACKAGE_MANAGER_ERROR_NONE)
719 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
721 __add_event(&(manager->head), req_id, event_type,
722 PACKAGE_MANAGER_EVENT_STATE_STARTED);
724 if (manager->event_cb && getuid() == target_uid)
725 manager->event_cb(pkg_type, pkg_name,
727 PACKAGE_MANAGER_EVENT_STATE_STARTED,
728 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
729 if (manager->global_event_cb)
730 manager->global_event_cb(target_uid, pkg_type, pkg_name,
732 PACKAGE_MANAGER_EVENT_STATE_STARTED,
733 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
735 } else if (strcasecmp(key, "install_percent") == 0
736 || strcasecmp(key, "progress_percent") == 0) {
738 (&(manager->head), req_id, &event_type,
739 &event_state) == 0) {
740 __update_event(&(manager->head), req_id,
742 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
743 if (manager->event_cb && getuid() == target_uid)
744 manager->event_cb(pkg_type, pkg_name,
746 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
748 PACKAGE_MANAGER_ERROR_NONE,
750 if (manager->global_event_cb)
751 manager->global_event_cb(target_uid, pkg_type, pkg_name,
753 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
755 PACKAGE_MANAGER_ERROR_NONE,
759 } else if (strcasecmp(key, "error") == 0) {
760 if (strcasecmp(key, "0") != 0) {
762 (&(manager->head), req_id, &event_type,
763 &event_state) == 0) {
764 __update_event(&(manager->head), req_id,
766 PACKAGE_MANAGER_EVENT_STATE_FAILED);
769 if (manager->event_cb && getuid() == target_uid)
770 manager->event_cb(pkg_type,
771 pkg_name, event_type,
772 PACKAGE_MANAGER_EVENT_STATE_FAILED,
774 PACKAGE_MANAGER_ERROR_NONE,
776 if (manager->global_event_cb)
777 manager->global_event_cb(target_uid, pkg_type,
778 pkg_name, event_type,
779 PACKAGE_MANAGER_EVENT_STATE_FAILED,
781 PACKAGE_MANAGER_ERROR_NONE,
784 } else if (strcasecmp(key, "end") == 0) {
786 (&(manager->head), req_id, &event_type,
787 &event_state) == 0) {
788 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
789 if (manager->event_cb && getuid() == target_uid)
790 manager->event_cb(pkg_type,
791 pkg_name, event_type,
792 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
794 PACKAGE_MANAGER_ERROR_NONE,
796 if (manager->global_event_cb)
797 manager->global_event_cb(target_uid, pkg_type,
798 pkg_name, event_type,
799 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
801 PACKAGE_MANAGER_ERROR_NONE,
805 if (strcasecmp(key, "ok") != 0) {
806 if (manager->event_cb && getuid() == target_uid)
807 manager->event_cb(pkg_type,
808 pkg_name, event_type,
809 PACKAGE_MANAGER_EVENT_STATE_FAILED,
811 PACKAGE_MANAGER_ERROR_NONE,
813 if (manager->global_event_cb)
814 manager->global_event_cb(target_uid, pkg_type,
815 pkg_name, event_type,
816 PACKAGE_MANAGER_EVENT_STATE_FAILED,
818 PACKAGE_MANAGER_ERROR_NONE,
824 return PACKAGE_MANAGER_ERROR_NONE;
827 API int package_manager_set_event_status(package_manager_h manager, int status_type)
831 if (manager == NULL){
832 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
835 retval = pkgmgrinfo_client_set_status_type(manager->pc, status_type);
838 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
841 return PACKAGE_MANAGER_ERROR_NONE;
844 API int package_manager_set_event_cb(package_manager_h manager,
845 package_manager_event_cb callback,
848 if (package_manager_validate_handle(manager)) {
850 package_manager_error
851 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
855 manager->event_cb = callback;
856 manager->user_data = user_data;
858 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
860 return PACKAGE_MANAGER_ERROR_NONE;
863 API int package_manager_unset_event_cb(package_manager_h manager)
865 if (manager == NULL) {
867 package_manager_error
868 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
872 // TODO: Please implement this function.
873 return PACKAGE_MANAGER_ERROR_NONE;
876 API int package_manager_set_global_event_cb(package_manager_h manager,
877 package_manager_global_event_cb callback,
880 if (package_manager_validate_handle(manager)) {
882 package_manager_error
883 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
887 if (getuid() >= REGULAR_USER) {
888 _LOGE("Regular user is not allowed for this api");
889 return PACKAGE_MANAGER_ERROR_PERMISSION_DENIED;
892 manager->global_event_cb = callback;
893 manager->user_data = user_data;
895 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
897 return PACKAGE_MANAGER_ERROR_NONE;
900 API int package_manager_unset_global_event_cb(package_manager_h manager)
902 if (manager == NULL) {
904 package_manager_error
905 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
909 // TODO: Please implement this function.
910 return PACKAGE_MANAGER_ERROR_NONE;
913 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
915 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
918 char *pkg_id_dup = NULL;
920 if (app_id == NULL || package_id == NULL)
921 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
923 uid_t uid = getuid();
924 if (uid != GLOBAL_USER)
926 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
927 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
930 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
931 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
933 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
934 if (retval != PMINFO_R_OK)
936 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
939 pkg_id_dup = strdup(pkg_id);
940 if (pkg_id_dup == NULL)
942 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
943 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
946 *package_id = pkg_id_dup;
948 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
950 return PACKAGE_MANAGER_ERROR_NONE;
953 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
957 retval = package_info_get_package_info(package_id, package_info);
959 if (retval != PACKAGE_MANAGER_ERROR_NONE)
960 return package_manager_error(retval, __FUNCTION__, NULL);
962 return PACKAGE_MANAGER_ERROR_NONE;
965 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
970 retval = package_info_foreach_package_info(callback, user_data);
972 if (retval != PACKAGE_MANAGER_ERROR_NONE)
973 return package_manager_error(retval, __FUNCTION__, NULL);
976 return PACKAGE_MANAGER_ERROR_NONE;
980 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)
982 pkgmgrinfo_cert_compare_result_type_e result;
983 uid_t uid = getuid();
985 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
986 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
987 if (uid != GLOBAL_USER)
989 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
990 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
993 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
994 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
996 *compare_result = (package_manager_compare_result_type_e)result;
998 return PACKAGE_MANAGER_ERROR_NONE;
1001 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)
1003 pkgmgrinfo_cert_compare_result_type_e result;
1004 uid_t uid = getuid();
1006 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1007 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1008 if (uid != GLOBAL_USER)
1010 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1011 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1014 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1015 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1018 *compare_result = (package_manager_compare_result_type_e)result;
1020 return PACKAGE_MANAGER_ERROR_NONE;
1023 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1025 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1026 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1029 char *pkg_id = NULL;
1030 bool is_preload = 0;
1031 uid_t uid = getuid();
1032 if (uid != GLOBAL_USER)
1034 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1035 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1038 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1039 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1041 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1042 if (retval != PMINFO_R_OK)
1044 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1045 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1047 if (uid != GLOBAL_USER)
1049 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
1051 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1052 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1053 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1057 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK)
1059 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1060 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1061 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1064 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK)
1066 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1067 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1068 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1076 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1077 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1079 return PACKAGE_MANAGER_ERROR_NONE;
1082 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1085 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo =NULL;
1086 pkgmgrinfo_permission_type permission = 0;
1087 uid_t uid = getuid();
1088 if (uid != GLOBAL_USER)
1090 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1091 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1093 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1094 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1096 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1097 if (retval != PMINFO_R_OK)
1098 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1100 if (permission == PMINFO_PERMISSION_NORMAL)
1101 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1102 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1103 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1104 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1105 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1107 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1109 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1110 return PACKAGE_MANAGER_ERROR_NONE;
1113 API int package_manager_clear_cache_dir(const char *package_id)
1115 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1116 if (res == PKGMGR_R_EINVAL)
1118 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1120 else if (res == PKGMGR_R_ENOPKG)
1122 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1124 else if (res == PKGMGR_R_ENOMEM)
1126 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1128 else if (res == PKGMGR_R_EIO)
1130 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1132 else if (res == PKGMGR_R_EPRIV)
1134 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1136 else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR)
1138 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1140 else if (res != PKGMGR_R_OK)
1142 _LOGE("Unexpected error");
1143 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1146 return PACKAGE_MANAGER_ERROR_NONE;
1149 API int package_manager_clear_all_cache_dir(void)
1151 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1154 static void __initialize_cb_table(void)
1156 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, pkgmgr_client_free, NULL);
1159 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1161 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1162 if (callback == NULL)
1164 _LOGE("callback is null.");
1165 g_hash_table_remove(__cb_table, pc);
1169 package_size_info_t size_info;
1170 size_info.data_size = result->data_size;
1171 size_info.cache_size = result->cache_size;
1172 size_info.app_size = result->app_size;
1173 size_info.external_data_size = result->ext_data_size;
1174 size_info.external_cache_size = result->ext_cache_size;
1175 size_info.external_app_size = result->ext_app_size;
1177 callback(pkgid, &size_info, user_data);
1179 g_hash_table_remove(__cb_table, pc);
1182 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1184 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1185 if (callback == NULL)
1187 _LOGE("callback is null.");
1188 g_hash_table_remove(__cb_table, pc);
1192 package_size_info_t size_info;
1193 size_info.data_size = result->data_size;
1194 size_info.cache_size = result->cache_size;
1195 size_info.app_size = result->app_size;
1196 size_info.external_data_size = result->ext_data_size;
1197 size_info.external_cache_size = result->ext_cache_size;
1198 size_info.external_app_size = result->ext_app_size;
1200 callback(&size_info, user_data);
1202 g_hash_table_remove(__cb_table, pc);
1205 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1207 if (package_id == NULL || callback == NULL)
1209 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1212 if (__cb_table == NULL)
1214 __initialize_cb_table();
1217 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1220 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1224 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1226 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1230 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1233 if (res == PKGMGR_R_EINVAL)
1235 pkgmgr_client_free(pc);
1236 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1238 else if (res == PKGMGR_R_ENOPKG)
1240 pkgmgr_client_free(pc);
1241 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1243 else if (res == PKGMGR_R_ENOMEM)
1245 pkgmgr_client_free(pc);
1246 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1248 else if (res == PKGMGR_R_EIO)
1250 pkgmgr_client_free(pc);
1251 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1253 else if (res == PKGMGR_R_EPRIV)
1255 pkgmgr_client_free(pc);
1256 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1258 else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR)
1260 pkgmgr_client_free(pc);
1261 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1263 else if (res != PKGMGR_R_OK)
1265 _LOGE("Unexpected error");
1266 pkgmgr_client_free(pc);
1267 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1270 g_hash_table_insert(__cb_table, pc, callback);
1272 _LOGD("Successful");
1273 return PACKAGE_MANAGER_ERROR_NONE;
1276 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1278 return package_manager_get_package_size_info(PKG_SIZE_INFO_TOTAL, callback, user_data);
1281 API int package_manager_filter_create(package_manager_filter_h *handle)
1284 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1289 package_manager_error
1290 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1294 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1295 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1297 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1300 *handle = pkgmgr_filter;
1302 return PACKAGE_MANAGER_ERROR_NONE;
1305 API int package_manager_filter_destroy(package_manager_filter_h handle)
1312 package_manager_error
1313 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1317 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1318 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1320 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1323 return PACKAGE_MANAGER_ERROR_NONE;
1326 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1327 const char *property, const bool value)
1331 if ((handle == NULL) || (property == NULL))
1334 package_manager_error
1335 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1339 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1340 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1342 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1345 return PACKAGE_MANAGER_ERROR_NONE;
1348 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1352 if ((handle == NULL) || (count == NULL))
1354 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1357 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1360 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1363 return PACKAGE_MANAGER_ERROR_NONE;
1366 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1367 package_manager_package_info_cb callback, void *user_data)
1371 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1373 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1375 return package_manager_error(retval, __FUNCTION__, NULL);
1379 return PACKAGE_MANAGER_ERROR_NONE;
1383 API int package_manager_drm_generate_license_request(const char *resp_data, char **req_data, char **license_url)
1385 if (resp_data == NULL || req_data == NULL || license_url == NULL) {
1386 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1390 return PACKAGE_MANAGER_ERROR_NONE;
1393 API int package_manager_drm_register_license(const char *resp_data)
1395 if (resp_data == NULL) {
1396 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1400 return PACKAGE_MANAGER_ERROR_NONE;
1403 API int package_manager_drm_decrypt_package(const char *drm_file_path, const char *decrypted_file_path)
1405 if (drm_file_path == NULL || decrypted_file_path == NULL) {
1406 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1410 return PACKAGE_MANAGER_ERROR_NONE;
1413 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1416 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1418 package_size_info_t *size_info = (package_size_info_t *)handle;
1420 *data_size = (long long)size_info->data_size;
1421 return PACKAGE_MANAGER_ERROR_NONE;
1424 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1427 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1429 package_size_info_t *size_info = (package_size_info_t *)handle;
1431 *cache_size = size_info->cache_size;
1432 return PACKAGE_MANAGER_ERROR_NONE;
1435 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1438 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1440 package_size_info_t *size_info = (package_size_info_t *)handle;
1441 *app_size = size_info->app_size;
1442 return PACKAGE_MANAGER_ERROR_NONE;
1445 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1448 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1450 package_size_info_t *size_info = (package_size_info_t *)handle;
1451 *ext_data_size = size_info->external_data_size;
1452 return PACKAGE_MANAGER_ERROR_NONE;
1455 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1458 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1460 package_size_info_t *size_info = (package_size_info_t *)handle;
1461 *ext_cache_size = size_info->external_cache_size;
1462 return PACKAGE_MANAGER_ERROR_NONE;
1465 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_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;
1471 *ext_app_size = size_info->external_app_size;
1472 return PACKAGE_MANAGER_ERROR_NONE;