dovecot-2.2: lib-fts: fts_language_list_init() API changed to re...
dovecot at dovecot.org
dovecot at dovecot.org
Sat May 9 16:18:54 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/1fc7ae2640b0
changeset: 18608:1fc7ae2640b0
user: Timo Sirainen <tss at iki.fi>
date: Sat May 09 19:14:07 2015 +0300
description:
lib-fts: fts_language_list_init() API changed to return errors.
diffstat:
src/lib-fts/fts-language.c | 22 +++++++++++-----------
src/lib-fts/fts-language.h | 6 +++++-
src/lib-fts/test-fts-language.c | 35 ++++++++++++++---------------------
src/plugins/fts/fts-user.c | 3 ++-
4 files changed, 32 insertions(+), 34 deletions(-)
diffs (181 lines):
diff -r 0a1726e7015b -r 1fc7ae2640b0 src/lib-fts/fts-language.c
--- 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)
diff -r 0a1726e7015b -r 1fc7ae2640b0 src/lib-fts/fts-language.h
--- 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. */
diff -r 0a1726e7015b -r 1fc7ae2640b0 src/lib-fts/test-fts-language.c
--- 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);
diff -r 0a1726e7015b -r 1fc7ae2640b0 src/plugins/fts/fts-user.c
--- 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(
More information about the dovecot-cvs
mailing list