Extract unit functions for reducing duplicated code 86/277286/2
authorSuyeon Hwang <stom.hwang@samsung.com>
Mon, 4 Jul 2022 11:01:45 +0000 (20:01 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Tue, 5 Jul 2022 03:50:59 +0000 (12:50 +0900)
- Issue:
To get some dynamic values, there are too many duplicated code used.

- Solution:
This patch extracts duplicated codes and creates new functions using the
codes. Using these new functions, we can remove duplicated codes from
the file.

Change-Id: I926f105e5ed124b10ddc55eecc7844aa83c08033
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
engine-parser/src/tts-engine-parser.c

index 20e3cdb..77ebe26 100644 (file)
@@ -99,7 +99,6 @@ static xmlDocPtr g_doc;
 GumUser *g_guser = NULL;
 uid_t g_uid = 301;     // app_fw
 gid_t g_gid = 301;     // app_fw
-GumUserType g_ut = GUM_USERTYPE_NONE;
 gchar *g_user_type = NULL;
 
 char *g_dir_config_base = NULL;
@@ -601,23 +600,16 @@ static int __write_metadata_inxml(const char *pkgid, const char *appid, GList *l
 
 }
 
-EXPORT_API
-int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *list)
+static gchar* __get_user_type(GumUser *user)
 {
-       LOGD("METADATA INSTALL");
-       LOGD("pkgid(%s) appid(%s) list(%u)", pkgid, appid, g_list_length(list));
-
-       int ret = -1;
-       ret = pkgmgr_installer_info_get_target_uid(&g_uid);
-       if (ret < 0) {
-               LOGE("[ERROR] Fail to get target uid");
-               return 0;
-       } else {
-               LOGD("uid(%u)", g_uid);
-               printf("[Parser Debug][DEBUG] uid(%u)", g_uid);
-       }
+       GumUserType gumut = GUM_USERTYPE_NONE;
+       g_object_get(G_OBJECT(user), "usertype", &gumut, NULL);
+       gchar* user_type = g_strdup(gum_user_type_to_string(gumut));
+       return user_type;
+}
 
-       uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
+static int __get_global_user_type(uid_t globalapp_uid)
+{
        if (globalapp_uid == g_uid) {
                g_user_type = g_strdup("admin");
        } else {
@@ -628,16 +620,13 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *
                }
 
                g_object_get(G_OBJECT(g_guser), "gid", &g_gid, NULL);
-               g_object_get(G_OBJECT(g_guser), "usertype", &g_ut, NULL);
-               g_user_type = g_strdup(gum_user_type_to_string(g_ut));
+               g_user_type = __get_user_type(g_guser);
        }
 
        if (NULL == g_user_type) {
                LOGE("[ERROR] Fail to allocate memory");
-               if (NULL != g_guser) {
-                       g_object_unref(g_guser);
-                       g_guser = NULL;
-               }
+               g_object_unref(g_guser);
+               g_guser = NULL;
                return -1;
        }
 
@@ -650,6 +639,56 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *
                return -1;
        }
 
+       return 0;
+}
+
+static int __get_user_list(GumUserService **gus, GumUserList **users)
+{
+       if (NULL == gus || NULL == users) {
+               return -1;
+       }
+
+       GumUserService *temp_gus = NULL;
+       GumUserList *temp_users = NULL;
+
+       temp_gus = gum_user_service_create_sync(TRUE);
+       if (!temp_gus) {
+               LOGE("Failed to create gum user service");
+               return -1;
+       }
+
+       gchar **query = g_strsplit("admin,normal", ",", -1);
+       temp_users = gum_user_service_get_user_list_sync(temp_gus, (const gchar *const *)query);
+       g_strfreev(query);
+
+       if (!temp_users) {
+               LOGD("NO users");
+       }
+
+       *gus = temp_gus;
+       *users = temp_users;
+       return 0;
+}
+
+EXPORT_API
+int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *list)
+{
+       LOGD("METADATA INSTALL");
+       LOGD("pkgid(%s) appid(%s) list(%u)", pkgid, appid, g_list_length(list));
+
+       if (0 > pkgmgr_installer_info_get_target_uid(&g_uid)) {
+               LOGE("[ERROR] Fail to get target uid");
+               return 0;
+       }
+
+       LOGD("uid(%u)", g_uid);
+       printf("[Parser Debug][DEBUG] uid(%u)", g_uid);
+
+       uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
+       if (0 != __get_global_user_type(globalapp_uid)) {
+               return -1;
+       }
+
        if (globalapp_uid == g_uid) {
                /* global directory */
                LOGD("[DEBUG] usertype: %s", g_user_type);
@@ -695,59 +734,34 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *
 
                GumUserService *gus = NULL;
                GumUserList *users = NULL;
-               GumUserList *iter = NULL;
-               GumUser *user = NULL;
-               gchar **query;
-               GumUserType gumut = GUM_USERTYPE_NONE;
-               gchar *user_type = NULL;
-
-               uid_t uid;
-               gid_t gid;
-               gchar *home_dir = NULL;
-
-               gus = gum_user_service_create_sync(TRUE);
-               if (!gus) {
-                       LOGE("Failed to create gum user service");
-                       G_FREE(g_user_type)
-                       return -1;
-               }
-
-               query = g_strsplit("admin,normal", ",", -1);
-
-               users = gum_user_service_get_user_list_sync(gus, (const gchar *const *)query);
-               g_strfreev(query);
 
-               if (!users) {
-                       LOGD("NO users");
-                       g_object_unref(gus);
-                       gus = NULL;
+               if (0 != __get_user_list(&gus, &users)) {
                        G_FREE(g_user_type)
-                       return 0;
+                       return -1;
                }
 
                /* Make new user list */
-
-               iter = users;
+               GumUserList *iter = users;
                while (iter != NULL) {
-                       user = (GumUser*) iter->data;
-                       g_object_get(G_OBJECT(user), "uid", &uid, NULL);
-                       G_FREE(home_dir)
-
-                       g_object_get(G_OBJECT(user), "gid", &gid, NULL);
-                       g_object_get(G_OBJECT(user), "homedir", &home_dir, NULL);
-                       g_object_get(G_OBJECT(user), "usertype", &gumut, NULL);
-                       user_type = g_strdup(gum_user_type_to_string(gumut));
+                       GumUser *user = (GumUser*) iter->data;
+                       gchar *user_type = __get_user_type(user);
                        if (NULL == user_type) {
                                gum_user_service_list_free(users);
-                               G_FREE(home_dir)
                                g_object_unref(gus);
                                gus = NULL;
                                return -1;
                        }
 
+                       gchar *home_dir = NULL;
+                       g_object_get(G_OBJECT(user), "homedir", &home_dir, NULL);
                        LOGD("[DEBUG] user info");
                        if (NULL != home_dir) {
+                               uid_t uid;
+                               gid_t gid;
+                               g_object_get(G_OBJECT(user), "uid", &uid, NULL);
+                               g_object_get(G_OBJECT(user), "gid", &gid, NULL);
                                LOGD("[DEBUG] uid(%u), gid(%u), user_type(%s), home_dir(%s)", uid, gid, user_type, home_dir);
+
                                FREE(g_dir_config_base);
                                FREE(g_dir_home);
                                FREE(g_dir_engine_base);
@@ -782,22 +796,23 @@ int PKGMGR_MDPARSER_PLUGIN_INSTALL(const char *pkgid, const char *appid, GList *
                                        LOGE("[ERROR] Fail to make engine info file");
                                }
 
-                               G_FREE(home_dir)
                        }
 
+                       G_FREE(home_dir)
                        G_FREE(user_type)
                        iter = g_list_next(iter);
                }
 
-               gum_user_service_list_free(users);
+               if (users) {
+                       gum_user_service_list_free(users);
+               }
                g_object_unref(gus);
                gus = NULL;
        } else {
                /* user directory */
                LOGD("[DEBUG] usertype: %s", g_user_type);
 
-               ret = tzplatform_set_user(g_uid);
-               if (ret < 0) {
+               if (0 > tzplatform_set_user(g_uid)) {
                        LOGE("[ERROR] Invalid uid");
                        g_object_unref(g_guser);
                        g_guser = NULL;
@@ -876,48 +891,16 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList
        LOGD("METADATA UNINSTALL");
        LOGD("pkgid(%s) appid(%s) list(%u)", pkgid, appid, g_list_length(list));
 
-       int ret = -1;
-       ret = pkgmgr_installer_info_get_target_uid(&g_uid);
-       if (ret < 0) {
+       if (0 > pkgmgr_installer_info_get_target_uid(&g_uid)) {
                LOGE("[ERROR] Fail to get target uid");
                return 0;
-       } else {
-               LOGD("uid(%u)", g_uid);
-               printf("[Parser Debug][DEBUG] uid(%u)", g_uid);
        }
 
-       uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
-       if (globalapp_uid == g_uid) {
-               g_user_type = g_strdup("admin");
-               LOGD("[DEBUG] g_user_type: %s (%u)", g_user_type, globalapp_uid);
-       } else {
-               g_guser = gum_user_get_sync(g_uid, FALSE);
-               if (NULL == g_guser) {
-                       LOGE("[ERROR] g_guser is NULL");
-                       return -1;
-               }
-
-               g_object_get(G_OBJECT(g_guser), "usertype", &g_ut, NULL);
-               g_user_type = g_strdup(gum_user_type_to_string(g_ut));
-
-               LOGD("[DEBUG] g_user_type: %s (%u)", g_user_type, globalapp_uid);
-       }
-
-       if (NULL == g_user_type) {
-               LOGE("[ERROR] Fail to allocate memory");
-               if (NULL != g_guser) {
-                       g_object_unref(g_guser);
-                       g_guser = NULL;
-               }
-               return -1;
-       }
+       LOGD("uid(%u)", g_uid);
+       printf("[Parser Debug][DEBUG] uid(%u)", g_uid);
 
-       if (0 == strcmp(g_user_type, "none")) {
-               /* GUM_USERTYPE_NONE */
-               LOGE("[ERROR] Fail to get target uid");
-               g_object_unref(g_guser);
-               g_guser = NULL;
-               G_FREE(g_user_type)
+       uid_t globalapp_uid = tzplatform_getuid(TZ_SYS_GLOBALAPP_USER);
+       if (0 != __get_global_user_type(globalapp_uid)) {
                return -1;
        }
 
@@ -941,56 +924,26 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList
 
                GumUserService *gus = NULL;
                GumUserList *users = NULL;
-               GumUserList *iter = NULL;
-               GumUser *user = NULL;
-               gchar **query;
-               GumUserType gumut = GUM_USERTYPE_NONE;
-               gchar *user_type = NULL;
 
-               uid_t uid;
-               gchar *home_dir = NULL;
-
-               GList *md_iter = NULL;
-               metadata *md = NULL;
-
-               gus = gum_user_service_create_sync(TRUE);
-               if (!gus) {
-                       LOGE("Failed to create gum user service");
+               if (0 != __get_user_list(&gus, &users)) {
                        G_FREE(g_user_type)
                        return -1;
                }
 
-               query = g_strsplit("admin,normal", ",", -1);
-
-               users = gum_user_service_get_user_list_sync(gus, (const gchar *const *)query);
-               g_strfreev(query);
-
-               if (!users) {
-                       LOGD("NO users");
-                       g_object_unref(gus);
-                       gus = NULL;
-                       G_FREE(g_user_type)
-                       return 0;
-               }
-
                /* Make new user list */
-
-               iter = users;
+               GumUserList *iter = users;
                while (iter != NULL) {
-                       user = (GumUser*) iter->data;
-                       g_object_get(G_OBJECT(user), "uid", &uid, NULL);
-                       G_FREE(home_dir)
-                       g_object_get(G_OBJECT(user), "homedir", &home_dir, NULL);
-                       g_object_get(G_OBJECT(user), "usertype", &gumut, NULL);
-                       user_type = g_strdup(gum_user_type_to_string(gumut));
+                       GumUser *user = (GumUser*) iter->data;
+                       gchar *user_type = __get_user_type(user);
                        if (NULL == user_type) {
                                gum_user_service_list_free(users);
-                               G_FREE(home_dir)
                                g_object_unref(gus);
                                gus = NULL;
                                return -1;
                        }
 
+                       gchar *home_dir = NULL;
+                       g_object_get(G_OBJECT(user), "homedir", &home_dir, NULL);
                        if (NULL != home_dir) {
                                FREE(g_dir_engine_info);
                                g_dir_engine_info = (char*)calloc(strlen(home_dir) + 34, sizeof(char));
@@ -1005,19 +958,22 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList
 
                                snprintf(g_dir_engine_info, strlen(home_dir) + 34, "%s/share/.voice/tts/1.0/engine-info", home_dir);
 
-                               md_iter = g_list_first(list);
+                               GList *md_iter = g_list_first(list);
                                while (NULL != md_iter) {
-                                       md = (metadata *)md_iter->data;
+                                       metadata *md = (metadata *)md_iter->data;
                                        LOGD(" - key(%s) value(%s)", md->key, md->value);
                                        md_iter = g_list_next(md_iter);
                                }
 
+                               uid_t uid;
+                               g_object_get(G_OBJECT(user), "uid", &uid, NULL);
                                if (0 != __remove_engine_info_xml(pkgid, user_type, uid)) {
                                        LOGE("[ERROR] Fail to remove engine info file");
                                }
 
-                               G_FREE(home_dir)
                        }
+
+                       G_FREE(home_dir)
                        G_FREE(user_type)
 
                        LOGD("Finish release memory");
@@ -1025,15 +981,16 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList
                        LOGD("Finish next iter");
                }
 
-               gum_user_service_list_free(users);
+               if (users) {
+                       gum_user_service_list_free(users);
+               }
                g_object_unref(gus);
                gus = NULL;
        } else {
                /* user directory */
                LOGD("[DEBUG] usertype: %s", g_user_type);
 
-               ret = tzplatform_set_user(g_uid);
-               if (ret < 0) {
+               if (0 > tzplatform_set_user(g_uid)) {
                        LOGE("[ERROR] Invalid uid");
                        g_object_unref(g_guser);
                        g_guser = NULL;
@@ -1056,7 +1013,6 @@ int PKGMGR_MDPARSER_PLUGIN_UNINSTALL(const char *pkgid, const char *appid, GList
                if (0 != __remove_engine_info_xml(pkgid, g_user_type, g_uid)) {
                        LOGE("[ERROR] Fail to remove engine info file");
                }
-
        }
 
        if (NULL != g_guser) {