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->pkg_type);
149 free(request->tep_path);
152 return PACKAGE_MANAGER_ERROR_NONE;
155 API int package_manager_request_set_event_cb(package_manager_request_h request,
156 package_manager_request_event_cb
157 callback, void *user_data)
161 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
162 if (retval != PACKAGE_MANAGER_ERROR_NONE)
165 if (package_manager_client_validate_handle(request)) {
167 package_manager_error
168 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
172 request->event_cb = callback;
173 request->user_data = user_data;
175 return PACKAGE_MANAGER_ERROR_NONE;
178 API int package_manager_request_unset_event_cb(package_manager_request_h request)
180 if (package_manager_client_validate_handle(request))
181 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
183 request->event_cb = NULL;
184 request->user_data = NULL;
186 return PACKAGE_MANAGER_ERROR_NONE;
189 API int package_manager_request_set_type(package_manager_request_h request,
190 const char *pkg_type)
192 if (package_manager_client_validate_handle(request)) {
194 package_manager_error
195 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
199 request->pkg_type = strdup(pkg_type);
201 return PACKAGE_MANAGER_ERROR_NONE;
204 API int package_manager_request_set_mode(package_manager_request_h request,
205 package_manager_request_mode_e mode)
207 if (package_manager_client_validate_handle(request)) {
209 package_manager_error
210 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
214 if (mode == PACKAGE_MANAGER_REQUEST_MODE_QUIET)
215 request->mode = PM_QUIET;
217 request->mode = PM_DEFAULT;
219 return PACKAGE_MANAGER_ERROR_NONE;
222 API int package_manager_request_set_tep(package_manager_request_h request,
223 const char *tep_path)
227 if (package_manager_client_validate_handle(request) || tep_path == NULL) {
229 package_manager_error
230 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
234 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
235 if (retval != PACKAGE_MANAGER_ERROR_NONE)
238 if (request->tep_path)
239 free((void *)request->tep_path);
241 request->tep_path = strdup(tep_path);
242 request->tep_move = true;
244 if (request->tep_path == NULL)
245 return PACKAGE_MANAGER_ERROR_SYSTEM_ERROR;
247 return PACKAGE_MANAGER_ERROR_NONE;
250 static int package_manager_get_event_type(const char *key,
251 package_manager_event_type_e *
255 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
257 if (strcasecmp(key, PKGMGR_INSTALLER_INSTALL_EVENT_STR) == 0)
258 *event_type = PACKAGE_MANAGER_EVENT_TYPE_INSTALL;
259 else if (strcasecmp(key, PKGMGR_INSTALLER_UNINSTALL_EVENT_STR) == 0)
260 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UNINSTALL;
261 else if (strcasecmp(key, PKGMGR_INSTALLER_UPGRADE_EVENT_STR) == 0)
262 *event_type = PACKAGE_MANAGER_EVENT_TYPE_UPDATE;
264 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
266 return PACKAGE_MANAGER_ERROR_NONE;
269 static int __add_event_info(event_info **head, int req_id,
270 package_manager_event_type_e event_type,
271 package_manager_event_state_e event_state)
273 event_info *evt_info;
277 evt_info = (event_info *) calloc(1, sizeof(event_info));
278 if (evt_info == NULL) {
279 _LOGD("calloc failed");
282 evt_info->req_id = req_id;
283 evt_info->event_type = event_type;
284 evt_info->next = NULL;
289 current = prev = *head;
292 current = current->next;
295 prev->next = evt_info;
301 static int __find_event_info(event_info **head, int req_id,
302 package_manager_event_type_e *event_type,
303 package_manager_event_state_e *event_state)
310 _LOGE("tmp is NULL");
314 _LOGD("tmp->req_id %d, event_type %d", tmp->req_id, event_type);
317 if (tmp->req_id == req_id) {
318 *event_type = tmp->event_type;
326 static int __update_event_info(event_info **head, int req_id,
327 package_manager_event_type_e event_type,
328 package_manager_event_state_e event_state)
330 package_manager_event_type_e evt_type;
331 package_manager_event_state_e evt_state;
334 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
335 __add_event_info(head, req_id, event_type, event_state);
340 _LOGE("tmp is NULL");
345 if (tmp->req_id == req_id) {
346 tmp->event_type = event_type;
357 static int __remove_event_info(event_info **head request, int req_id)
368 if (current->next->req_id == req_id) {
370 current->next = current->next->next;
382 static int request_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
383 const char *pkg_name, const char *key,
384 const char *val, const void *pmsg, void *data)
387 package_manager_event_type_e event_type = -1;
388 package_manager_event_state_e event_state = -1;
390 _LOGD("request_event_handler is called");
392 package_manager_request_h request = data;
394 if (strcasecmp(key, "start") == 0) {
395 ret = package_manager_get_event_type(val, &event_type);
396 if (ret != PACKAGE_MANAGER_ERROR_NONE)
397 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
399 __add_event_info(&(request->head), req_id, event_type,
400 PACKAGE_MANAGER_EVENT_STATE_STARTED);
402 if (request->event_cb)
403 request->event_cb(req_id, pkg_type, pkg_name,
405 PACKAGE_MANAGER_EVENT_STATE_STARTED,
406 0, PACKAGE_MANAGER_ERROR_NONE, request->user_data);
408 } else if (strcasecmp(key, "install_percent") == 0
409 || strcasecmp(key, "progress_percent") == 0) {
410 if (__find_event_info
411 (&(request->head), req_id, &event_type,
412 &event_state) == 0) {
413 __update_event_info(&(request->head), req_id,
415 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
416 if (request->event_cb)
417 request->event_cb(req_id, pkg_type, pkg_name,
419 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
421 PACKAGE_MANAGER_ERROR_NONE,
425 } else if (strcasecmp(key, "error") == 0) {
426 if (strcasecmp(key, "0") != 0) {
427 if (__find_event_info
428 (&(request->head), req_id, &event_type,
429 &event_state) == 0) {
430 __update_event_info(&(request->head), req_id,
432 PACKAGE_MANAGER_EVENT_STATE_FAILED);
435 if (request->event_cb)
436 request->event_cb(req_id, pkg_type,
437 pkg_name, event_type,
438 PACKAGE_MANAGER_EVENT_STATE_FAILED,
440 PACKAGE_MANAGER_ERROR_NONE,
444 } else if (strcasecmp(key, "end") == 0) {
445 if (__find_event_info
446 (&(request->head), req_id, &event_type,
447 &event_state) == 0) {
448 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
449 if (request->event_cb)
450 request->event_cb(req_id, pkg_type,
451 pkg_name, event_type,
452 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
454 PACKAGE_MANAGER_ERROR_NONE,
458 if (strcasecmp(key, "ok") != 0)
459 if (request->event_cb)
460 request->event_cb(req_id, pkg_type,
461 pkg_name, event_type,
462 PACKAGE_MANAGER_EVENT_STATE_FAILED,
464 PACKAGE_MANAGER_ERROR_NONE,
469 return PACKAGE_MANAGER_ERROR_NONE;
472 API int package_manager_request_install(package_manager_request_h request,
473 const char *path, int *id)
477 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
478 if (retval != PACKAGE_MANAGER_ERROR_NONE)
481 if (package_manager_client_validate_handle(request))
482 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
485 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
488 request->pkg_path = path;
489 uid_t uid = getuid();
490 if (uid != GLOBAL_USER)
491 request_id = pkgmgr_client_usr_install(request->pc, request->pkg_type, NULL,
492 request->pkg_path, NULL,
493 request->mode, request_event_handler,
497 request_id = pkgmgr_client_install(request->pc, request->pkg_type, NULL,
498 request->pkg_path, NULL,
499 request->mode, request_event_handler,
502 if (request_id == PKGMGR_R_EINVAL)
503 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
504 else if (request_id == PKGMGR_R_ENOPKG)
505 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
506 else if (request_id == PKGMGR_R_ENOMEM)
507 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
508 else if (request_id == PKGMGR_R_EIO)
509 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
510 else if (request_id == PKGMGR_R_EPRIV)
511 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
512 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
513 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
517 return PACKAGE_MANAGER_ERROR_NONE;
520 API int package_manager_request_uninstall(package_manager_request_h request,
521 const char *name, int *id)
525 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
526 if (retval != PACKAGE_MANAGER_ERROR_NONE)
529 if (package_manager_client_validate_handle(request))
530 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
533 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
536 request->pkg_name = name;
537 uid_t uid = getuid();
538 if (uid != GLOBAL_USER)
539 request_id = pkgmgr_client_usr_uninstall(request->pc, request->pkg_type,
540 request->pkg_name, request->mode,
541 request_event_handler, request, uid);
543 request_id = pkgmgr_client_uninstall(request->pc, request->pkg_type,
544 request->pkg_name, request->mode,
545 request_event_handler, request);
547 if (request_id == PKGMGR_R_EINVAL)
548 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
549 else if (request_id == PKGMGR_R_ENOPKG)
550 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
551 else if (request_id == PKGMGR_R_ENOMEM)
552 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
553 else if (request_id == PKGMGR_R_EIO)
554 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
555 else if (request_id == PKGMGR_R_EPRIV)
556 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
557 else if (request_id == PKGMGR_R_ESYSTEM || request_id == PKGMGR_R_ECOMM || request_id == PKGMGR_R_ERROR)
558 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
562 return PACKAGE_MANAGER_ERROR_NONE;
565 API int package_manager_request_move(package_manager_request_h request,
566 const char *name, package_manager_move_type_e move_type)
570 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
571 if (retval != PACKAGE_MANAGER_ERROR_NONE)
574 if (package_manager_client_validate_handle(request))
575 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
578 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
581 request->pkg_name = name;
582 uid_t uid = getuid();
583 if (uid != GLOBAL_USER)
584 ret = pkgmgr_client_usr_request_service(PM_REQUEST_MOVE, move_type,
585 request->pc, request->pkg_type, request->pkg_name,
586 uid, NULL, request_event_handler, NULL);
588 ret = pkgmgr_client_request_service(PM_REQUEST_MOVE, move_type,
589 request->pc, request->pkg_type, request->pkg_name,
590 NULL, request_event_handler, NULL);
592 if (ret == PKGMGR_R_EINVAL)
593 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
594 else if (ret == PKGMGR_R_ENOPKG)
595 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
596 else if (ret == PKGMGR_R_ENOMEM)
597 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
598 else if (ret == PKGMGR_R_EIO)
599 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
600 else if (ret == PKGMGR_R_EPRIV)
601 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
602 else if (ret == PKGMGR_R_ESYSTEM || ret == PKGMGR_R_ECOMM || ret == PKGMGR_R_ERROR)
603 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
605 return PACKAGE_MANAGER_ERROR_NONE;
608 API int package_manager_create(package_manager_h *manager)
612 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
613 if (retval != PACKAGE_MANAGER_ERROR_NONE)
616 struct package_manager_s *package_manager = NULL;
618 if (manager == NULL) {
620 package_manager_error
621 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
625 package_manager = calloc(1, sizeof(struct package_manager_s));
626 if (package_manager == NULL) {
628 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
630 "failed to create a package_manager handle");
633 package_manager->ctype = PC_LISTENING;
634 package_manager->pc = pkgmgr_client_new(PC_LISTENING);
635 if (package_manager->pc == NULL) {
636 free(package_manager);
638 package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY,
640 "failed to create a package_manager client");
643 package_manager->handle_id = package_manager_new_id();
645 *manager = package_manager;
647 return PACKAGE_MANAGER_ERROR_NONE;
650 static int package_manager_validate_handle(package_manager_h manager)
652 if (manager == NULL || manager->pc == NULL)
653 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
655 return PACKAGE_MANAGER_ERROR_NONE;
658 API int package_manager_destroy(package_manager_h manager)
660 if (package_manager_validate_handle(manager)) {
662 package_manager_error
663 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
667 pkgmgr_client_free(manager->pc);
671 return PACKAGE_MANAGER_ERROR_NONE;
674 static int __add_event(event_info **head, int req_id,
675 package_manager_event_type_e event_type,
676 package_manager_event_state_e event_state)
678 event_info *evt_info;
680 evt_info = (event_info *) calloc(1, sizeof(event_info));
681 if (evt_info == NULL) {
682 _LOGD("calloc failed");
685 evt_info->req_id = req_id;
686 evt_info->event_type = event_type;
687 evt_info->next = NULL;
694 static int __find_event(event_info **head, int req_id,
695 package_manager_event_type_e *event_type,
696 package_manager_event_state_e *event_state)
703 _LOGE("tmp is NULL");
707 *event_type = tmp->event_type;
711 static int __update_event(event_info **head, int req_id,
712 package_manager_event_type_e event_type,
713 package_manager_event_state_e event_state)
715 package_manager_event_type_e evt_type;
716 package_manager_event_state_e evt_state;
719 if (__find_event_info(head, req_id, &evt_type, &evt_state) != 0)
720 __add_event_info(head, req_id, event_type, event_state);
725 _LOGE("tmp is NULL");
729 tmp->event_type = event_type;
736 /* App Event Listening Policy:
737 * +----------------+------------+---------------+------------------+
738 * |Listener \ Type |Global Event|My User's Event|Other user's Event|
739 * +----------------+------------+---------------+------------------+
740 * |User Process App| Grant | Grant | Deny |
741 * +----------------+------------+---------------+------------------+
742 * |Platform module | Grant | Grant | Grant |
743 * +----------------+------------+---------------+------------------+
744 * UID assignment policy:
745 * https://wiki.tizen.org/wiki/Security/User_and_group_ID_assignment_policy
747 #define REGULAR_USER 5000
748 static int __validate_event_signal(uid_t target_uid)
750 uid_t self = getuid();
752 if (self == target_uid)
755 if (self < REGULAR_USER)
761 static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_type,
762 const char *pkg_name, const char *key,
763 const char *val, const void *pmsg, void *data)
766 package_manager_event_type_e event_type = -1;
767 package_manager_event_state_e event_state = -1;
768 uid_t uid = target_uid;
770 _LOGD("global_event_handler is called");
772 package_manager_h manager = data;
774 if (target_uid == GLOBAL_USER)
777 if (__validate_event_signal(uid))
778 return PACKAGE_MANAGER_ERROR_NONE;
780 if (strcasecmp(key, "start") == 0) {
781 ret = package_manager_get_event_type(val, &event_type);
782 if (ret != PACKAGE_MANAGER_ERROR_NONE)
783 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
785 __add_event(&(manager->head), req_id, event_type,
786 PACKAGE_MANAGER_EVENT_STATE_STARTED);
788 if (manager->event_cb && getuid() == uid)
789 manager->event_cb(pkg_type, pkg_name,
791 PACKAGE_MANAGER_EVENT_STATE_STARTED,
792 0, PACKAGE_MANAGER_ERROR_NONE, manager->user_data);
793 } else if (strcasecmp(key, "install_percent") == 0
794 || strcasecmp(key, "progress_percent") == 0) {
796 (&(manager->head), req_id, &event_type,
797 &event_state) == 0) {
798 __update_event(&(manager->head), req_id,
800 PACKAGE_MANAGER_EVENT_STATE_PROCESSING);
801 if (manager->event_cb && getuid() == uid)
802 manager->event_cb(pkg_type, pkg_name,
804 PACKAGE_MANAGER_EVENT_STATE_PROCESSING,
806 PACKAGE_MANAGER_ERROR_NONE,
810 } else if (strcasecmp(key, "error") == 0) {
811 if (strcasecmp(key, "0") != 0) {
813 (&(manager->head), req_id, &event_type,
814 &event_state) == 0) {
815 __update_event(&(manager->head), req_id,
817 PACKAGE_MANAGER_EVENT_STATE_FAILED);
820 if (manager->event_cb && getuid() == uid)
821 manager->event_cb(pkg_type,
822 pkg_name, event_type,
823 PACKAGE_MANAGER_EVENT_STATE_FAILED,
825 PACKAGE_MANAGER_ERROR_NONE,
828 } else if (strcasecmp(key, "end") == 0) {
830 (&(manager->head), req_id, &event_type,
831 &event_state) == 0) {
832 if (event_state != PACKAGE_MANAGER_EVENT_STATE_FAILED) {
833 if (manager->event_cb && getuid() == uid)
834 manager->event_cb(pkg_type,
835 pkg_name, event_type,
836 PACKAGE_MANAGER_EVENT_STATE_COMPLETED,
838 PACKAGE_MANAGER_ERROR_NONE,
842 if (strcasecmp(key, "ok") != 0) {
843 if (manager->event_cb && getuid() == uid)
844 manager->event_cb(pkg_type,
845 pkg_name, event_type,
846 PACKAGE_MANAGER_EVENT_STATE_FAILED,
848 PACKAGE_MANAGER_ERROR_NONE,
854 return PACKAGE_MANAGER_ERROR_NONE;
857 API int package_manager_set_event_status(package_manager_h manager, int status_type)
862 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
864 retval = pkgmgrinfo_client_set_status_type(manager->pc, status_type);
867 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
869 return PACKAGE_MANAGER_ERROR_NONE;
872 API int package_manager_set_event_cb(package_manager_h manager,
873 package_manager_event_cb callback,
878 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
879 if (retval != PACKAGE_MANAGER_ERROR_NONE)
882 if (package_manager_validate_handle(manager)) {
884 package_manager_error
885 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
889 manager->event_cb = callback;
890 manager->user_data = user_data;
892 pkgmgr_client_listen_status(manager->pc, global_event_handler, manager);
894 return PACKAGE_MANAGER_ERROR_NONE;
897 API int package_manager_unset_event_cb(package_manager_h manager)
899 if (manager == NULL) {
901 package_manager_error
902 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
907 manager->event_cb = NULL;
908 manager->user_data = NULL;
910 retval = pkgmgr_client_remove_listen_status(manager->pc);
911 if (retval == PKGMGR_R_EINVAL)
913 package_manager_error
914 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
916 else if (retval == PKGMGR_R_ERROR)
918 package_manager_error
919 (PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__,
922 return PACKAGE_MANAGER_ERROR_NONE;
925 API int package_manager_get_package_id_by_app_id(const char *app_id, char **package_id)
927 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo;
930 char *pkg_id_dup = NULL;
932 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
933 if (retval != PACKAGE_MANAGER_ERROR_NONE)
936 if (app_id == NULL || package_id == NULL)
937 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
939 uid_t uid = getuid();
940 if (uid != GLOBAL_USER) {
941 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
942 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
944 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
945 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
947 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
948 if (retval != PMINFO_R_OK)
949 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
951 pkg_id_dup = strdup(pkg_id);
952 if (pkg_id_dup == NULL) {
953 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
954 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
957 *package_id = pkg_id_dup;
959 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
961 return PACKAGE_MANAGER_ERROR_NONE;
964 API int package_manager_get_package_info(const char *package_id, package_info_h *package_info)
967 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
968 if (retval != PACKAGE_MANAGER_ERROR_NONE)
971 retval = package_info_get_package_info(package_id, package_info);
973 if (retval != PACKAGE_MANAGER_ERROR_NONE)
974 return package_manager_error(retval, __FUNCTION__, NULL);
976 return PACKAGE_MANAGER_ERROR_NONE;
979 API int package_manager_foreach_package_info(package_manager_package_info_cb callback,
984 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
985 if (retval != PACKAGE_MANAGER_ERROR_NONE)
988 retval = package_info_foreach_package_info(callback, user_data);
990 if (retval != PACKAGE_MANAGER_ERROR_NONE)
991 return package_manager_error(retval, __FUNCTION__, NULL);
993 return PACKAGE_MANAGER_ERROR_NONE;
996 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)
998 pkgmgrinfo_cert_compare_result_type_e result;
999 uid_t uid = getuid();
1001 if (lhs_package_id == NULL || rhs_package_id == NULL || compare_result == NULL)
1002 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1003 if (uid != GLOBAL_USER) {
1004 if (pkgmgrinfo_pkginfo_compare_usr_pkg_cert_info(lhs_package_id, rhs_package_id, uid, &result) != PKGMGR_R_OK)
1005 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1007 if (pkgmgrinfo_pkginfo_compare_pkg_cert_info(lhs_package_id, rhs_package_id, &result) != PKGMGR_R_OK)
1008 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1010 *compare_result = (package_manager_compare_result_type_e)result;
1012 return PACKAGE_MANAGER_ERROR_NONE;
1015 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)
1017 pkgmgrinfo_cert_compare_result_type_e result;
1018 uid_t uid = getuid();
1020 if (lhs_app_id == NULL || rhs_app_id == NULL || compare_result == NULL)
1021 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1022 if (uid != GLOBAL_USER) {
1023 if (pkgmgrinfo_pkginfo_compare_usr_app_cert_info(lhs_app_id, rhs_app_id, uid, &result) != PKGMGR_R_OK)
1024 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1026 if (pkgmgrinfo_pkginfo_compare_app_cert_info(lhs_app_id, rhs_app_id, &result) != PKGMGR_R_OK)
1027 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1030 *compare_result = (package_manager_compare_result_type_e)result;
1032 return PACKAGE_MANAGER_ERROR_NONE;
1035 API int package_manager_is_preload_package_by_app_id(const char *app_id, bool *preload)
1039 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1040 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1043 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1044 pkgmgrinfo_pkginfo_h pkgmgrinfo_pkginfo = NULL;
1046 char *pkg_id = NULL;
1047 bool is_preload = 0;
1048 uid_t uid = getuid();
1049 if (uid != GLOBAL_USER) {
1050 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1051 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1053 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1054 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1057 retval = pkgmgrinfo_appinfo_get_pkgname(pkgmgrinfo_appinfo, &pkg_id);
1058 if (retval != PMINFO_R_OK) {
1059 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1060 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1062 if (uid != GLOBAL_USER) {
1063 if (pkgmgrinfo_pkginfo_get_usr_pkginfo(pkg_id, uid, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1064 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1065 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1066 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1069 if (pkgmgrinfo_pkginfo_get_pkginfo(pkg_id, &pkgmgrinfo_pkginfo) != PMINFO_R_OK) {
1070 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1071 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1072 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1075 if (pkgmgrinfo_pkginfo_is_preload(pkgmgrinfo_pkginfo, &is_preload) != PMINFO_R_OK) {
1076 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1077 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1078 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1086 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1087 pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo);
1089 return PACKAGE_MANAGER_ERROR_NONE;
1092 API int package_manager_get_permission_type(const char *app_id, package_manager_permission_type_e *permission_type)
1096 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1097 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1100 pkgmgrinfo_appinfo_h pkgmgrinfo_appinfo = NULL;
1101 pkgmgrinfo_permission_type permission = 0;
1102 uid_t uid = getuid();
1103 if (uid != GLOBAL_USER) {
1104 if (pkgmgrinfo_appinfo_get_usr_appinfo(app_id, uid, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1105 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1107 if (pkgmgrinfo_appinfo_get_appinfo(app_id, &pkgmgrinfo_appinfo) != PMINFO_R_OK)
1108 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1110 retval = pkgmgrinfo_appinfo_get_permission_type(pkgmgrinfo_appinfo, &permission);
1111 if (retval != PMINFO_R_OK)
1112 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1114 if (permission == PMINFO_PERMISSION_NORMAL)
1115 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1116 else if (permission == PMINFO_PERMISSION_SIGNATURE)
1117 *permission_type = PACKAGE_MANAGER_PERMISSION_SIGNATURE;
1118 else if (permission == PMINFO_PERMISSION_PRIVILEGE)
1119 *permission_type = PACKAGE_MANAGER_PERMISSION_PRIVILEGE;
1121 *permission_type = PACKAGE_MANAGER_PERMISSION_NORMAL;
1123 pkgmgrinfo_appinfo_destroy_appinfo(pkgmgrinfo_appinfo);
1124 return PACKAGE_MANAGER_ERROR_NONE;
1127 API int package_manager_clear_cache_dir(const char *package_id)
1131 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_CACHE);
1132 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1135 int res = pkgmgr_client_usr_clear_cache_dir(package_id, getuid());
1136 if (res == PKGMGR_R_EINVAL) {
1137 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1138 } else if (res == PKGMGR_R_ENOPKG) {
1139 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1140 } else if (res == PKGMGR_R_ENOMEM) {
1141 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1142 } else if (res == PKGMGR_R_EIO) {
1143 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1144 } else if (res == PKGMGR_R_EPRIV) {
1145 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1146 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1147 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1148 } else if (res != PKGMGR_R_OK) {
1149 _LOGE("Unexpected error");
1150 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1153 return PACKAGE_MANAGER_ERROR_NONE;
1156 API int package_manager_clear_all_cache_dir(void)
1160 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
1161 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1164 return package_manager_clear_cache_dir(PKG_CLEAR_ALL_CACHE);
1167 static void __free_client(gpointer data)
1169 pkgmgr_client *pc = (pkgmgr_client *)data;
1170 pkgmgr_client_free(pc);
1173 static void __initialize_cb_table(void)
1175 __cb_table = g_hash_table_new_full(g_int_hash, g_int_equal, __free_client, NULL);
1178 static void __result_cb(pkgmgr_client *pc, const char *pkgid, const pkg_size_info_t *result, void *user_data)
1180 package_manager_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1181 if (callback == NULL) {
1182 _LOGE("callback is null.");
1183 g_hash_table_remove(__cb_table, pc);
1187 package_size_info_t size_info;
1188 size_info.data_size = result->data_size;
1189 size_info.cache_size = result->cache_size;
1190 size_info.app_size = result->app_size;
1191 size_info.external_data_size = result->ext_data_size;
1192 size_info.external_cache_size = result->ext_cache_size;
1193 size_info.external_app_size = result->ext_app_size;
1195 callback(pkgid, (package_size_info_h)&size_info, user_data);
1197 g_hash_table_remove(__cb_table, pc);
1200 static void __total_result_cb(pkgmgr_client *pc, const pkg_size_info_t *result, void *user_data)
1202 package_manager_total_size_info_receive_cb callback = g_hash_table_lookup(__cb_table, pc);
1203 if (callback == NULL) {
1204 _LOGE("callback is null.");
1205 g_hash_table_remove(__cb_table, pc);
1209 package_size_info_t size_info;
1210 size_info.data_size = result->data_size;
1211 size_info.cache_size = result->cache_size;
1212 size_info.app_size = result->app_size;
1213 size_info.external_data_size = result->ext_data_size;
1214 size_info.external_cache_size = result->ext_cache_size;
1215 size_info.external_app_size = result->ext_app_size;
1217 callback((package_size_info_h)&size_info, user_data);
1219 g_hash_table_remove(__cb_table, pc);
1222 static int _get_pkg_size_info(const char *package_id, void *callback, void *user_data)
1224 if (package_id == NULL || callback == NULL)
1225 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1227 if (__cb_table == NULL)
1228 __initialize_cb_table();
1230 pkgmgr_client *pc = pkgmgr_client_new(PC_REQUEST);
1232 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1235 if (strcmp(package_id, PKG_SIZE_INFO_TOTAL) != 0)
1236 res = pkgmgr_client_usr_get_package_size_info(pc, package_id, __result_cb, user_data, getuid());
1238 res = pkgmgr_client_usr_get_total_package_size_info(pc, __total_result_cb, user_data, getuid());
1240 if (res == PKGMGR_R_EINVAL) {
1241 pkgmgr_client_free(pc);
1242 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1243 } else if (res == PKGMGR_R_ENOPKG) {
1244 pkgmgr_client_free(pc);
1245 return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
1246 } else if (res == PKGMGR_R_ENOMEM) {
1247 pkgmgr_client_free(pc);
1248 return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
1249 } else if (res == PKGMGR_R_EIO) {
1250 pkgmgr_client_free(pc);
1251 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1252 } else if (res == PKGMGR_R_EPRIV) {
1253 pkgmgr_client_free(pc);
1254 return package_manager_error(PACKAGE_MANAGER_ERROR_PERMISSION_DENIED, __FUNCTION__, NULL);
1255 } else if (res == PKGMGR_R_ESYSTEM || res == PKGMGR_R_ECOMM || res == PKGMGR_R_ERROR) {
1256 pkgmgr_client_free(pc);
1257 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1258 } else if (res != PKGMGR_R_OK) {
1259 _LOGE("Unexpected error");
1260 pkgmgr_client_free(pc);
1261 return package_manager_error(PACKAGE_MANAGER_ERROR_SYSTEM_ERROR, __FUNCTION__, NULL);
1264 g_hash_table_insert(__cb_table, pc, callback);
1266 _LOGD("Successful");
1267 return PACKAGE_MANAGER_ERROR_NONE;
1270 API int package_manager_get_package_size_info(const char *package_id, package_manager_size_info_receive_cb callback, void *user_data)
1272 return _get_pkg_size_info(package_id, (void *)callback, user_data);
1275 API int package_manager_get_total_package_size_info(package_manager_total_size_info_receive_cb callback, void *user_data)
1277 return _get_pkg_size_info(PKG_SIZE_INFO_TOTAL, (void *)callback, user_data);
1280 API int package_manager_filter_create(package_manager_filter_h *handle)
1283 pkgmgrinfo_pkginfo_filter_h pkgmgr_filter = NULL;
1285 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1286 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1289 if (handle == NULL) {
1291 package_manager_error
1292 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1296 retval = pkgmgrinfo_pkginfo_filter_create(&pkgmgr_filter);
1297 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1298 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)
1309 if (handle == NULL) {
1311 package_manager_error
1312 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1316 retval = pkgmgrinfo_pkginfo_filter_destroy(handle);
1317 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1318 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1320 return PACKAGE_MANAGER_ERROR_NONE;
1323 API int package_manager_filter_add_bool(package_manager_filter_h handle,
1324 const char *property, const bool value)
1328 if ((handle == NULL) || (property == NULL)) {
1330 package_manager_error
1331 (PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__,
1335 retval = pkgmgrinfo_pkginfo_filter_add_bool(handle, property, value);
1336 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1337 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1339 return PACKAGE_MANAGER_ERROR_NONE;
1342 API int package_manager_filter_count(package_manager_filter_h handle, int *count)
1346 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1347 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1350 if ((handle == NULL) || (count == NULL))
1351 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1353 retval = pkgmgrinfo_pkginfo_filter_count(handle, count);
1355 return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
1357 return PACKAGE_MANAGER_ERROR_NONE;
1360 API int package_manager_filter_foreach_package_info(package_manager_filter_h handle,
1361 package_manager_package_info_cb callback, void *user_data)
1365 retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_INFO);
1366 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1369 retval = package_info_filter_foreach_package_info(handle, callback, user_data);
1371 if (retval != PACKAGE_MANAGER_ERROR_NONE)
1372 return package_manager_error(retval, __FUNCTION__, NULL);
1374 return PACKAGE_MANAGER_ERROR_NONE;
1377 API int package_size_info_get_data_size(package_size_info_h handle, long long *data_size)
1380 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1382 package_size_info_t *size_info = (package_size_info_t *)handle;
1384 *data_size = (long long)size_info->data_size;
1385 return PACKAGE_MANAGER_ERROR_NONE;
1388 API int package_size_info_get_cache_size(package_size_info_h handle, long long *cache_size)
1391 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1393 package_size_info_t *size_info = (package_size_info_t *)handle;
1395 *cache_size = size_info->cache_size;
1396 return PACKAGE_MANAGER_ERROR_NONE;
1399 API int package_size_info_get_app_size(package_size_info_h handle, long long *app_size)
1402 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1404 package_size_info_t *size_info = (package_size_info_t *)handle;
1405 *app_size = size_info->app_size;
1406 return PACKAGE_MANAGER_ERROR_NONE;
1409 API int package_size_info_get_external_data_size(package_size_info_h handle, long long *ext_data_size)
1412 return PACKAGE_MANAGER_ERROR_INVALID_PARAMETER;
1414 package_size_info_t *size_info = (package_size_info_t *)handle;
1415 *ext_data_size = size_info->external_data_size;
1416 return PACKAGE_MANAGER_ERROR_NONE;
1419 API int package_size_info_get_external_cache_size(package_size_info_h handle, long long *ext_cache_size)
1422 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1424 package_size_info_t *size_info = (package_size_info_t *)handle;
1425 *ext_cache_size = size_info->external_cache_size;
1426 return PACKAGE_MANAGER_ERROR_NONE;
1429 API int package_size_info_get_external_app_size(package_size_info_h handle, long long *ext_app_size)
1432 return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
1434 package_size_info_t *size_info = (package_size_info_t *)handle;
1435 *ext_app_size = size_info->external_app_size;
1436 return PACKAGE_MANAGER_ERROR_NONE;