From 88a123f8f998c82728187e737b776590ba8c92fc Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Fri, 3 Feb 2017 11:09:56 +0900 Subject: [PATCH] Fix package_manager_set_event_status Fix wrong conversion. This is flag type variable and should be considered OR-ing. Change-Id: I27a93ecd69763044252516f90331b6e46a1fd0da Signed-off-by: Sangyoon Jang --- src/package_manager.c | 52 +++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-) diff --git a/src/package_manager.c b/src/package_manager.c index c572d67..09fd401 100644 --- a/src/package_manager.c +++ b/src/package_manager.c @@ -821,42 +821,50 @@ static int global_event_handler(uid_t target_uid, int req_id, const char *pkg_ty return PACKAGE_MANAGER_ERROR_NONE; } -static int __convert_status_type(package_manager_status_type_e type) +static int __convert_status_type(package_manager_status_type_e status_type) { - switch (type) { - case PACKAGE_MANAGER_STATUS_TYPE_ALL: + int type = 0; + + if (status_type == PACKAGE_MANAGER_STATUS_TYPE_ALL) return PKGMGR_CLIENT_STATUS_ALL; - case PACKAGE_MANAGER_STATUS_TYPE_INSTALL: - return PKGMGR_CLIENT_STATUS_INSTALL; - case PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL: - return PKGMGR_CLIENT_STATUS_UNINSTALL; - case PACKAGE_MANAGER_STATUS_TYPE_UPGRADE: - return PKGMGR_CLIENT_STATUS_UPGRADE; - case PACKAGE_MANAGER_STATUS_TYPE_MOVE: - return PKGMGR_CLIENT_STATUS_MOVE; - case PACKAGE_MANAGER_STATUS_TYPE_CLEAR_DATA: - return PKGMGR_CLIENT_STATUS_CLEAR_DATA; - case PACKAGE_MANAGER_STATUS_TYPE_INSTALL_PROGRESS: - return PKGMGR_CLIENT_STATUS_INSTALL_PROGRESS; - case PACKAGE_MANAGER_STATUS_TYPE_GET_SIZE: - return PKGMGR_CLIENT_STATUS_GET_SIZE; - default: - return -1; - } + + if (status_type & PACKAGE_MANAGER_STATUS_TYPE_INSTALL) + type |= PKGMGR_CLIENT_STATUS_INSTALL; + if (status_type & PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL) + type |= PKGMGR_CLIENT_STATUS_UNINSTALL; + if (status_type & PACKAGE_MANAGER_STATUS_TYPE_UPGRADE) + type |= PKGMGR_CLIENT_STATUS_UPGRADE; + if (status_type & PACKAGE_MANAGER_STATUS_TYPE_MOVE) + type |= PKGMGR_CLIENT_STATUS_MOVE; + if (status_type & PACKAGE_MANAGER_STATUS_TYPE_CLEAR_DATA) + type |= PKGMGR_CLIENT_STATUS_CLEAR_DATA; + if (status_type & PACKAGE_MANAGER_STATUS_TYPE_INSTALL_PROGRESS) + type |= PKGMGR_CLIENT_STATUS_INSTALL_PROGRESS; + if (status_type & PACKAGE_MANAGER_STATUS_TYPE_GET_SIZE) + type |= PKGMGR_CLIENT_STATUS_GET_SIZE; + + return type; } API int package_manager_set_event_status(package_manager_h manager, int status_type) { int retval; int type; + int type_all = PACKAGE_MANAGER_STATUS_TYPE_INSTALL | + PACKAGE_MANAGER_STATUS_TYPE_UNINSTALL | + PACKAGE_MANAGER_STATUS_TYPE_UPGRADE | + PACKAGE_MANAGER_STATUS_TYPE_MOVE | + PACKAGE_MANAGER_STATUS_TYPE_CLEAR_DATA | + PACKAGE_MANAGER_STATUS_TYPE_INSTALL_PROGRESS | + PACKAGE_MANAGER_STATUS_TYPE_GET_SIZE; if (manager == NULL) return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL); - type = __convert_status_type(status_type); - if (type == -1) + if (status_type < 0 || status_type > type_all) return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL); + type = __convert_status_type(status_type); retval = pkgmgr_client_set_status_type(manager->pc, type); if (retval < 0) -- 2.7.4