dovecot-2.2: fts: Use key=value instead of "key value" settings ...
dovecot at dovecot.org
dovecot at dovecot.org
Sat May 9 14:00:03 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/82831550757b
changeset: 18596:82831550757b
user: Timo Sirainen <tss at iki.fi>
date: Sat May 09 16:58:09 2015 +0300
description:
fts: Use key=value instead of "key value" settings for tokenizers and filters.
diffstat:
src/plugins/fts/fts-user.c | 49 ++++++++++++++++++++++++++++++++-------------
1 files changed, 35 insertions(+), 14 deletions(-)
diffs (89 lines):
diff -r 461bb302bd03 -r 82831550757b src/plugins/fts/fts-user.c
--- a/src/plugins/fts/fts-user.c Sat May 09 15:11:48 2015 +0300
+++ b/src/plugins/fts/fts-user.c Sat May 09 16:58:09 2015 +0300
@@ -26,6 +26,32 @@
static MODULE_CONTEXT_DEFINE_INIT(fts_user_module,
&mail_user_module_register);
+static const char *const *str_keyvalues_to_array(const char *str)
+{
+ const char *key, *value, *const *keyvalues;
+ ARRAY_TYPE(const_string) arr;
+ unsigned int i;
+
+ if (str == NULL)
+ return NULL;
+
+ t_array_init(&arr, 8);
+ keyvalues = t_strsplit_spaces(str, " ");
+ for (i = 0; keyvalues[i] != NULL; i++) {
+ value = strchr(keyvalues[i], '=');
+ if (value != NULL)
+ key = t_strdup_until(keyvalues[i], value++);
+ else {
+ key = keyvalues[i];
+ value = "";
+ }
+ array_append(&arr, &key, 1);
+ array_append(&arr, &value, 1);
+ }
+ array_append_zero(&arr);
+ return array_idx(&arr, 0);
+}
+
static int
fts_user_init_languages(struct mail_user *user, struct fts_user *fuser,
const char **error_r)
@@ -63,7 +89,7 @@
const struct fts_filter *filter_class;
struct fts_filter *filter = NULL, *parent = NULL;
const char *filters_key, *const *filters, *filter_set_name;
- const char *str, *error, *set_key, *const *settings;
+ const char *str, *error, *set_key;
unsigned int i;
int ret = 0;
@@ -99,9 +125,9 @@
set_key = t_strdup_printf("fts_filters_%s", filter_set_name);
str = mail_user_plugin_getenv(user, set_key);
}
- settings = str == NULL ? NULL : t_strsplit_spaces(str, " ");
- if (fts_filter_create(filter_class, parent, lang, settings,
+ if (fts_filter_create(filter_class, parent, lang,
+ str_keyvalues_to_array(str),
&filter, &error) < 0) {
*error_r = t_strdup_printf(
"Filter '%s' init via settings '%s' failed: %s",
@@ -130,7 +156,7 @@
const struct fts_tokenizer *tokenizer_class;
struct fts_tokenizer *tokenizer = NULL, *parent = NULL;
const char *tokenizers_key, *const *tokenizers, *tokenizer_set_name;
- const char *str, *error, *set_key, *const *settings;
+ const char *str, *error, *set_key;
unsigned int i;
int ret = 0;
@@ -156,17 +182,12 @@
/* tell the tokenizers that we're tokenizing a search string
(instead of tokenizing indexed data) */
- if (search) {
- if (str == NULL)
- str = "search yes";
- else
- str = t_strconcat(str, " search yes", NULL);
- }
+ if (search)
+ str = t_strconcat("search=yes ", str, NULL);
- settings = str == NULL ? NULL : t_strsplit_spaces(str, " ");
-
- if (fts_tokenizer_create(tokenizer_class, parent, settings,
- &tokenizer, &error) < 0) {
+ if (fts_tokenizer_create(tokenizer_class, parent,
+ str_keyvalues_to_array(str),
+ &tokenizer, &error) < 0) {
*error_r = t_strdup_printf(
"Tokenizer '%s' init via settings '%s' failed: %s",
tokenizers[i], set_key, error);
More information about the dovecot-cvs
mailing list