From 7ad1c43b485108bffaf860c6d868a36051b17df2 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac Date: Fri, 28 Oct 2011 20:06:49 +0000 Subject: [PATCH] Add find_config_tree_str_allow_empty Add function to allow read of empty strings as valid arguments. Add a warning message if string argument has ignored value. --- WHATS_NEW | 1 + WHATS_NEW_DM | 1 + lib/commands/toolcontext.c | 6 +++--- lib/config/config.c | 6 ++++++ lib/config/config.h | 2 ++ libdm/libdevmapper.h | 2 ++ libdm/libdm-config.c | 19 ++++++++++++++----- 7 files changed, 29 insertions(+), 8 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 305ead87a..92d331992 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.89 - ================================== + Support empty string for log/prefix. Fix regression that allowed mirrored logs for cluster mirrors. Don't print char type[8] as a plain string in pvck PV type. Use vg memory pool implicitely for vg read. diff --git a/WHATS_NEW_DM b/WHATS_NEW_DM index 79be18f28..cebe079e9 100644 --- a/WHATS_NEW_DM +++ b/WHATS_NEW_DM @@ -1,5 +1,6 @@ Version 1.02.68 - ================================== + Add dm_config_tree_find_str_allow_empty. Fix compile-time pool memory locking with DEBUG_MEM. Fix valgrind error reports in free of pool chunks with DEBUG_MEM. Align size of structure chunk for fast pool allocator to 8 bytes. diff --git a/lib/commands/toolcontext.c b/lib/commands/toolcontext.c index db5ef030b..4dc4c2660 100644 --- a/lib/commands/toolcontext.c +++ b/lib/commands/toolcontext.c @@ -153,9 +153,9 @@ static void _init_logging(struct cmd_context *cmd) init_abort_on_internal_errors(find_config_tree_int(cmd, "global/abort_on_internal_errors", DEFAULT_ABORT_ON_INTERNAL_ERRORS)); - cmd->default_settings.msg_prefix = find_config_tree_str(cmd, - "log/prefix", - DEFAULT_MSG_PREFIX); + cmd->default_settings.msg_prefix = + find_config_tree_str_allow_empty(cmd, "log/prefix", DEFAULT_MSG_PREFIX); + init_msg_prefix(cmd->default_settings.msg_prefix); cmd->default_settings.cmd_name = find_config_tree_int(cmd, diff --git a/lib/config/config.c b/lib/config/config.c index cb143367d..b78593032 100644 --- a/lib/config/config.c +++ b/lib/config/config.c @@ -183,6 +183,12 @@ const char *find_config_tree_str(struct cmd_context *cmd, return dm_config_tree_find_str(cmd->cft, path, fail); } +const char *find_config_tree_str_allow_empty(struct cmd_context *cmd, + const char *path, const char *fail) +{ + return dm_config_tree_find_str_allow_empty(cmd->cft, path, fail); +} + int find_config_tree_int(struct cmd_context *cmd, const char *path, int fail) { diff --git a/lib/config/config.h b/lib/config/config.h index 5edc6cc46..dd6daebdc 100644 --- a/lib/config/config.h +++ b/lib/config/config.h @@ -44,6 +44,8 @@ const struct dm_config_node *find_config_tree_node(struct cmd_context *cmd, const char *path); const char *find_config_tree_str(struct cmd_context *cmd, const char *path, const char *fail); +const char *find_config_tree_str_allow_empty(struct cmd_context *cmd, + const char *path, const char *fail); int find_config_tree_int(struct cmd_context *cmd, const char *path, int fail); int64_t find_config_tree_int64(struct cmd_context *cmd, const char *path, diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h index 84a1786b3..3f730adae 100644 --- a/libdm/libdevmapper.h +++ b/libdm/libdevmapper.h @@ -1385,6 +1385,8 @@ float dm_config_find_float(const struct dm_config_node *cn, const char *path, fl const struct dm_config_node *dm_config_tree_find_node(const struct dm_config_tree *cft, const char *path); const char *dm_config_tree_find_str(const struct dm_config_tree *cft, const char *path, const char *fail); +const char *dm_config_tree_find_str_allow_empty(const struct dm_config_tree *cft, + const char *path, const char *fail); int dm_config_tree_find_int(const struct dm_config_tree *cft, const char *path, int fail); int64_t dm_config_tree_find_int64(const struct dm_config_tree *cft, diff --git a/libdm/libdm-config.c b/libdm/libdm-config.c index a831936e2..8fee4ecc7 100644 --- a/libdm/libdm-config.c +++ b/libdm/libdm-config.c @@ -919,15 +919,18 @@ static const struct dm_config_node *_find_first_config_node(const void *start, c } static const char *_find_config_str(const void *start, node_lookup_fn find_fn, - const char *path, const char *fail) + const char *path, const char *fail, int allow_empty) { const struct dm_config_node *n = find_fn(start, path); /* Empty strings are ignored */ - if ((n && n->v && n->v->type == DM_CFG_STRING) && (*n->v->v.str)) { + if ((n && n->v && n->v->type == DM_CFG_STRING) && + (allow_empty || (*n->v->v.str))) { log_very_verbose("Setting %s to %s", path, n->v->v.str); return n->v->v.str; - } + } else if (n && (!n->v || (n->v->type != DM_CFG_STRING) || + (!allow_empty && fail))) + log_warn("WARNING: Ignoring unsupported value for %s.", path); if (fail) log_very_verbose("%s not found in config: defaulting to %s", @@ -938,7 +941,7 @@ static const char *_find_config_str(const void *start, node_lookup_fn find_fn, const char *dm_config_find_str(const struct dm_config_node *cn, const char *path, const char *fail) { - return _find_config_str(cn, _find_config_node, path, fail); + return _find_config_str(cn, _find_config_node, path, fail, 0); } static int64_t _find_config_int64(const void *start, node_lookup_fn find, @@ -1060,7 +1063,13 @@ const struct dm_config_node *dm_config_tree_find_node(const struct dm_config_tre const char *dm_config_tree_find_str(const struct dm_config_tree *cft, const char *path, const char *fail) { - return _find_config_str(cft, _find_first_config_node, path, fail); + return _find_config_str(cft, _find_first_config_node, path, fail, 0); +} + +const char *dm_config_tree_find_str_allow_empty(const struct dm_config_tree *cft, const char *path, + const char *fail) +{ + return _find_config_str(cft, _find_first_config_node, path, fail, 1); } int dm_config_tree_find_int(const struct dm_config_tree *cft, const char *path, int fail)