Fix to handle the null private data
[platform/core/uifw/stt.git] / common / stt_config_mgr.c
old mode 100755 (executable)
new mode 100644 (file)
index 4df6b14..626f054
@@ -1,5 +1,5 @@
 /*
-*  Copyright (c) 2011-2014 Samsung Electronics Co., Ltd All Rights Reserved
+*  Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
@@ -150,7 +150,7 @@ int __stt_config_mgr_select_lang(const char* engine_id, char** language)
                                        /* Default language is STT_BASE_LANGUAGE */
                                        if (0 == strcmp(STT_BASE_LANGUAGE, engine_lang)) {
                                                *language = strdup(engine_lang);
-                                               SLOG(LOG_DEBUG, stt_tag(), "Selected language : %s", *language);
+                                               SLOG(LOG_DEBUG, stt_tag(), "Selected language : %s", (NULL == *language) ? "NULL" : *language);
                                                return 0;
                                        }
                                }
@@ -161,7 +161,7 @@ int __stt_config_mgr_select_lang(const char* engine_id, char** language)
                        /* Not support STT_BASE_LANGUAGE */
                        if (NULL != engine_lang) {
                                *language = strdup(engine_lang);
-                               SLOG(LOG_DEBUG, stt_tag(), "Selected language : %s", *language);
+                               SLOG(LOG_DEBUG, stt_tag(), "Selected language : %s", (NULL == *language) ? "NULL" : *language);
                                return 0;
                        }
                }
@@ -193,11 +193,12 @@ Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl
                char* lang = NULL;
                int auto_lang = -1;
                int silence = -1;
+               int credential = -1;
 
                GSList *iter = NULL;
                stt_config_client_s* temp_client = NULL;
 
-               if (0 != stt_parser_find_config_changed(&engine, &setting, &auto_lang, &lang, &silence))
+               if (0 != stt_parser_find_config_changed(&engine, &setting, &auto_lang, &lang, &silence, &credential))
                        return ECORE_CALLBACK_PASS_ON;
 
                /* Engine changed */
@@ -220,6 +221,8 @@ Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl
 
                        if (-1 != silence)      g_config_info->silence_detection = silence;
 
+                       if (-1 != credential)   g_config_info->credential = credential;
+
                        /* Call all callbacks of client*/
                        iter = g_slist_nth(g_config_client_list, 0);
 
@@ -229,7 +232,7 @@ Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handl
                                if (NULL != temp_client) {
                                        if (NULL != temp_client->engine_cb) {
                                                temp_client->engine_cb(g_config_info->engine_id, g_config_info->setting, g_config_info->language,
-                                                       g_config_info->silence_detection, temp_client->user_data);
+                                                       g_config_info->silence_detection, g_config_info->credential, temp_client->user_data);
                                        }
                                }
 
@@ -358,7 +361,7 @@ int __stt_config_set_auto_language()
                SLOG(LOG_ERROR, stt_tag(), "Current config info is NULL");
                return STT_CONFIG_ERROR_OPERATION_FAILED;
        }
-       
+
        /* Check current language */
        if (NULL == g_config_info->language) {
                SLOG(LOG_ERROR, stt_tag(), "Current config language is NULL");
@@ -633,9 +636,10 @@ int __stt_config_mgr_check_engine_is_valid(const char* engine_id)
        SLOG(LOG_DEBUG, stt_tag(), "  Setting : %s", g_config_info->setting);
        SLOG(LOG_DEBUG, stt_tag(), "  language : %s", g_config_info->language);
        SLOG(LOG_DEBUG, stt_tag(), "  Silence detection : %s", g_config_info->silence_detection ? "on" : "off");
+       SLOG(LOG_DEBUG, stt_tag(), "  Credential : %s", g_config_info->credential ? "true" : "false");
 
        if (0 != stt_parser_set_engine(g_config_info->engine_id, g_config_info->setting, g_config_info->language,
-               g_config_info->silence_detection)) {
+               g_config_info->silence_detection, g_config_info->credential)) {
                        SLOG(LOG_ERROR, stt_tag(), " Fail to save config");
                        return STT_CONFIG_ERROR_OPERATION_FAILED;
        }
@@ -783,6 +787,7 @@ int stt_config_mgr_initialize(int uid)
        SLOG(LOG_DEBUG, stt_tag(), " auto language : %s", g_config_info->auto_lang ? "on" : "off");
        SLOG(LOG_DEBUG, stt_tag(), " language : %s", g_config_info->language);
        SLOG(LOG_DEBUG, stt_tag(), " silence detection : %s", g_config_info->silence_detection ? "on" : "off");
+       SLOG(LOG_DEBUG, stt_tag(), " credential : %s", g_config_info->credential ? "true" : "false");
        SLOG(LOG_DEBUG, stt_tag(), "===================");
 
        if (0 != __stt_config_mgr_register_config_event()) {
@@ -957,7 +962,7 @@ int stt_config_mgr_get_engine_list(stt_config_supported_engine_cb callback, void
                        return STT_CONFIG_ERROR_OPERATION_FAILED;
                }
 
-               if (false == callback(engine_info->uuid, engine_info->name, 
+               if (false == callback(engine_info->uuid, engine_info->name,
                        engine_info->setting, engine_info->support_silence_detection, user_data)) {
                        break;
                }
@@ -1062,7 +1067,7 @@ int stt_config_mgr_set_engine(const char* engine)
 
                        SLOG(LOG_DEBUG, stt_tag(), " %s", lang);
                        if (NULL != lang && NULL != g_config_info->language) {
-                               if (0 == strcmp(lang, g_config_info->language)) {       
+                               if (0 == strcmp(lang, g_config_info->language)) {
                                        /* language is valid */
                                        is_valid_lang = true;
 
@@ -1080,8 +1085,14 @@ int stt_config_mgr_set_engine(const char* engine)
                if (false == is_valid_lang) {
                        if (NULL != g_config_info->language) {
                                free(g_config_info->language);
+                               g_config_info->language = NULL;
 
                                iter_lang = g_slist_nth(engine_info->languages, 0);
+                               if (NULL == iter_lang) {
+                                       SLOG(LOG_ERROR, stt_tag(), "Fail to get default language");
+                                       break;
+                               }
+
                                lang = iter_lang->data;
 
                                g_config_info->language = strdup(lang);
@@ -1094,6 +1105,11 @@ int stt_config_mgr_set_engine(const char* engine)
                                g_config_info->silence_detection = false;
                }
 
+               if (false == engine_info->need_credential) {
+                       if (true == g_config_info->credential)
+                               g_config_info->credential = false;
+               }
+
                is_valid_engine = true;
                break;
        }
@@ -1104,9 +1120,10 @@ int stt_config_mgr_set_engine(const char* engine)
                SLOG(LOG_DEBUG, stt_tag(), "  Setting : %s", g_config_info->setting);
                SLOG(LOG_DEBUG, stt_tag(), "  language : %s", g_config_info->language);
                SLOG(LOG_DEBUG, stt_tag(), "  Silence detection : %s", g_config_info->silence_detection ? "on" : "off");
+               SLOG(LOG_DEBUG, stt_tag(), "  Credential : %s", g_config_info->credential ? "true" : "false");
 
                if (0 != stt_parser_set_engine(g_config_info->engine_id, g_config_info->setting, g_config_info->language,
-                       g_config_info->silence_detection)) {
+                       g_config_info->silence_detection, g_config_info->credential)) {
                                SLOG(LOG_ERROR, stt_tag(), " Fail to save config");
                                return STT_CONFIG_ERROR_OPERATION_FAILED;
                }
@@ -1219,8 +1236,8 @@ int stt_config_mgr_get_language_list(const char* engine_id, stt_config_supported
                        /*Get handle data from list*/
                        lang = iter_lang->data;
 
-                       SLOG(LOG_DEBUG, stt_tag(), " %s", lang);
                        if (NULL != lang) {
+                               SLOG(LOG_DEBUG, stt_tag(), " %s", lang);
                                if (false == callback(engine_info->uuid, lang, user_data))
                                        break;
                        }
@@ -1495,7 +1512,7 @@ int __stt_config_mgr_print_engine_info()
                } else {
                        SLOG(LOG_ERROR, stt_tag(), "  language is NONE");
                }
-               SLOG(LOG_DEBUG, stt_tag(), " silence support : %s", 
+               SLOG(LOG_DEBUG, stt_tag(), " silence support : %s",
                        engine_info->support_silence_detection ? "true" : "false");
                iter = g_slist_next(iter);
                i++;
@@ -1589,7 +1606,7 @@ int stt_config_mgr_foreach_time_info(stt_config_result_time_cb callback, void* u
        while (NULL != iter) {
                data = iter->data;
 
-               if (false == callback(data->index, data->event, data->text, 
+               if (false == callback(data->index, data->event, data->text,
                        data->start_time, data->end_time, user_data)) {
                        break;
                }