Refactor function for activate,deactivate 93/310593/3
authorIlho Kim <ilho159.kim@samsung.com>
Thu, 2 May 2024 07:53:46 +0000 (16:53 +0900)
committerIlho Kim <ilho159.kim@samsung.com>
Thu, 2 May 2024 10:36:35 +0000 (19:36 +0900)
Since different operations are required depending on whether the type is
an app or not, a if statement exists for this purpose
Due to the corresponding if statement, the depth of the code increased,
so each logic was functionalized to reduce the depth

Change-Id: I297e4987c0a096a694f13b5ac9043ca4edef8931
Signed-off-by: Ilho Kim <ilho159.kim@samsung.com>
src/pkgcmd/pkg_cmd.c

index 4ee59dbd02dd3c8bb895b55e8f6e54cb45b63039..8a0f68c218b8dd6e9be6a2d4ae146a5b2a8427f7 100644 (file)
@@ -1086,17 +1086,95 @@ static int __move_req_dispatcher(pm_tool_args *data, uid_t target_uid)
        return data->result;
 }
 
-static int __activate_req_dispatcher(pm_tool_args *data, uid_t target_uid)
+static int __activate_app(pkgmgr_client *pc,
+               pm_tool_args *data, uid_t target_uid)
 {
        int ret;
        pkgmgrinfo_appinfo_h appinfo_h;
-       pkgmgr_client *pc;
-       pkgmgr_client *listen_pc = NULL;
        const char **pkgs = NULL;
        GList *list;
        int i;
        int n_apps = 0;
 
+       if (data->global && data->uid != -1) {
+               if (data->uid != __get_current_user_id()) {
+                       printf("Invalid uid : %d\n", data->uid);
+                       return -1;
+               }
+               target_uid = data->uid;
+       }
+       ret = pkgmgrinfo_appinfo_get_usr_disabled_appinfo(data->pkgid,
+                       target_uid, &appinfo_h);
+       if (ret != PMINFO_R_OK) {
+               printf("Failed to get appinfo[%s]\n", data->pkgid);
+               return -1;
+       }
+       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+
+       if (data->global) {
+               if (data->uid != -1)
+                       /* enable global app for this user only */
+                       ret = pkgmgr_client_activate_global_app_for_uid(pc,
+                                       data->pkgid, __app_return_cb, data,
+                                       __get_current_user_id());
+               else
+                       /* enable global app for all user */
+                       ret = pkgmgr_client_usr_activate_app(pc, data->pkgid,
+                                       __app_return_cb, data, GLOBAL_USER);
+       } else {
+               /* enable local apps */
+               n_apps = g_list_length(data->pkgs);
+               if (n_apps) {
+                       pkgs = malloc(sizeof(char *) * n_apps);
+                       if (pkgs == NULL) {
+                               printf("Out of memory\n");
+                               return -1;
+                       }
+
+                       for (list = data->pkgs, i = 0; list; list = list->next, i++)
+                               pkgs[i] = (char *)list->data;
+
+                       data->end_count = n_apps;
+                       ret = pkgmgr_client_usr_activate_apps(pc, pkgs, n_apps,
+                                       __apps_return_cb, data, target_uid);
+
+                       if (pkgs)
+                               free(pkgs);
+               } else {
+               /* enable local app */
+               ret = pkgmgr_client_usr_activate_app(pc, data->pkgid,
+                               __app_return_cb, data, target_uid);
+               }
+       }
+
+       return ret;
+}
+
+static int __activate_pkg(pkgmgr_client *pc, pkgmgr_client **listen_pc,
+               pm_tool_args *data, uid_t target_uid)
+{
+       int ret;
+
+       *listen_pc = pkgmgr_client_new(PC_LISTENING);
+       if (*listen_pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               return -1;
+       }
+       ret = pkgmgr_client_listen_status(*listen_pc, __return_cb, data);
+       if (ret < 0) {
+               printf("Failed to set callback[%d]\n", ret);
+               return ret;
+       }
+       return pkgmgr_client_usr_activate(pc, data->pkg_type, data->pkgid,
+                       target_uid);
+}
+
+static int __activate_req_dispatcher(pm_tool_args *data, uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
+       pkgmgr_client *listen_pc = NULL;
+
        if (data->pkg_type[0] == '\0' || data->pkgid[0] == '\0') {
                __invalid_arg_handler(data);
                return -1;
@@ -1123,77 +1201,11 @@ static int __activate_req_dispatcher(pm_tool_args *data, uid_t target_uid)
                printf("set_app_label is done\n");
        }
 
-       if (strcmp(data->pkg_type, "app") == 0) {
-               if (data->global && data->uid != -1) {
-                       if (data->uid != __get_current_user_id()) {
-                               printf("Invalid uid : %d\n", data->uid);
-                               pkgmgr_client_free(pc);
-                               return -1;
-                       }
-                       target_uid = data->uid;
-               }
-               ret = pkgmgrinfo_appinfo_get_usr_disabled_appinfo(data->pkgid,
-                               target_uid, &appinfo_h);
-               if (ret != PMINFO_R_OK) {
-                       printf("Failed to get appinfo[%s]\n", data->pkgid);
-                       pkgmgr_client_free(pc);
-                       return -1;
-               }
-
-               if (data->global) {
-                       if (data->uid != -1)
-                               /* enable global app for this user only */
-                               ret = pkgmgr_client_activate_global_app_for_uid(pc,
-                                               data->pkgid, __app_return_cb, data,
-                                               __get_current_user_id());
-                       else
-                               /* enable global app for all user */
-                               ret = pkgmgr_client_usr_activate_app(pc, data->pkgid,
-                                               __app_return_cb, data, GLOBAL_USER);
-               } else {
-                       /* enable local apps */
-                       n_apps = g_list_length(data->pkgs);
-                       if (n_apps) {
-                               pkgs = malloc(sizeof(char *) * n_apps);
-                               if (pkgs == NULL)
-                                       printf("Out of memory\n");
-
-                               for (list = data->pkgs, i = 0; list; list = list->next, i++) {
-                                       printf("ensable multiple apps %s\n", (char *)list->data);
-                                       pkgs[i] = (char *)list->data;
-                               }
-
-                               data->end_count = n_apps;
-                               ret = pkgmgr_client_usr_activate_apps(pc, pkgs, n_apps,
-                                               __apps_return_cb, data, target_uid);
+       if (strcmp(data->pkg_type, "app") == 0)
+               ret = __activate_app(pc, data, target_uid);
+       else
+               ret = __activate_pkg(pc, &listen_pc, data, target_uid);
 
-                               if (pkgs)
-                                       free(pkgs);
-                       } else {
-                       /* enable local app */
-                       printf("enable apps %s\n", data->pkgid);
-                       ret = pkgmgr_client_usr_activate_app(pc, data->pkgid,
-                                       __app_return_cb, data, target_uid);
-                       }
-               }
-               pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       } else {
-               listen_pc = pkgmgr_client_new(PC_LISTENING);
-               if (listen_pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       pkgmgr_client_free(pc);
-                       return -1;
-               }
-               ret = pkgmgr_client_listen_status(listen_pc, __return_cb, data);
-               if (ret < 0) {
-                       printf("Failed to set callback[%d]\n", ret);
-                       pkgmgr_client_free(pc);
-                       pkgmgr_client_free(listen_pc);
-                       return ret;
-               }
-               ret = pkgmgr_client_usr_activate(pc, data->pkg_type, data->pkgid,
-                               target_uid);
-       }
        if (ret < 0) {
                pkgmgr_client_free(pc);
                if (listen_pc)
@@ -1209,17 +1221,92 @@ static int __activate_req_dispatcher(pm_tool_args *data, uid_t target_uid)
        return data->result;
 }
 
-static int __deactivate_req_dispatcher(pm_tool_args *data, uid_t target_uid)
+static int __deactivate_app(pkgmgr_client *pc,
+               pm_tool_args *data, uid_t target_uid)
 {
        int ret;
        pkgmgrinfo_appinfo_h appinfo_h;
-       pkgmgr_client *pc;
-       pkgmgr_client *listen_pc = NULL;
        const char **pkgs = NULL;
        GList *list;
        int i;
        int n_apps = 0;
 
+       ret = pkgmgrinfo_appinfo_get_usr_appinfo(data->pkgid,
+                       target_uid, &appinfo_h);
+       if (ret != PMINFO_R_OK) {
+               printf("Failed to get appinfo[%s]\n", data->pkgid);
+               return -1;
+       }
+       pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
+
+       if (data->global) {
+               if (data->uid != -1 && data->uid != getuid()) {
+                       printf("Invalid uid : %d\n", data->uid);
+                       return -1;
+               }
+               if (data->uid != -1)
+                       /* disable global app for this user only */
+                       ret = pkgmgr_client_deactivate_global_app_for_uid(pc,
+                                       data->pkgid, __app_return_cb, NULL,
+                                       __get_current_user_id());
+               else
+                       /* disable global app for all user */
+                       ret = pkgmgr_client_usr_deactivate_app(pc, data->pkgid,
+                                       __app_return_cb, NULL, GLOBAL_USER);
+       } else {
+               /* disable local apps */
+               n_apps = g_list_length(data->pkgs);
+               if (n_apps) {
+                       pkgs = malloc(sizeof(char *) * n_apps);
+                       if (pkgs == NULL) {
+                               printf("Out of memory\n");
+                               return -1;
+                       }
+
+                       for (list = data->pkgs, i = 0; list; list = list->next, i++)
+                               pkgs[i] = (char *)list->data;
+
+                       data->end_count = n_apps;
+                       ret = pkgmgr_client_usr_deactivate_apps(pc, pkgs, n_apps,
+                                       __apps_return_cb, data, target_uid);
+
+                       if (pkgs)
+                               free(pkgs);
+               } else {
+                       /* disable local app */
+                       ret = pkgmgr_client_usr_deactivate_app(pc, data->pkgid,
+                                       __app_return_cb, NULL, target_uid);
+               }
+       }
+
+       return ret;
+}
+
+static int __deactivate_pkg(pkgmgr_client *pc, pkgmgr_client **listen_pc,
+               pm_tool_args *data, uid_t target_uid)
+{
+       int ret;
+
+       *listen_pc = pkgmgr_client_new(PC_LISTENING);
+       if (*listen_pc == NULL) {
+               printf("PkgMgr Client Creation Failed\n");
+               return -1;
+       }
+       ret = pkgmgr_client_listen_status(*listen_pc, __return_cb, data);
+       if (ret < 0) {
+               printf("Failed to set callback[%d]\n", ret);
+               return ret;
+       }
+       return pkgmgr_client_usr_deactivate(pc, data->pkg_type, data->pkgid,
+                       target_uid);
+}
+
+static int __deactivate_req_dispatcher(pm_tool_args *data, uid_t target_uid)
+{
+       int ret;
+       pkgmgr_client *pc;
+       pkgmgr_client *listen_pc = NULL;
+
        if (data->pkg_type[0] == '\0' || data->pkgid[0] == '\0') {
                __invalid_arg_handler(data);
                return -1;
@@ -1232,75 +1319,11 @@ static int __deactivate_req_dispatcher(pm_tool_args *data, uid_t target_uid)
                return -1;
        }
 
-       if (strcmp(data->pkg_type, "app") == 0) {
-               ret = pkgmgrinfo_appinfo_get_usr_appinfo(data->pkgid,
-                               target_uid, &appinfo_h);
-               if (ret != PMINFO_R_OK) {
-                       printf("Failed to get appinfo[%s]\n", data->pkgid);
-                       pkgmgr_client_free(pc);
-                       return -1;
-               }
-
-               if (data->global) {
-                       if (data->uid != -1 && data->uid != getuid()) {
-                               printf("Invalid uid : %d\n", data->uid);
-                               pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-                               pkgmgr_client_free(pc);
-                               return -1;
-                       }
-                       if (data->uid != -1)
-                               /* disable global app for this user only */
-                               ret = pkgmgr_client_deactivate_global_app_for_uid(pc,
-                                               data->pkgid, __app_return_cb, NULL,
-                                               __get_current_user_id());
-                       else
-                               /* disable global app for all user */
-                               ret = pkgmgr_client_usr_deactivate_app(pc, data->pkgid,
-                                               __app_return_cb, NULL, GLOBAL_USER);
-               } else {
-                       /* disable local apps */
-                       n_apps = g_list_length(data->pkgs);
-                       if (n_apps) {
-                               pkgs = malloc(sizeof(char *) * n_apps);
-                               if (pkgs == NULL)
-                                       printf("Out of memory\n");
-
-                               for (list = data->pkgs, i = 0; list; list = list->next, i++) {
-                                       printf("disable multiple apps %s\n", (char *)list->data);
-                                       pkgs[i] = (char *)list->data;
-                               }
-
-                               data->end_count = n_apps;
-                               ret = pkgmgr_client_usr_deactivate_apps(pc, pkgs, n_apps,
-                                               __apps_return_cb, data, target_uid);
-
-                               if (pkgs)
-                                       free(pkgs);
-                       } else {
-                               /* disable local app */
-                               ret = pkgmgr_client_usr_deactivate_app(pc, data->pkgid,
-                                               __app_return_cb, NULL, target_uid);
-                       }
-               }
+       if (strcmp(data->pkg_type, "app") == 0)
+               ret = __deactivate_app(pc, data, target_uid);
+       else
+               ret = __deactivate_pkg(pc, &listen_pc, data, target_uid);
 
-               pkgmgrinfo_appinfo_destroy_appinfo(appinfo_h);
-       } else {
-               listen_pc = pkgmgr_client_new(PC_LISTENING);
-               if (listen_pc == NULL) {
-                       printf("PkgMgr Client Creation Failed\n");
-                       pkgmgr_client_free(pc);
-                       return -1;
-               }
-               ret = pkgmgr_client_listen_status(listen_pc, __return_cb, data);
-               if (ret < 0) {
-                       printf("Failed to set callback[%d]\n", ret);
-                       pkgmgr_client_free(pc);
-                       pkgmgr_client_free(listen_pc);
-                       return ret;
-               }
-               ret = pkgmgr_client_usr_deactivate(pc, data->pkg_type, data->pkgid,
-                               target_uid);
-       }
        if (ret < 0) {
                pkgmgr_client_free(pc);
                if (listen_pc)