]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-fts: fts_language_list_init() API changed to return errors.
authorTimo Sirainen <tss@iki.fi>
Sat, 9 May 2015 16:14:07 +0000 (19:14 +0300)
committerTimo Sirainen <tss@iki.fi>
Sat, 9 May 2015 16:14:07 +0000 (19:14 +0300)
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

index 1d36639c08e3842210ad080ead4544f14fcc92a1..996e74c0b5a626d5e7bbec1f1428be119b6fc686 100644 (file)
@@ -51,26 +51,25 @@ const struct fts_language *fts_language_find(const char *name)
        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 @@ fts_language_list_init(const char *const *settings)
        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)
index 86279c3acf47516d213416cf2b5b2be0ccb4ccb3..25a6477a72ee5be444d762dded31a1e1d060e632 100644 (file)
@@ -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 @@ extern const struct fts_language fts_language_data;
    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. */
index bef5d25927697b4a0b8a398c329475eac428ca38..62a91b1516c80b8249479dfbfa4479564ab778e3 100644 (file)
@@ -24,10 +24,9 @@ static void test_fts_language_detect_finnish(void)
                "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 @@ static void test_fts_language_detect_english(void)
                "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 @@ static void test_fts_language_detect_french(void)
 
 
        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 @@ static void test_fts_language_detect_german(void)
 
 
        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 @@ static void test_fts_language_detect_finnish_as_english(void)
                "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 @@ static void test_fts_language_detect_na(void)
                "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 @@ static void test_fts_language_detect_unknown(void)
                "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);
index 2d04cc362068c6bdb852ba5fd899546030a89145..14f34766266ac01d8cb160c61e1ee68fb082064f 100644 (file)
@@ -66,9 +66,10 @@ fts_user_init_languages(struct mail_user *user, struct fts_user *fuser,
        }
 
        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(