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;
}
}
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)
"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);
"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);
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);
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);
"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);
"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);
"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);