Mercurial > dovecot > core-2.2
changeset 18608:1fc7ae2640b0
lib-fts: fts_language_list_init() API changed to return errors.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sat, 09 May 2015 19:14:07 +0300 |
parents | 0a1726e7015b |
children | fa55a06ffae2 |
files | src/lib-fts/fts-language.c src/lib-fts/fts-language.h src/lib-fts/test-fts-language.c src/plugins/fts/fts-user.c |
diffstat | 4 files changed, 32 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-fts/fts-language.c Sat May 09 19:04:11 2015 +0300 +++ b/src/lib-fts/fts-language.c Sat May 09 19:14:07 2015 +0300 @@ -51,26 +51,25 @@ return NULL; } -struct fts_language_list * -fts_language_list_init(const char *const *settings) +int fts_language_list_init(const char *const *settings, + struct fts_language_list **list_r, + const char **error_r) { struct fts_language_list *lp; pool_t pool; unsigned int i; - const char *conf = NULL; - const char *data = NULL; + const char *conf = NULL, *data = NULL; for (i = 0; settings[i] != NULL; i += 2) { const char *key = settings[i], *value = settings[i+1]; - if (strcmp(key, "fts_language_config") == 0) { + if (strcmp(key, "fts_language_config") == 0) conf = value; - } - else if (strcmp(key, "fts_language_data") == 0) { + else if (strcmp(key, "fts_language_data") == 0) data = value; - } else { - i_debug("Unknown setting: %s", key); - return NULL; + else { + *error_r = t_strdup_printf("Unknown setting: %s", key); + return -1; } } @@ -86,7 +85,8 @@ else lp->textcat_datadir = NULL; p_array_init(&lp->languages, pool, 32); - return lp; + *list_r = lp; + return 0; } void fts_language_list_deinit(struct fts_language_list **list)
--- a/src/lib-fts/fts-language.h Sat May 09 19:04:11 2015 +0300 +++ b/src/lib-fts/fts-language.h Sat May 09 19:14:07 2015 +0300 @@ -1,6 +1,8 @@ #ifndef FTS_LANGUAGE_H #define FTS_LANGUAGE_H +struct fts_language_list; + enum fts_language_result { /* Provided sample is too short. */ FTS_LANGUAGE_RESULT_SHORT, @@ -26,7 +28,9 @@ supported languages. */ const struct fts_language *fts_language_find(const char *name); -struct fts_language_list *fts_language_list_init(const char *const *settings); +int fts_language_list_init(const char *const *settings, + struct fts_language_list **list_r, + const char **error_r); void fts_language_list_deinit(struct fts_language_list **list); /* Add a language to the list of wanted languages. */
--- a/src/lib-fts/test-fts-language.c Sat May 09 19:04:11 2015 +0300 +++ b/src/lib-fts/test-fts-language.c Sat May 09 19:14:07 2015 +0300 @@ -24,10 +24,9 @@ "vastaan. Kahdeksan maata pid\xC3\xA4ttyi "\ "\xC3\xA4\xC3\xA4nest\xC3\xA4m\xC3\xA4st\xC3\xA4."; const char names[] = "de, fi, en"; - const char *unknown; + const char *unknown, *error; test_begin("fts language detect Finnish"); - lp = fts_language_list_init(settings); - test_assert(lp != NULL); + test_assert(fts_language_list_init(settings, &lp, &error) == 0); test_assert(fts_language_list_add_names(lp, names, &unknown) == TRUE); test_assert(fts_language_detect(lp, finnish, sizeof(finnish)-1, &lang_r) == FTS_LANGUAGE_RESULT_OK); @@ -52,10 +51,9 @@ "of the common people, "; const char names[] = "fi, de, fr, en"; - const char *unknown; + const char *unknown, *error; test_begin("fts language detect English"); - lp = fts_language_list_init(settings); - test_assert(lp != NULL); + test_assert(fts_language_list_init(settings, &lp, &error) == 0); test_assert(fts_language_list_add_names(lp, names, &unknown) == TRUE); test_assert(fts_language_detect(lp, english, sizeof(english)-1, &lang_r) == FTS_LANGUAGE_RESULT_OK); @@ -88,10 +86,9 @@ const char names[] = "de, fi, fr, en"; - const char *unknown; + const char *unknown, *error; test_begin("fts language detect French"); - lp = fts_language_list_init(settings); - test_assert(lp != NULL); + test_assert(fts_language_list_init(settings, &lp, &error) == 0); test_assert(fts_language_list_add_names(lp, names, &unknown) == TRUE); test_assert(fts_language_detect(lp, french, sizeof(french)-1, &lang_r) == FTS_LANGUAGE_RESULT_OK); @@ -126,10 +123,9 @@ const char names[] = "fi, de, fr, en"; - const char *unknown; + const char *unknown, *error; test_begin("fts language detect German"); - lp = fts_language_list_init(settings); - test_assert(lp != NULL); + test_assert(fts_language_list_init(settings, &lp, &error) == 0); test_assert(fts_language_list_add_names(lp, names, &unknown) == TRUE); test_assert(fts_language_detect(lp, german, sizeof(german)-1, &lang_r) == FTS_LANGUAGE_RESULT_OK); @@ -152,10 +148,9 @@ "vastaan. Kahdeksan maata pid\xC3\xA4ttyi "\ "\xC3\xA4\xC3\xA4nest\xC3\xA4m\xC3\xA4st\xC3\xA4."; const char names[] = "en"; - const char *unknown; + const char *unknown, *error; test_begin("fts language detect Finnish as English"); - lp = fts_language_list_init(settings); - test_assert(lp != NULL); + test_assert(fts_language_list_init(settings, &lp, &error) == 0); test_assert(fts_language_list_add_names(lp, names, &unknown) == TRUE); test_assert(fts_language_detect(lp, finnish, sizeof(finnish)-1, &lang_r) == FTS_LANGUAGE_RESULT_OK); @@ -180,10 +175,9 @@ "of the common people, "; const char names[] = "fi, de, fr"; - const char *unknown; + const char *unknown, *error; test_begin("fts language detect not available"); - lp = fts_language_list_init(settings); - test_assert(lp != NULL); + test_assert(fts_language_list_init(settings, &lp, &error) == 0); test_assert(fts_language_list_add_names(lp, names, &unknown) == TRUE); test_assert(fts_language_detect(lp, english, sizeof(english)-1, &lang_r) == FTS_LANGUAGE_RESULT_UNKNOWN); @@ -201,10 +195,9 @@ "SeH'eghtaHghach'a'na'chajmo'."; const char names[] = "fi, de, fr"; - const char *unknown; + const char *unknown, *error; test_begin("fts language detect unknown"); - lp = fts_language_list_init(settings); - test_assert(lp != NULL); + test_assert(fts_language_list_init(settings, &lp, &error) == 0); test_assert(fts_language_list_add_names(lp, names, &unknown) == TRUE); test_assert(fts_language_detect(lp, klingon, sizeof(klingon), &lang_r) == FTS_LANGUAGE_RESULT_UNKNOWN);
--- a/src/plugins/fts/fts-user.c Sat May 09 19:04:11 2015 +0300 +++ b/src/plugins/fts/fts-user.c Sat May 09 19:14:07 2015 +0300 @@ -66,9 +66,10 @@ } lang_config[1] = mail_user_plugin_getenv(user, "fts_language_config"); - fuser->lang_list = fts_language_list_init(lang_config); if (lang_config[1] != NULL) lang_config[0] = "fts_language_config"; + if (fts_language_list_init(lang_config, &fuser->lang_list, error_r) < 0) + return -1; if (!fts_language_list_add_names(fuser->lang_list, languages, &unknown)) { *error_r = t_strdup_printf(