Fix package_manager_set_event_status 10/112810/4
authorSangyoon Jang <s89.jang@samsung.com>
Fri, 3 Feb 2017 02:09:56 +0000 (11:09 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Fri, 3 Feb 2017 02:41:11 +0000 (11:41 +0900)
Fix wrong conversion. This is flag type variable and should be
considered OR-ing.

Change-Id: I27a93ecd69763044252516f90331b6e46a1fd0da
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
src/package_manager.c

index c572d67..09fd401 100644 (file)
@@ -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)