From 44441a39b48e435ef1e669864a0a6e6a0fb84790 Mon Sep 17 00:00:00 2001 From: Suyeon Hwang Date: Tue, 29 Nov 2022 16:53:30 +0900 Subject: [PATCH] Make function for duplicated logic - Issue: Some code logics are used repeatedly. - Solution: This patch makes functions for these logics. Through this patch, duplicated logics are removed from vc_config_mgr module. Change-Id: Ic923b0aa52b93ca2286aa80d386ca77b295a7aaf Signed-off-by: Suyeon Hwang --- common/vc_config_mgr.c | 870 +++++++++++++++++------------------------ 1 file changed, 354 insertions(+), 516 deletions(-) diff --git a/common/vc_config_mgr.c b/common/vc_config_mgr.c index aa391d3..e77e7f9 100644 --- a/common/vc_config_mgr.c +++ b/common/vc_config_mgr.c @@ -50,6 +50,19 @@ typedef struct { int dir_wd; } vc_engine_inotify_s; +typedef struct { + const char* before_lang; + const char* current_lang; +} lang_cb_parameter_s; + +typedef struct { + const char *engine_appid; +} engine_cb_parameter_s; + +typedef struct { + bool enable; +} enabled_cb_parameter_s; + const char* vc_config_tag() { return TAG_VCCONFIG; @@ -78,6 +91,165 @@ static int __vc_config_mgr_set_default_language(const char* language); int __vc_config_mgr_print_engine_info(); int __vc_config_mgr_print_client_info(); +static gint __compare_uid_in_client_list(gconstpointer a, gconstpointer b) +{ + const vc_config_client_s *client_info = a; + uintptr_t ptr_uid = (uintptr_t)b; + unsigned int uid = ptr_uid; + + if (NULL == client_info) { + return 1; + } + + if (uid == client_info->uid) { + SLOG(LOG_DEBUG, vc_config_tag(), "Find client information of %d", uid); + return 0; + } + + return 1; +} + +static vc_config_client_s *__find_client_info(unsigned int uid) +{ + uintptr_t ptr_uid = uid; + GSList *target = g_slist_find_custom(g_config_client_list, (gconstpointer)ptr_uid, __compare_uid_in_client_list); + + vc_config_client_s *result = NULL; + if (NULL != target) { + result = target->data; + } + + return result; +} + +static gint __compare_engine_id_in_engine_list(gconstpointer a, gconstpointer b) +{ + const vc_engine_info_s *engine_info = a; + const char *engine_id = b; + + if (NULL == engine_id) { + return 1; + } + + if (NULL == engine_info || NULL == engine_info->uuid) { + return 1; + } + + SLOG(LOG_DEBUG, vc_config_tag(), "Compare engine(%s). Target(%s)", engine_info->uuid, engine_id); + return strcmp(engine_info->uuid, engine_id); +} + +static vc_engine_info_s *__find_engine_info(const char *engine_id) +{ + GSList *target = g_slist_find_custom(g_engine_list, engine_id, __compare_engine_id_in_engine_list); + vc_engine_info_s *result = NULL; + if (NULL != target) { + result = target->data; + } + + return result; +} + +static gint __compare_language_in_languages_of_engine_info(gconstpointer a, gconstpointer b) +{ + const char *language = a; + const char *target_language = b; + + if (NULL == language || NULL == target_language) { + return 1; + } + + SLOG(LOG_DEBUG, vc_config_tag(), "Compare langauge(%s), Target(%s)", language, target_language); + return strcmp(language, target_language); +} + +static bool __is_language_valid(vc_engine_info_s *engine_info, const char *language) +{ + if (NULL == engine_info || NULL == language) { + return false; + } + + GSList *target = g_slist_find_custom(engine_info->languages, language, __compare_language_in_languages_of_engine_info); + return (NULL != target); +} + +static void __invoke_lang_cb_in_client_list(gpointer data, gpointer user_data) +{ + vc_config_client_s* client_info = (vc_config_client_s*)data; + lang_cb_parameter_s* parameter = (lang_cb_parameter_s*)user_data; + + if (NULL == client_info || NULL == parameter) { + return; + } + + if (NULL != client_info->lang_cb) { + client_info->lang_cb(parameter->before_lang, parameter->current_lang); + } +} + +static void __invoke_engine_cb_in_client_list(gpointer data, gpointer user_data) +{ + vc_config_client_s* client_info = (vc_config_client_s*)data; + engine_cb_parameter_s* parameter = (engine_cb_parameter_s*)user_data; + + if (NULL == client_info || NULL == parameter) { + return; + } + + if (NULL != client_info->engine_cb) { + client_info->engine_cb(parameter->engine_appid); + } +} + +static void __invoke_enabled_cb_in_client_list(gpointer data, gpointer user_data) +{ + vc_config_client_s* client_info = (vc_config_client_s*)data; + enabled_cb_parameter_s* parameter = (enabled_cb_parameter_s*)user_data; + + if (NULL == client_info || NULL == parameter) { + return; + } + + if (NULL != client_info->enabled_cb) { + client_info->enabled_cb(parameter->enable); + } +} + +static void __vc_config_mgr_notify_language_changed(const char* before_lang, const char* current_lang) +{ + if (NULL == before_lang || NULL == current_lang) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Input parameter is NULL"); + return; + } + + lang_cb_parameter_s lang_cb_parameter; + lang_cb_parameter.before_lang = before_lang; + lang_cb_parameter.current_lang = current_lang; + + g_slist_foreach(g_config_client_list, __invoke_lang_cb_in_client_list, &lang_cb_parameter); +} + +static void __vc_config_mgr_notify_engine_changed(const char *engine_appid) +{ + if (NULL == engine_appid) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Input parameter is NULL"); + return; + } + + engine_cb_parameter_s engine_cb_parameter; + engine_cb_parameter.engine_appid = engine_appid; + + g_slist_foreach(g_config_client_list, __invoke_engine_cb_in_client_list, &engine_cb_parameter); +} + +static void __vc_config_mgr_notify_enabled_changed(bool enable) +{ + enabled_cb_parameter_s enabled_cb_parameter; + enabled_cb_parameter.enable = enable; + + g_slist_foreach(g_config_client_list, __invoke_enabled_cb_in_client_list, &enabled_cb_parameter); +} + int vc_config_convert_error_code(vc_config_error_e code) { if (code == VC_CONFIG_ERROR_NONE) return VC_ERROR_NONE; @@ -96,48 +268,26 @@ int __vc_config_mgr_check_engine_is_valid(const char* engine_id) { if (NULL == engine_id) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Input parameter is NULL"); - return -1; + return VC_CONFIG_ERROR_INVALID_PARAMETER; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; - if (0 >= g_slist_length(g_engine_list)) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine!!"); - return -1; + return VC_CONFIG_ERROR_OPERATION_FAILED; } - iter = g_slist_nth(g_engine_list, 0); - - while (NULL != iter) { - engine_info = iter->data; - - if (NULL == engine_info) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL"); - return -1; - } - - if (NULL == engine_info->uuid) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine id is NULL"); - return -1; - } - - if (!strcmp(engine_id, engine_info->uuid)) { - SLOG(LOG_DEBUG, vc_config_tag(), "Default engine is valid : %s", engine_id); - return VC_ERROR_NONE; - } - - iter = g_slist_next(iter); + if (NULL != __find_engine_info(engine_id)) { + SLOG(LOG_DEBUG, vc_config_tag(), "Default engine is valid : %s", engine_id); + return VC_CONFIG_ERROR_NONE; } - iter = g_slist_nth(g_engine_list, 0); + GSList *iter = g_slist_nth(g_engine_list, 0); if (NULL == iter) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] No engine in list"); return -1; } - engine_info = iter->data; - + vc_engine_info_s *engine_info = iter->data; if (NULL == engine_info) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL"); return -1; @@ -174,56 +324,21 @@ bool __vc_config_mgr_check_lang_is_valid(const char* engine_id, const char* lang return false; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; - if (0 >= g_slist_length(g_engine_list)) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine!!"); return false; } - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - - while (NULL != iter) { - engine_info = iter->data; - - if (NULL == engine_info) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL"); - return false; - } - - if (0 != strcmp(engine_id, engine_info->uuid)) { - iter = g_slist_next(iter); - continue; - } - - GSList *iter_lang = NULL; - char* engine_lang; - if (g_slist_length(engine_info->languages) > 0) { - /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - - int i = 1; - while (NULL != iter_lang) { - /*Get handle data from list*/ - engine_lang = iter_lang->data; - - SLOG(LOG_DEBUG, vc_config_tag(), " [%dth] %s", i, engine_lang); - - if (0 == strcmp(language, engine_lang)) { - return true; - } - - /*Get next item*/ - iter_lang = g_slist_next(iter_lang); - i++; - } - } - break; + vc_engine_info_s *engine_info = __find_engine_info(engine_id); + if (NULL == engine_info) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine_id); + return false; } - return false; + bool is_language_valid = __is_language_valid(engine_info, language); + SLOG(LOG_INFO, vc_config_tag(), "[INFO] Language(%s), is valid(%d)", language, (int)is_language_valid); + + return is_language_valid; } int __vc_config_mgr_select_lang(const char* engine_id, char** language) @@ -233,69 +348,39 @@ int __vc_config_mgr_select_lang(const char* engine_id, char** language) return VC_ERROR_OPERATION_FAILED; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; - if (0 >= g_slist_length(g_engine_list)) { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine!!"); return VC_ERROR_OPERATION_FAILED; } - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - - while (NULL != iter) { - engine_info = iter->data; - - if (NULL == engine_info) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] engine info is NULL"); - iter = g_slist_next(iter); - continue; - } - - if (0 != strcmp(engine_id, engine_info->uuid)) { - iter = g_slist_next(iter); - continue; - } - - if (NULL == engine_info->default_lang) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] default language of engine info is NULL"); - return VC_ERROR_INVALID_LANGUAGE; - } + vc_engine_info_s *engine_info = __find_engine_info(engine_id); + if (NULL == engine_info) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine_id); + return VC_ERROR_INVALID_PARAMETER; + } - *language = strdup(engine_info->default_lang); + if (NULL == engine_info->default_lang) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] default language of engine info is NULL"); + return VC_CONFIG_ERROR_INVALID_LANGUAGE; + } - if (NULL != *language) { - SLOG(LOG_DEBUG, vc_config_tag(), "Selected language : %s", *language); - return VC_ERROR_NONE; - } + *language = strdup(engine_info->default_lang); + if (NULL == *language) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to allocate memory"); + return VC_CONFIG_ERROR_OUT_OF_MEMORY; } - return VC_ERROR_OPERATION_FAILED; + SLOG(LOG_DEBUG, vc_config_tag(), "Selected language : %s", *language); + return VC_CONFIG_ERROR_NONE; } int __vc_config_release_client(unsigned int uid) { - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - - if (0 < g_slist_length(g_config_client_list)) { - /* Check uid */ - iter = g_slist_nth(g_config_client_list, 0); + vc_config_client_s* temp_client = __find_client_info(uid); - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (uid == temp_client->uid) { - g_config_client_list = g_slist_remove(g_config_client_list, temp_client); - free(temp_client); - break; - } - } - - iter = g_slist_next(iter); - } + if (NULL != temp_client) { + g_config_client_list = g_slist_remove(g_config_client_list, temp_client); + free(temp_client); } SLOG(LOG_DEBUG, vc_config_tag(), "Client count (%d)", g_slist_length(g_config_client_list)); @@ -456,9 +541,9 @@ static Eina_Bool __vc_config_mgr_engine_config_inotify_event_callback(void* data SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to get engine info when config updated"); } __vc_config_mgr_print_engine_info(); - bool support = vc_config_check_default_language_is_valid(g_config_info->language); - if (false == support) { - SLOG(LOG_DEBUG, vc_config_tag(), "[ERROR] Default language is valid"); + bool is_language_valid = vc_config_check_default_language_is_valid(g_config_info->language); + if (false == is_language_valid) { + SLOG(LOG_DEBUG, vc_config_tag(), "[ERROR] Default language is not valid"); char* temp_lang = NULL; ret = __vc_config_mgr_select_lang(g_config_info->engine_id, &temp_lang); if (0 != ret) { @@ -599,9 +684,6 @@ Eina_Bool vc_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handle char* engine = NULL; int enabled = -1; - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - if (0 != vc_parser_find_config_changed(&auto_lang, &lang, &engine, &enabled)) return ECORE_CALLBACK_PASS_ON; @@ -619,25 +701,13 @@ Eina_Bool vc_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handle g_config_info->language = strdup(lang); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (NULL != temp_client->lang_cb) { - temp_client->lang_cb(before_lang, lang); - } - } - - iter = g_slist_next(iter); - } + __vc_config_mgr_notify_language_changed(before_lang, lang); if (NULL != before_lang) free(before_lang); + free(lang); + lang = NULL; } - if (NULL != lang) free(lang); - /* Only Engine changed */ if (NULL != engine) { @@ -648,22 +718,7 @@ Eina_Bool vc_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handle g_config_info->engine_id = strdup(engine); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (NULL != temp_client->engine_cb) { - temp_client->engine_cb(engine); - } - } - - iter = g_slist_next(iter); - } - } - - if (NULL != engine) { + __vc_config_mgr_notify_engine_changed(engine); free(engine); engine = NULL; } @@ -672,19 +727,7 @@ Eina_Bool vc_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handle g_config_info->enabled = enabled; /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (NULL != temp_client->enabled_cb) { - temp_client->enabled_cb(enabled); - } - } - - iter = g_slist_next(iter); - } + __vc_config_mgr_notify_enabled_changed((bool)enabled); } } else { SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Undefined event"); @@ -745,22 +788,7 @@ int __vc_config_set_auto_language() before_lang, g_config_info->language); /* Call all callbacks of client*/ - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (NULL != temp_client->lang_cb) { - temp_client->lang_cb(before_lang, g_config_info->language); - } - } - - iter = g_slist_next(iter); - } + __vc_config_mgr_notify_language_changed(before_lang, g_config_info->language); if (NULL != before_lang) free(before_lang); } else { @@ -793,22 +821,7 @@ int __vc_config_set_auto_language() before_lang, g_config_info->language); /* Call all callbacks of client*/ - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (NULL != temp_client->lang_cb) { - temp_client->lang_cb(before_lang, g_config_info->language); - } - } - - iter = g_slist_next(iter); - } + __vc_config_mgr_notify_language_changed(before_lang, g_config_info->language); if (NULL != before_lang) free(before_lang); } @@ -830,8 +843,6 @@ void __vc_config_language_changed_cb(keynode_t *key, void *data) int vc_config_mgr_initialize(unsigned int uid) { - GSList *iter = NULL; - int* get_uid; vc_config_client_s* temp_client = NULL; SLOG(LOG_INFO, vc_config_tag(), "[WARNING] Enter critical section"); @@ -840,20 +851,12 @@ int vc_config_mgr_initialize(unsigned int uid) if (0 < g_slist_length(g_config_client_list)) { /* Check uid */ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - get_uid = iter->data; - - if (uid == *get_uid) { - SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] uid(%u) has already registered", uid); - pthread_mutex_unlock(&vc_config_mgr_mutex); - ecore_thread_main_loop_end(); - SLOG(LOG_DEBUG, vc_config_tag(), "[WARNING] Leave critical section"); - return VC_ERROR_NONE; - } - - iter = g_slist_next(iter); + if (NULL != __find_client_info(uid)) { + SLOG(LOG_WARN, vc_config_tag(), "[CONFIG] uid(%u) has already registered", uid); + pthread_mutex_unlock(&vc_config_mgr_mutex); + ecore_thread_main_loop_end(); + SLOG(LOG_DEBUG, vc_config_tag(), "[WARNING] Leave critical section"); + return VC_CONFIG_ERROR_NONE; } temp_client = (vc_config_client_s*)calloc(1, sizeof(vc_config_client_s)); @@ -1135,29 +1138,24 @@ int __vc_config_mgr_unregister_config_event() int vc_config_mgr_set_engine_cb(unsigned int uid, vc_config_engine_changed_cb engine_cb) { - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - ecore_thread_main_loop_begin(); pthread_mutex_lock(&vc_config_mgr_mutex); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; + vc_config_client_s* temp_client = __find_client_info(uid); + if (NULL == temp_client) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid); + pthread_mutex_unlock(&vc_config_mgr_mutex); + ecore_thread_main_loop_end(); + return VC_CONFIG_ERROR_INVALID_PARAMETER; + } - if (NULL != temp_client) { - if (uid == temp_client->uid) { - temp_client->engine_cb = engine_cb; - if (0 != __vc_config_mgr_register_lang_event()) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event"); - pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_CONFIG_ERROR_OPERATION_FAILED; - } - } - } - iter = g_slist_next(iter); + temp_client->engine_cb = engine_cb; + if (VC_CONFIG_ERROR_NONE != __vc_config_mgr_register_lang_event()) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event"); + pthread_mutex_unlock(&vc_config_mgr_mutex); + ecore_thread_main_loop_end(); + return VC_CONFIG_ERROR_OPERATION_FAILED; } pthread_mutex_unlock(&vc_config_mgr_mutex); @@ -1167,27 +1165,21 @@ int vc_config_mgr_set_engine_cb(unsigned int uid, vc_config_engine_changed_cb en int vc_config_mgr_unset_engine_cb(unsigned int uid) { - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - ecore_thread_main_loop_begin(); pthread_mutex_lock(&vc_config_mgr_mutex); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (uid == temp_client->uid) { - temp_client->engine_cb = NULL; - __vc_config_mgr_unregister_config_event(); - } - } - iter = g_slist_next(iter); + vc_config_client_s* temp_client = __find_client_info(uid); + if (NULL == temp_client) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid); + pthread_mutex_unlock(&vc_config_mgr_mutex); + ecore_thread_main_loop_end(); + return VC_CONFIG_ERROR_INVALID_PARAMETER; } + temp_client->engine_cb = NULL; + __vc_config_mgr_unregister_config_event(); + pthread_mutex_unlock(&vc_config_mgr_mutex); ecore_thread_main_loop_end(); return VC_ERROR_NONE; @@ -1196,29 +1188,24 @@ int vc_config_mgr_unset_engine_cb(unsigned int uid) int vc_config_mgr_set_lang_cb(unsigned int uid, vc_config_lang_changed_cb lang_cb) { - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - ecore_thread_main_loop_begin(); pthread_mutex_lock(&vc_config_mgr_mutex); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; + vc_config_client_s* temp_client = __find_client_info(uid); + if (NULL == temp_client) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid); + pthread_mutex_unlock(&vc_config_mgr_mutex); + ecore_thread_main_loop_end(); + return VC_CONFIG_ERROR_INVALID_PARAMETER; + } - if (NULL != temp_client) { - if (uid == temp_client->uid) { - temp_client->lang_cb = lang_cb; - if (0 != __vc_config_mgr_register_lang_event()) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event"); - pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_CONFIG_ERROR_OPERATION_FAILED; - } - } - } - iter = g_slist_next(iter); + temp_client->lang_cb = lang_cb; + if (0 != __vc_config_mgr_register_lang_event()) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to register config event"); + pthread_mutex_unlock(&vc_config_mgr_mutex); + ecore_thread_main_loop_end(); + return VC_CONFIG_ERROR_OPERATION_FAILED; } pthread_mutex_unlock(&vc_config_mgr_mutex); @@ -1228,27 +1215,21 @@ int vc_config_mgr_set_lang_cb(unsigned int uid, vc_config_lang_changed_cb lang_c int vc_config_mgr_unset_lang_cb(unsigned int uid) { - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - ecore_thread_main_loop_begin(); pthread_mutex_lock(&vc_config_mgr_mutex); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (uid == temp_client->uid) { - temp_client->lang_cb = NULL; - __vc_config_mgr_unregister_config_event(); - } - } - iter = g_slist_next(iter); + vc_config_client_s* temp_client = __find_client_info(uid); + if (NULL == temp_client) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid); + pthread_mutex_unlock(&vc_config_mgr_mutex); + ecore_thread_main_loop_end(); + return VC_CONFIG_ERROR_INVALID_PARAMETER; } + temp_client->lang_cb = NULL; + __vc_config_mgr_unregister_config_event(); + pthread_mutex_unlock(&vc_config_mgr_mutex); ecore_thread_main_loop_end(); return VC_ERROR_NONE; @@ -1261,56 +1242,38 @@ int vc_config_mgr_set_enabled_cb(unsigned int uid, vc_config_enabled_cb enabled_ return VC_CONFIG_ERROR_INVALID_PARAMETER; } - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - pthread_mutex_lock(&vc_config_mgr_mutex); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (uid == temp_client->uid) { - temp_client->enabled_cb = enabled_cb; - pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_CONFIG_ERROR_NONE; - } - } - iter = g_slist_next(iter); + vc_config_client_s* temp_client = __find_client_info(uid); + if (NULL == temp_client) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid); + pthread_mutex_unlock(&vc_config_mgr_mutex); + return VC_CONFIG_ERROR_INVALID_PARAMETER; } + temp_client->enabled_cb = enabled_cb; + pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_CONFIG_ERROR_INVALID_PARAMETER; + return VC_CONFIG_ERROR_NONE; } int vc_config_mgr_unset_enabled_cb(unsigned int uid) { - GSList *iter = NULL; - vc_config_client_s* temp_client = NULL; - pthread_mutex_lock(&vc_config_mgr_mutex); /* Call all callbacks of client*/ - iter = g_slist_nth(g_config_client_list, 0); - - while (NULL != iter) { - temp_client = iter->data; - - if (NULL != temp_client) { - if (uid == temp_client->uid) { - temp_client->enabled_cb = NULL; - pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_ERROR_NONE; - } - } - iter = g_slist_next(iter); + vc_config_client_s* temp_client = __find_client_info(uid); + if (NULL == temp_client) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Uid is not valid (%u)", uid); + pthread_mutex_unlock(&vc_config_mgr_mutex); + return VC_CONFIG_ERROR_INVALID_PARAMETER; } + temp_client->enabled_cb = NULL; + pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_CONFIG_ERROR_INVALID_PARAMETER; + return VC_ERROR_NONE; } int vc_config_mgr_get_auto_language(bool* value) @@ -1516,7 +1479,7 @@ int vc_config_mgr_set_engine(const char* engine) /* Check current engine id with new engine id */ if (0 == strncmp(g_config_info->engine_id, engine, strlen(g_config_info->engine_id))) { pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_ERROR_NONE; + return VC_CONFIG_ERROR_NONE; } SLOG(LOG_DEBUG, vc_config_tag(), "New engine id : %s", engine); @@ -1528,97 +1491,46 @@ int vc_config_mgr_set_engine(const char* engine) return ret; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; - bool is_valid_engine = false; - - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - - while (NULL != iter) { - engine_info = iter->data; - - if (NULL == engine_info) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL"); - iter = g_slist_next(iter); - continue; - } - - /* Check engine id is valid */ - if (NULL == engine_info->uuid || 0 != strcmp(engine, engine_info->uuid)) { - iter = g_slist_next(iter); - continue; - } - - if (g_config_info->engine_id) { - free(g_config_info->engine_id); - g_config_info->engine_id = NULL; - } - - g_config_info->engine_id = strdup(engine_info->uuid); - - - /* Engine is valid*/ - GSList *iter_lang = NULL; - char* lang; - bool is_valid_lang = false; - - /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - while (NULL != iter_lang) { - /*Get handle data from list*/ - lang = iter_lang->data; - - SLOG(LOG_DEBUG, vc_config_tag(), " %s", lang); - if (NULL != lang && NULL != g_config_info->language) { - if (0 == strcmp(lang, g_config_info->language)) { - /* language is valid */ - is_valid_lang = true; - break; - } - } - - /*Get next item*/ - iter_lang = g_slist_next(iter_lang); - } + vc_engine_info_s *engine_info = __find_engine_info(engine); + if (NULL == engine_info) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine); + pthread_mutex_unlock(&vc_config_mgr_mutex); + return VC_CONFIG_ERROR_INVALID_PARAMETER; + } - if (false == is_valid_lang) { - if (NULL != g_config_info->language) { - free(g_config_info->language); - g_config_info->language = NULL; + free(g_config_info->engine_id); + g_config_info->engine_id = strdup(engine_info->uuid); - iter_lang = g_slist_nth(engine_info->languages, 0); - if (NULL == iter_lang) { - SLOG(LOG_ERROR, vc_config_tag(), "Fail to get default language"); - break; - } + /* Engine is valid*/ + bool is_language_valid = __is_language_valid(engine_info, g_config_info->language); + SLOG(LOG_ERROR, vc_config_tag(), "[INFO] Language(%s), is valid(%d)", g_config_info->language, (int)is_language_valid); - lang = iter_lang->data; + char* lang = NULL; + if (false == is_language_valid) { + free(g_config_info->language); + g_config_info->language = NULL; - g_config_info->language = strdup(lang); - } + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); + if (NULL == iter_lang || NULL == iter_lang->data) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Fail to get default language. Engine id(%s) is not valid", engine); + pthread_mutex_unlock(&vc_config_mgr_mutex); + return VC_CONFIG_ERROR_OPERATION_FAILED; } - is_valid_engine = true; - break; + lang = iter_lang->data; + g_config_info->language = strdup(lang); } - if (true == is_valid_engine) { - SLOG(LOG_DEBUG, vc_config_tag(), "[Config] Engine changed"); - SLOG(LOG_DEBUG, vc_config_tag(), "Engine : %s", g_config_info->engine_id); - SLOG(LOG_DEBUG, vc_config_tag(), "Auto lang : %s", g_config_info->auto_lang ? "true" : "false"); - SLOG(LOG_DEBUG, vc_config_tag(), "Language : %s", g_config_info->language); - SLOG(LOG_DEBUG, vc_config_tag(), "Enabled : %s", g_config_info->enabled ? "true" : "false"); + SLOG(LOG_DEBUG, vc_config_tag(), "[Config] Engine changed"); + SLOG(LOG_DEBUG, vc_config_tag(), "Engine : %s", g_config_info->engine_id); + SLOG(LOG_DEBUG, vc_config_tag(), "Auto lang : %s", g_config_info->auto_lang ? "true" : "false"); + SLOG(LOG_DEBUG, vc_config_tag(), "Language : %s", g_config_info->language); + SLOG(LOG_DEBUG, vc_config_tag(), "Enabled : %s", g_config_info->enabled ? "true" : "false"); - if (0 != vc_parser_set_engine(g_config_info->engine_id)) { - SLOG(LOG_ERROR, vc_config_tag(), " Fail to save config"); - pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_CONFIG_ERROR_OPERATION_FAILED; - } - } else { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine id is not valid"); + if (0 != vc_parser_set_engine(g_config_info->engine_id)) { + SLOG(LOG_ERROR, vc_config_tag(), " Fail to save config"); pthread_mutex_unlock(&vc_config_mgr_mutex); - return VC_CONFIG_ERROR_INVALID_PARAMETER; + return VC_CONFIG_ERROR_OPERATION_FAILED; } pthread_mutex_unlock(&vc_config_mgr_mutex); @@ -1640,46 +1552,28 @@ int vc_config_mgr_get_language_list(vc_supported_language_cb callback, void* use return -1; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; + vc_engine_info_s *engine_info = __find_engine_info(g_config_info->engine_id); + if (NULL == engine_info) { + SLOG(LOG_ERROR, vc_config_tag(), "Fail to find engine information : %s", g_config_info->engine_id); + pthread_mutex_unlock(&vc_config_mgr_mutex); + return VC_CONFIG_ERROR_NONE; + } /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); + GSList *iter_lang = g_slist_nth(engine_info->languages, 0); - while (NULL != iter) { - engine_info = iter->data; + while (NULL != iter_lang) { + /*Get handle data from list*/ + char* lang = iter_lang->data; - if (NULL == engine_info) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] engine info is NULL"); - pthread_mutex_unlock(&vc_config_mgr_mutex); - return -1; - } - - if (0 != strcmp(g_config_info->engine_id, engine_info->uuid)) { - iter = g_slist_next(iter); - continue; + SLOG(LOG_INFO, vc_config_tag(), "lang(%s)", lang); + if (NULL != lang) { + if (false == callback(lang, user_data)) + break; } - GSList *iter_lang = NULL; - char* lang; - - /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - - while (NULL != iter_lang) { - /*Get handle data from list*/ - lang = iter_lang->data; - - SLOG(LOG_INFO, vc_config_tag(), "lang(%s)", lang); - if (NULL != lang) { - if (false == callback(lang, user_data)) - break; - } - - /*Get next item*/ - iter_lang = g_slist_next(iter_lang); - } - break; + /*Get next item*/ + iter_lang = g_slist_next(iter_lang); } pthread_mutex_unlock(&vc_config_mgr_mutex); @@ -1810,30 +1704,20 @@ int vc_config_mgr_get_nonfixed_support(bool* value) return -1; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; - - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - - while (NULL != iter) { - engine_info = iter->data; - - if (NULL == engine_info) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] engine info is NULL"); - pthread_mutex_unlock(&vc_config_mgr_mutex); - return -1; - } - - if (0 != strcmp(g_config_info->engine_id, engine_info->uuid)) { - iter = g_slist_next(iter); - continue; - } + if (NULL == g_config_info || NULL == g_config_info->engine_id) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine ID is not set in global config!!"); + pthread_mutex_unlock(&vc_config_mgr_mutex); + return VC_CONFIG_ERROR_ENGINE_NOT_FOUND; + } - *value = engine_info->non_fixed_support; + vc_engine_info_s *engine_info = __find_engine_info(g_config_info->engine_id); + if (NULL == engine_info) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", g_config_info->engine_id); + pthread_mutex_unlock(&vc_config_mgr_mutex); + return VC_CONFIG_ERROR_ENGINE_NOT_FOUND; + }; - break; - } + *value = engine_info->non_fixed_support; pthread_mutex_unlock(&vc_config_mgr_mutex); return VC_ERROR_NONE; @@ -1858,26 +1742,13 @@ bool vc_config_check_default_engine_is_valid(const char* engine) return false; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; - - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - - while (NULL != iter) { - engine_info = iter->data; - - if (NULL != engine_info) { - if (0 == strcmp(engine, engine_info->uuid)) { - pthread_mutex_unlock(&vc_config_mgr_mutex); - return true; - } - } - iter = g_slist_next(iter); - } + vc_engine_info_s *engine_info = __find_engine_info(engine); + if (NULL == engine_info) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", engine); + }; pthread_mutex_unlock(&vc_config_mgr_mutex); - return false; + return (NULL != engine_info); } bool vc_config_check_default_language_is_valid(const char* language) @@ -1900,47 +1771,16 @@ bool vc_config_check_default_language_is_valid(const char* language) return false; } - GSList *iter = NULL; - vc_engine_info_s *engine_info = NULL; - - /* Get a first item */ - iter = g_slist_nth(g_engine_list, 0); - - while (NULL != iter) { - engine_info = iter->data; - - if (NULL == engine_info) { - SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Engine info is NULL"); - iter = g_slist_next(iter); - continue; - } - - if (0 == strcmp(g_config_info->engine_id, engine_info->uuid)) { - iter = g_slist_next(iter); - continue; - } - - GSList *iter_lang = NULL; - char* lang; - - /* Get a first item */ - iter_lang = g_slist_nth(engine_info->languages, 0); - - while (NULL != iter_lang) { - lang = iter_lang->data; - - if (0 == strcmp(language, lang)) { - SLOG(LOG_INFO, vc_config_tag(), "[INFO] Default language(%s) is valid", language); - return true; - } + vc_engine_info_s *engine_info = __find_engine_info(g_config_info->engine_id); + if (NULL == engine_info) { + SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine with id (%s)!!", g_config_info->engine_id); + return false; + }; - /*Get next item*/ - iter_lang = g_slist_next(iter_lang); - } - break; - } + bool is_language_valid = __is_language_valid(engine_info, language); + SLOG(LOG_INFO, vc_config_tag(), "[INFO] Language(%s), is valid(%d)", language, (int)is_language_valid); - return false; + return is_language_valid; } int vc_config_mgr_set_foreground(int pid, bool value) @@ -1969,8 +1809,6 @@ int vc_config_mgr_get_foreground(int* pid) return vc_parser_get_foreground(pid); } - - int __vc_config_mgr_print_engine_info() { GSList *iter = NULL; -- 2.34.1