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