From cd195fa267b1869156e6d675032fdafe3035bf5e Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Tue, 6 Aug 2013 14:29:15 +0200 Subject: vty: Support multi-char separators and end strings In vty_cmd_string_from_valstr() include the real string lengths of the sep and end arguments into the buffer size calculation. --- src/vty/utils.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/vty') diff --git a/src/vty/utils.c b/src/vty/utils.c index 88932fa8..d0ad431d 100644 --- a/src/vty/utils.c +++ b/src/vty/utils.c @@ -69,12 +69,13 @@ char *vty_cmd_string_from_valstr(void *ctx, const struct value_string *vals, const char *end, int do_lower) { int len = 0, offset = 0, ret, rem; - int size = strlen(prefix); + int size = strlen(prefix) + strlen(end); + int sep_len = strlen(sep); const struct value_string *vs; char *str; for (vs = vals; vs->value || vs->str; vs++) - size += strlen(vs->str) + 1; + size += strlen(vs->str) + sep_len; rem = size; str = talloc_zero_size(ctx, size); @@ -102,8 +103,8 @@ char *vty_cmd_string_from_valstr(void *ctx, const struct value_string *vals, OSMO_SNPRINTF_RET(ret, rem, offset, len); } } - offset--; /* to remove the trailing | */ - rem++; + offset -= sep_len; /* to remove the trailing sep */ + rem += sep_len; ret = snprintf(str + offset, rem, "%s", end); if (ret < 0) -- cgit v1.2.3