diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-03-21 13:56:49 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-03-21 13:56:49 +0200 |
commit | 8d9a957d9e292ebba1a24602e407e114c5f9c5c2 (patch) | |
tree | 115aeda70a88667c5e28ecae7cfbb0d05db2663d | |
parent | 2ca7dcd648057aaa45b6b4f74acd3afbd99e410c (diff) | |
download | mailutils-8d9a957d9e292ebba1a24602e407e114c5f9c5c2.tar.gz mailutils-8d9a957d9e292ebba1a24602e407e114c5f9c5c2.tar.bz2 |
More fixes to mu_cfg_field_map (see afbb33cf).
* libmailutils/cfg/driver.c (mu_cfg_field_map): Use
correct enumeration function depending on the element
type. Return meaningful error.
-rw-r--r-- | libmailutils/cfg/driver.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/libmailutils/cfg/driver.c b/libmailutils/cfg/driver.c index 8af543dfc..b3b88a6eb 100644 --- a/libmailutils/cfg/driver.c +++ b/libmailutils/cfg/driver.c @@ -614,19 +614,14 @@ struct mapping_closure }; static int -parse_mapping (void *item, void *data) +parse_mapping_str (void *item, void *data) { struct mapping_closure *clos = data; - struct mu_config_value *cval = item; - char const *str; + char const *str = item; size_t len; char *key, *val; int rc; - if (mu_cfg_assert_value_type (cval, MU_CFG_STRING)) - return 1; - str = cval->v.string; - len = strcspn (str, "="); if (str[len] == 0) { @@ -644,6 +639,16 @@ parse_mapping (void *item, void *data) return rc; } +static int +parse_mapping_val (void *item, void *data) +{ + struct mu_config_value *cval = item; + + if (mu_cfg_assert_value_type (cval, MU_CFG_STRING)) + return MU_ERR_PARSE; + return parse_mapping_str ((void*) cval->v.string, data); +} + int mu_cfg_field_map (struct mu_config_value const *val, mu_assoc_t *passoc, char **err_term) @@ -665,12 +670,12 @@ mu_cfg_field_map (struct mu_config_value const *val, mu_assoc_t *passoc, mu_list_set_destroy_item (list, mu_list_free_item); rc = mu_string_split (val->v.string, ":", list); if (rc == 0) - rc = mu_list_foreach (list, parse_mapping, &clos); + rc = mu_list_foreach (list, parse_mapping_str, &clos); mu_list_destroy (&list); break; case MU_CFG_LIST: - rc = mu_list_foreach (val->v.list, parse_mapping, &clos); + rc = mu_list_foreach (val->v.list, parse_mapping_val, &clos); break; case MU_CFG_ARRAY: |