summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Teigland <teigland@redhat.com>2019-11-14 12:15:05 -0600
committerDavid Teigland <teigland@redhat.com>2019-11-14 12:15:05 -0600
commit7ea71a9eb94a703975d8f59f941d02039def3be4 (patch)
treecf8591725d586e001f49ae05431d8b1100a2a8aa
parent31a862a6be181764c3f505580916e11882b195a7 (diff)
downloadlvm2-7ea71a9eb94a703975d8f59f941d02039def3be4.tar.gz
Revert "hints: rewrite function"
This reverts commit 70fb31b5d6863248b5adfb2581b706cbb158b30e.
-rw-r--r--lib/label/hints.c39
1 files changed, 26 insertions, 13 deletions
diff --git a/lib/label/hints.c b/lib/label/hints.c
index 45ab2ff6f..f8e8f4520 100644
--- a/lib/label/hints.c
+++ b/lib/label/hints.c
@@ -586,29 +586,42 @@ static void _filter_to_str(struct cmd_context *cmd, int filter_cfg, char **strp)
char *str;
int pos = 0;
int len = 0;
+ int ret;
*strp = NULL;
- if (!(cn = find_config_tree_array(cmd, filter_cfg, NULL)))
+ if (!(cn = find_config_tree_array(cmd, filter_cfg, NULL))) {
/* shouldn't happen because default is a|*| */
return;
+ }
+
+ for (cv = cn->v; cv; cv = cv->next) {
+ if (cv->type != DM_CFG_STRING)
+ continue;
- for (cv = cn->v; cv; cv = cv->next)
- if (cv->type == DM_CFG_STRING)
- len += strlen(cv->v.str) + 1;
+ len += (strlen(cv->v.str) + 1);
+ }
+ len++;
+
+ if (len == 1) {
+ /* shouldn't happen because default is a|*| */
+ return;
+ }
- if (!len++ || !(str = malloc(len)))
+ if (!(str = malloc(len)))
return;
+ memset(str, 0, len);
- for (cv = cn->v; cv; cv = cv->next)
- if (cv->type == DM_CFG_STRING) {
- len = strlen(cv->v.str);
- memcpy(str + pos, cv->v.str, len);
- pos += len;
- str[pos++] = 0;
- }
+ for (cv = cn->v; cv; cv = cv->next) {
+ if (cv->type != DM_CFG_STRING)
+ continue;
- str[pos] = 0;
+ ret = snprintf(str + pos, len - pos, "%s", cv->v.str);
+
+ if (ret >= len - pos)
+ break;
+ pos += ret;
+ }
*strp = str;
}