Fix error handling when multi pkg install 47/234147/1
authorSangyoon Jang <jeremy.jang@samsung.com>
Fri, 22 May 2020 07:17:55 +0000 (16:17 +0900)
committerSangyoon Jang <jeremy.jang@samsung.com>
Fri, 22 May 2020 07:17:55 +0000 (16:17 +0900)
Exit with PACKAGE_NOT_FOUND error when the input package does not exist.

Change-Id: I5b7119012efa08b7022f8f6ea60171d868b87610
Signed-off-by: Sangyoon Jang <jeremy.jang@samsung.com>
src/pkg_cmd.c

index 930c051..b60eba2 100644 (file)
@@ -646,6 +646,8 @@ static int __install_req_dispatcher(pm_tool_args *data, uid_t target_uid)
 {
        int ret;
        pkgmgr_client *pc;
+       GList *list;
+       char *pkg;
 
        if (data->pkg_path[0] == '\0') {
                __invalid_arg_handler(data);
@@ -677,6 +679,13 @@ static int __install_req_dispatcher(pm_tool_args *data, uid_t target_uid)
                data->result = PKGMGR_INSTALLER_ERRCODE_ERROR;
                if (access(data->pkg_path, F_OK) != 0)
                        data->result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+               for (list = data->pkgs; list; list = list->next) {
+                       pkg = (char *)list->data;
+                       if (access(pkg, F_OK) != 0) {
+                               data->result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+                               break;
+                       }
+               }
                pkgmgr_client_free(pc);
                return ret;
        }
@@ -839,6 +848,8 @@ static int __mount_install_req_dispatcher(pm_tool_args *data, uid_t target_uid)
 {
        int ret;
        pkgmgr_client *pc;
+       GList *list;
+       char *pkg;
 
        if (data->pkg_path[0] == '\0') {
                __invalid_arg_handler(data);
@@ -870,6 +881,13 @@ static int __mount_install_req_dispatcher(pm_tool_args *data, uid_t target_uid)
                data->result = PKGMGR_INSTALLER_ERRCODE_ERROR;
                if (access(data->pkg_path, F_OK) != 0)
                        data->result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+               for (list = data->pkgs; list; list = list->next) {
+                       pkg = (char *)list->data;
+                       if (access(pkg, F_OK) != 0) {
+                               data->result = PKGMGR_INSTALLER_ERRCODE_PACKAGE_NOT_FOUND;
+                               break;
+                       }
+               }
                pkgmgr_client_free(pc);
                return ret;
        }
@@ -1684,11 +1702,8 @@ int main(int argc, char *argv[])
                                                "%s", optarg);
                        __parse_multiple_pkgs(&data, argc, argv);
                        ret = __convert_to_absolute_path(&data);
-                       if (ret == -1) {
+                       if (ret == -1)
                                printf("conversion of relative path to absolute path failed\n");
-                               __free_data(&data);
-                               return -1;
-                       }
                        printf("path is %s\n", data.pkg_path);
                        break;