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;
50 struct package_manager_request_s {
60 package_manager_request_event_cb event_cb;
65 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);
148 free(request->tep_path);
151 return PACKAGE_MANAGER_ERROR_NONE;
154 API int package_manager_request_set_event_cb(package_manager_request_h request,
155 package_manager_request_event_cb
156 callback, void *user_data)
160 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
161 if (retval != PACKAGE_MANAGER_ERROR_NONE)
164 if (package_manager_client_validate_handle(request)) {
166 package_manager_error
167 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
171 request->event_cb = callback;
172 request->user_data = user_data;
174 return PACKAGE_MANAGER_ERROR_NONE;
177 API int package_manager_request_unset_event_cb(package_manager_request_h request)
179 if (package_manager_client_validate_handle(request))
180 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
182 request->event_cb = NULL;
183 request->user_data = NULL;
185 return PACKAGE_MANAGER_ERROR_NONE;
188 API int package_manager_request_set_type(package_manager_request_h request,
189 const char *pkg_type)
191 if (package_manager_client_validate_handle(request)) {
193 package_manager_error
194 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
198 request->pkg_type = pkg_type;
200 return PACKAGE_MANAGER_ERROR_NONE;
203 API int package_manager_request_set_mode(package_manager_request_h request,
204 package_manager_request_mode_e mode)
206 if (package_manager_client_validate_handle(request)) {
208 package_manager_error
209 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
213 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
214 request->mode = PM_QUIET;
216 request->mode = PM_DEFAULT;
218 return PACKAGE_MANAGER_ERROR_NONE;
221 API int package_manager_request_set_tep(package_manager_request_h request,
222 const char *tep_path)
226 if (package_manager_client_validate_handle(request) || tep_path == NULL) {
228 package_manager_error
229 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
233 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
234 if (retval != PACKAGE_MANAGER_ERROR_NONE)
237 if (request->tep_path)
238 free((void *)request->tep_path);
240 request->tep_path = strdup(tep_path);
241 request->tep_move = true;
243 if (request->tep_path == NULL)
244 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
246 return PACKAGE_MANAGER_ERROR_NONE;
249 static int package_manager_get_event_type(const char *key,
250 package_manager_event_type_e *
254 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
256 if (strcasecmp(key, PKGMGR_INSTALLER_INSTALL_EVENT_STR) == 0)
257 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
258 else if (strcasecmp(key, PKGMGR_INSTALLER_UNINSTALL_EVENT_STR) == 0)
259 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
260 else if (strcasecmp(key, PKGMGR_INSTALLER_UPGRADE_EVENT_STR) == 0)
261 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
263 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
265 return PACKAGE_MANAGER_ERROR_NONE;
268 static int __add_event_info(event_info **head, int req_id,
269 package_manager_event_type_e event_type,
270 package_manager_event_state_e event_state)
272 event_info *evt_info;
276 evt_info = (event_info *) calloc(1, sizeof(event_info));
277 if (evt_info == NULL) {
278 _LOGD("calloc failed");
281 evt_info->req_id = req_id;
282 evt_info->event_type = event_type;
283 evt_info->next = NULL;
288 current = prev = *head;
291 current = current->next;
294 prev->next = evt_info;
300 static int __find_event_info(event_info **head, int req_id,
301 package_manager_event_type_e *event_type,
302 package_manager_event_state_e *event_state)
309 _LOGE("tmp is NULL");
313 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
316 if (tmp->req_id == req_id) {
317 *event_type = tmp->event_type;
325 static int __update_event_info(event_info **head, int req_id,
326 package_manager_event_type_e event_type,
327 package_manager_event_state_e event_state)
329 package_manager_event_type_e evt_type;
330 package_manager_event_state_e evt_state;
333 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
334 __add_event_info(head, req_id, event_type, event_state);
339 _LOGE("tmp is NULL");
344 if (tmp->req_id == req_id) {
345 tmp->event_type = event_type;
356 static int __remove_event_info(event_info **head request, int req_id)
367 if (current->next->req_id == req_id) {
369 current->next = current->next->next;
381 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
382 const char *pkg_name, const char *key,
383 const char *val, const void *pmsg, void *data)
386 package_manager_event_type_e event_type = -1;
387 package_manager_event_state_e event_state = -1;
389 _LOGD("request_event_handler is called");
391 package_manager_request_h request = data;
393 if (strcasecmp(key, "start") == 0) {
394 ret = package_manager_get_event_type(val, &event_type);
395 if (ret != PACKAGE_MANAGER_ERROR_NONE)
396 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
398 __add_event_info(&(request->head), req_id, event_type,
399 PACKAGE_MANAGER_EVENT_STATE_STARTED);
401 if (request->event_cb)
402 request->event_cb(req_id, pkg_type, pkg_name,
404 PACKAGE_MANAGER_EVENT_STATE_STARTED,
405 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
407 } else if (strcasecmp(key, "install_percent") == 0
408 || strcasecmp(key, "progress_percent") == 0) {
409 if (__find_event_info
410 (&(request->head), req_id, &event_type,
411 &event_state) == 0) {
412 __update_event_info(&(request->head), req_id,
414 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
415 if (request->event_cb)
416 request->event_cb(req_id, pkg_type, pkg_name,
418 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
420 PACKAGE_MANAGER_ERROR_NONE,
424 } else if (strcasecmp(key, "error") == 0) {
425 if (strcasecmp(key, "0") != 0) {
426 if (__find_event_info
427 (&(request->head), req_id, &event_type,
428 &event_state) == 0) {
429 __update_event_info(&(request->head), req_id,
431 PACKAGE_MANAGER_EVENT_STATE_FAILED);
434 if (request->event_cb)
435 request->event_cb(req_id, pkg_type,
436 pkg_name, event_type,
437 PACKAGE_MANAGER_EVENT_STATE_FAILED,
439 PACKAGE_MANAGER_ERROR_NONE,
443 } else if (strcasecmp(key, "end") == 0) {
444 if (__find_event_info
445 (&(request->head), req_id, &event_type,
446 &event_state) == 0) {
447 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
448 if (request->event_cb)
449 request->event_cb(req_id, pkg_type,
450 pkg_name, event_type,
451 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
453 PACKAGE_MANAGER_ERROR_NONE,
457 if (strcasecmp(key, "ok") != 0)
458 if (request->event_cb)
459 request->event_cb(req_id, pkg_type,
460 pkg_name, event_type,
461 PACKAGE_MANAGER_EVENT_STATE_FAILED,
463 PACKAGE_MANAGER_ERROR_NONE,
468 return PACKAGE_MANAGER_ERROR_NONE;
471 API int package_manager_request_install(package_manager_request_h request,
472 const char *path, int *id)
476 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
477 if (retval != PACKAGE_MANAGER_ERROR_NONE)
480 if (package_manager_client_validate_handle(request))
481 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
484 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
487 request->pkg_path = path;
488 uid_t uid = getuid();
489 if (uid != GLOBAL_USER)
490 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
491 request->pkg_path, NULL,
492 request->mode, request_event_handler,
496 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
497 request->pkg_path, NULL,
498 request->mode, request_event_handler,
501 if (request_id == PKGMGR_R_EINVAL)
502 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
503 else if (request_id == PKGMGR_R_ENOPKG)
504 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
505 else if (request_id == PKGMGR_R_ENOMEM)
506 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
507 else if (request_id == PKGMGR_R_EIO)
508 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
509 else if (request_id == PKGMGR_R_EPRIV)
510 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
511 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
512 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
516 return PACKAGE_MANAGER_ERROR_NONE;
519 API int package_manager_request_uninstall(package_manager_request_h request,
520 const char *name, int *id)
524 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
525 if (retval != PACKAGE_MANAGER_ERROR_NONE)
528 if (package_manager_client_validate_handle(request))
529 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
532 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
535 request->pkg_name = name;
536 uid_t uid = getuid();
537 if (uid != GLOBAL_USER)
538 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
539 request->pkg_name, request->mode,
540 request_event_handler, request, uid);
542 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
543 request->pkg_name, request->mode,
544 request_event_handler, request);
546 if (request_id == PKGMGR_R_EINVAL)
547 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
548 else if (request_id == PKGMGR_R_ENOPKG)
549 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
550 else if (request_id == PKGMGR_R_ENOMEM)
551 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
552 else if (request_id == PKGMGR_R_EIO)
553 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
554 else if (request_id == PKGMGR_R_EPRIV)
555 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
556 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
557 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
561 return PACKAGE_MANAGER_ERROR_NONE;
564 API int package_manager_request_move(package_manager_request_h request,
565 const char *name, package_manager_move_type_e move_type)
569 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
570 if (retval != PACKAGE_MANAGER_ERROR_NONE)
573 if (package_manager_client_validate_handle(request))
574 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
577 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
580 request->pkg_name = name;
581 uid_t uid = getuid();
582 if (uid != GLOBAL_USER)
583 ret = pkgmgr_client_usr_request_service(PM_REQUEST_MOVE, move_type,
584 request->pc, request->pkg_type, request->pkg_name,
585 uid, NULL, request_event_handler, NULL);
587 ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, move_type,
588 request->pc, request->pkg_type, request->pkg_name,
589 NULL, request_event_handler, NULL);
591 if (ret == PKGMGR_R_EINVAL)
592 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
593 else if (ret == PKGMGR_R_ENOPKG)
594 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
595 else if (ret == PKGMGR_R_ENOMEM)
596 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
597 else if (ret == PKGMGR_R_EIO)
598 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
599 else if (ret == PKGMGR_R_EPRIV)
600 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
601 else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR)
602 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
604 return PACKAGE_MANAGER_ERROR_NONE;
607 API int package_manager_create(package_manager_h *manager)
611 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
612 if (retval != PACKAGE_MANAGER_ERROR_NONE)
615 struct package_manager_s *package_manager = NULL;
617 if (manager == NULL) {
619 package_manager_error
620 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
624 package_manager = calloc(1, sizeof(struct package_manager_s));
625 if (package_manager == NULL) {
627 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
629 "failed to create a package_manager handle");
632 package_manager->ctype = PC_LISTENING;
633 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
634 if (package_manager->pc == NULL) {
635 free(package_manager);
637 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
639 "failed to create a package_manager client");
642 package_manager->handle_id = package_manager_new_id();
644 *manager = package_manager;
646 return PACKAGE_MANAGER_ERROR_NONE;
649 static int package_manager_validate_handle(package_manager_h manager)
651 if (manager == NULL || manager->pc == NULL)
652 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
654 return PACKAGE_MANAGER_ERROR_NONE;
657 API int package_manager_destroy(package_manager_h manager)
659 if (package_manager_validate_handle(manager)) {
661 package_manager_error
662 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
666 pkgmgr_client_free(manager->pc);
670 return PACKAGE_MANAGER_ERROR_NONE;
673 static int __add_event(event_info **head, int req_id,
674 package_manager_event_type_e event_type,
675 package_manager_event_state_e event_state)
677 event_info *evt_info;
679 evt_info = (event_info *) calloc(1, sizeof(event_info));
680 if (evt_info == NULL) {
681 _LOGD("calloc failed");
684 evt_info->req_id = req_id;
685 evt_info->event_type = event_type;
686 evt_info->next = NULL;
693 static int __find_event(event_info **head, int req_id,
694 package_manager_event_type_e *event_type,
695 package_manager_event_state_e *event_state)
702 _LOGE("tmp is NULL");
706 *event_type = tmp->event_type;
710 static int __update_event(event_info **head, int req_id,
711 package_manager_event_type_e event_type,
712 package_manager_event_state_e event_state)
714 package_manager_event_type_e evt_type;
715 package_manager_event_state_e evt_state;
718 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
719 __add_event_info(head, req_id, event_type, event_state);
724 _LOGE("tmp is NULL");
728 tmp->event_type = event_type;
735 /* App Event Listening Policy:
736 * +----------------+------------+---------------+------------------+
737 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
738 * +----------------+------------+---------------+------------------+
739 * |User Process App| Grant | Grant | Deny |
740 * +----------------+------------+---------------+------------------+
741 * |Platform module | Grant | Grant | Grant |
742 * +----------------+------------+---------------+------------------+
743 * UID assignment policy:
744 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
746 #define REGULAR_USER 5000
747 static int __validate_event_signal(uid_t target_uid)
749 uid_t self = getuid();
751 if (self == target_uid)
754 if (self < REGULAR_USER)
760 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
761 const char *pkg_name, const char *key,
762 const char *val, const void *pmsg, void *data)
765 package_manager_event_type_e event_type = -1;
766 package_manager_event_state_e event_state = -1;
767 uid_t uid = target_uid;
769 _LOGD("global_event_handler is called");
771 package_manager_h manager = data;
773 if (target_uid == GLOBAL_USER)
776 if (__validate_event_signal(uid))
777 return PACKAGE_MANAGER_ERROR_NONE;
779 if (strcasecmp(key, "start") == 0) {
780 ret = package_manager_get_event_type(val, &event_type);
781 if (ret != PACKAGE_MANAGER_ERROR_NONE)
782 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
784 __add_event(&(manager->head), req_id, event_type,
785 PACKAGE_MANAGER_EVENT_STATE_STARTED);
787 if (manager->event_cb && getuid() == uid)
788 manager->event_cb(pkg_type, pkg_name,
790 PACKAGE_MANAGER_EVENT_STATE_STARTED,
791 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
792 } else if (strcasecmp(key, "install_percent") == 0
793 || strcasecmp(key, "progress_percent") == 0) {
795 (&(manager->head), req_id, &event_type,
796 &event_state) == 0) {
797 __update_event(&(manager->head), req_id,
799 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
800 if (manager->event_cb && getuid() == uid)
801 manager->event_cb(pkg_type, pkg_name,
803 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
805 PACKAGE_MANAGER_ERROR_NONE,
809 } else if (strcasecmp(key, "error") == 0) {
810 if (strcasecmp(key, "0") != 0) {
812 (&(manager->head), req_id, &event_type,
813 &event_state) == 0) {
814 __update_event(&(manager->head), req_id,
816 PACKAGE_MANAGER_EVENT_STATE_FAILED);
819 if (manager->event_cb && getuid() == uid)
820 manager->event_cb(pkg_type,
821 pkg_name, event_type,
822 PACKAGE_MANAGER_EVENT_STATE_FAILED,
824 PACKAGE_MANAGER_ERROR_NONE,
827 } else if (strcasecmp(key, "end") == 0) {
829 (&(manager->head), req_id, &event_type,
830 &event_state) == 0) {
831 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
832 if (manager->event_cb && getuid() == uid)
833 manager->event_cb(pkg_type,
834 pkg_name, event_type,
835 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
837 PACKAGE_MANAGER_ERROR_NONE,
841 if (strcasecmp(key, "ok") != 0) {
842 if (manager->event_cb && getuid() == uid)
843 manager->event_cb(pkg_type,
844 pkg_name, event_type,
845 PACKAGE_MANAGER_EVENT_STATE_FAILED,
847 PACKAGE_MANAGER_ERROR_NONE,
853 return PACKAGE_MANAGER_ERROR_NONE;
856 API int package_manager_set_event_status(package_manager_h manager, int status_type)
861 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
863 retval = pkgmgrinfo_client_set_status_type(manager->pc, status_type);
866 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
868 return PACKAGE_MANAGER_ERROR_NONE;
871 API int package_manager_set_event_cb(package_manager_h manager,
872 package_manager_event_cb callback,
877 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
878 if (retval != PACKAGE_MANAGER_ERROR_NONE)
881 if (package_manager_validate_handle(manager)) {
883 package_manager_error
884 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
888 manager->event_cb = callback;
889 manager->user_data = user_data;
891 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
893 return PACKAGE_MANAGER_ERROR_NONE;
896 API int package_manager_unset_event_cb(package_manager_h manager)
898 if (manager == NULL) {
900 package_manager_error
901 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
906 manager->event_cb = NULL;
907 manager->user_data = NULL;
909 retval = pkgmgr_client_remove_listen_status(manager->pc);
910 if (retval == PKGMGR_R_EINVAL)
912 package_manager_error
913 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
915 else if (retval == PKGMGR_R_ERROR)
917 package_manager_error
918 (PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__,
921 return PACKAGE_MANAGER_ERROR_NONE;
924 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
926 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
929 char *pkg_id_dup = NULL;
931 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
932 if (retval != PACKAGE_MANAGER_ERROR_NONE)
935 if (app_id == NULL || package_id == NULL)
936 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
938 uid_t uid = getuid();
939 if (uid != GLOBAL_USER) {
940 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
941 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
943 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
944 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
946 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
947 if (retval != PMINFO_R_OK)
948 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
950 pkg_id_dup = strdup(pkg_id);
951 if (pkg_id_dup == NULL) {
952 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
953 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
956 *package_id = pkg_id_dup;
958 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
960 return PACKAGE_MANAGER_ERROR_NONE;
963 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
966 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
967 if (retval != PACKAGE_MANAGER_ERROR_NONE)
970 retval = package_info_get_package_info(package_id, package_info);
972 if (retval != PACKAGE_MANAGER_ERROR_NONE)
973 return package_manager_error(retval, __FUNCTION__, NULL);
975 return PACKAGE_MANAGER_ERROR_NONE;
978 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
983 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
984 if (retval != PACKAGE_MANAGER_ERROR_NONE)
987 retval = package_info_foreach_package_info(callback, user_data);
989 if (retval != PACKAGE_MANAGER_ERROR_NONE)
990 return package_manager_error(retval, __FUNCTION__, NULL);
992 return PACKAGE_MANAGER_ERROR_NONE;
995 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)
997 pkgmgrinfo_cert_compare_result_type_e result;
998 uid_t uid = getuid();
1000 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
1001 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1002 if (uid != GLOBAL_USER) {
1003 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
1004 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1006 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1007 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1009 *compare_result = (package_manager_compare_result_type_e)result;
1011 return PACKAGE_MANAGER_ERROR_NONE;
1014 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)
1016 pkgmgrinfo_cert_compare_result_type_e result;
1017 uid_t uid = getuid();
1019 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1020 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1021 if (uid != GLOBAL_USER) {
1022 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1023 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1025 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1026 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1029 *compare_result = (package_manager_compare_result_type_e)result;
1031 return PACKAGE_MANAGER_ERROR_NONE;
1034 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1038 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1039 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1042 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1043 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1045 char *pkg_id = NULL;
1046 bool is_preload = 0;
1047 uid_t uid = getuid();
1048 if (uid != GLOBAL_USER) {
1049 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1050 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1052 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1053 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1056 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1057 if (retval != PMINFO_R_OK) {
1058 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1059 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1061 if (uid != GLOBAL_USER) {
1062 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1063 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1064 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1065 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1068 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1069 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1070 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1071 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1074 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK) {
1075 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1076 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1077 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1085 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1086 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1088 return PACKAGE_MANAGER_ERROR_NONE;
1091 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1095 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1096 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1099 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1100 pkgmgrinfo_permission_type permission = 0;
1101 uid_t uid = getuid();
1102 if (uid != GLOBAL_USER) {
1103 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1104 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1106 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1107 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1109 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1110 if (retval != PMINFO_R_OK)
1111 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1113 if (permission == PMINFO_PERMISSION_NORMAL)
1114 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1115 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1116 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1117 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1118 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1120 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1122 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1123 return PACKAGE_MANAGER_ERROR_NONE;
1126 API int package_manager_clear_cache_dir(const char *package_id)
1130 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1131 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1134 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1135 if (res == PKGMGR_R_EINVAL) {
1136 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1137 } else if (res == PKGMGR_R_ENOPKG) {
1138 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1139 } else if (res == PKGMGR_R_ENOMEM) {
1140 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1141 } else if (res == PKGMGR_R_EIO) {
1142 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1143 } else if (res == PKGMGR_R_EPRIV) {
1144 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1145 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1146 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1147 } else if (res != PKGMGR_R_OK) {
1148 _LOGE("Unexpected error");
1149 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1152 return PACKAGE_MANAGER_ERROR_NONE;
1155 API int package_manager_clear_all_cache_dir(void)
1159 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1160 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1163 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1166 static void __free_client(gpointer data)
1168 pkgmgr_client *pc = (pkgmgr_client *)data;
1169 pkgmgr_client_free(pc);
1172 static void __initialize_cb_table(void)
1174 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, __free_client, NULL);
1177 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1179 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1180 if (callback == NULL) {
1181 _LOGE("callback is null.");
1182 g_hash_table_remove(__cb_table, pc);
1186 package_size_info_t size_info;
1187 size_info.data_size = result->data_size;
1188 size_info.cache_size = result->cache_size;
1189 size_info.app_size = result->app_size;
1190 size_info.external_data_size = result->ext_data_size;
1191 size_info.external_cache_size = result->ext_cache_size;
1192 size_info.external_app_size = result->ext_app_size;
1194 callback(pkgid, (package_size_info_h)&size_info, user_data);
1196 g_hash_table_remove(__cb_table, pc);
1199 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1201 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1202 if (callback == NULL) {
1203 _LOGE("callback is null.");
1204 g_hash_table_remove(__cb_table, pc);
1208 package_size_info_t size_info;
1209 size_info.data_size = result->data_size;
1210 size_info.cache_size = result->cache_size;
1211 size_info.app_size = result->app_size;
1212 size_info.external_data_size = result->ext_data_size;
1213 size_info.external_cache_size = result->ext_cache_size;
1214 size_info.external_app_size = result->ext_app_size;
1216 callback((package_size_info_h)&size_info, user_data);
1218 g_hash_table_remove(__cb_table, pc);
1221 static int _get_pkg_size_info(const char *package_id, void *callback, void *user_data)
1223 if (package_id == NULL || callback == NULL)
1224 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1226 if (__cb_table == NULL)
1227 __initialize_cb_table();
1229 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1231 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1234 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1235 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1237 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1239 if (res == PKGMGR_R_EINVAL) {
1240 pkgmgr_client_free(pc);
1241 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1242 } else if (res == PKGMGR_R_ENOPKG) {
1243 pkgmgr_client_free(pc);
1244 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1245 } else if (res == PKGMGR_R_ENOMEM) {
1246 pkgmgr_client_free(pc);
1247 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1248 } else if (res == PKGMGR_R_EIO) {
1249 pkgmgr_client_free(pc);
1250 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1251 } else if (res == PKGMGR_R_EPRIV) {
1252 pkgmgr_client_free(pc);
1253 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1254 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1255 pkgmgr_client_free(pc);
1256 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1257 } else if (res != PKGMGR_R_OK) {
1258 _LOGE("Unexpected error");
1259 pkgmgr_client_free(pc);
1260 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1263 g_hash_table_insert(__cb_table, pc, callback);
1265 _LOGD("Successful");
1266 return PACKAGE_MANAGER_ERROR_NONE;
1269 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1271 return _get_pkg_size_info(package_id, (void *)callback, user_data);
1274 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1276 return _get_pkg_size_info(PKG_SIZE_INFO_TOTAL, (void *)callback, user_data);
1279 API int package_manager_filter_create(package_manager_filter_h *handle)
1282 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1284 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1285 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1288 if (handle == NULL) {
1290 package_manager_error
1291 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1295 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1296 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1297 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1299 *handle = pkgmgr_filter;
1301 return PACKAGE_MANAGER_ERROR_NONE;
1304 API int package_manager_filter_destroy(package_manager_filter_h handle)
1308 if (handle == NULL) {
1310 package_manager_error
1311 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1315 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1316 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1317 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1319 return PACKAGE_MANAGER_ERROR_NONE;
1322 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1323 const char *property, const bool value)
1327 if ((handle == NULL) || (property == NULL)) {
1329 package_manager_error
1330 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1334 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1335 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1336 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1338 return PACKAGE_MANAGER_ERROR_NONE;
1341 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1345 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1346 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1349 if ((handle == NULL) || (count == NULL))
1350 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1352 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1354 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1356 return PACKAGE_MANAGER_ERROR_NONE;
1359 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1360 package_manager_package_info_cb callback, void *user_data)
1364 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1365 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1368 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1370 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1371 return package_manager_error(retval, __FUNCTION__, NULL);
1373 return PACKAGE_MANAGER_ERROR_NONE;
1376 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1379 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1381 package_size_info_t *size_info = (package_size_info_t *)handle;
1383 *data_size = (long long)size_info->data_size;
1384 return PACKAGE_MANAGER_ERROR_NONE;
1387 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1390 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1392 package_size_info_t *size_info = (package_size_info_t *)handle;
1394 *cache_size = size_info->cache_size;
1395 return PACKAGE_MANAGER_ERROR_NONE;
1398 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1401 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1403 package_size_info_t *size_info = (package_size_info_t *)handle;
1404 *app_size = size_info->app_size;
1405 return PACKAGE_MANAGER_ERROR_NONE;
1408 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1411 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1413 package_size_info_t *size_info = (package_size_info_t *)handle;
1414 *ext_data_size = size_info->external_data_size;
1415 return PACKAGE_MANAGER_ERROR_NONE;
1418 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1421 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1423 package_size_info_t *size_info = (package_size_info_t *)handle;
1424 *ext_cache_size = size_info->external_cache_size;
1425 return PACKAGE_MANAGER_ERROR_NONE;
1428 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1431 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1433 package_size_info_t *size_info = (package_size_info_t *)handle;
1434 *ext_app_size = size_info->external_app_size;
1435 return PACKAGE_MANAGER_ERROR_NONE;