diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2013-08-06 14:29:15 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-08-06 14:56:35 +0200 |
commit | cd195fa267b1869156e6d675032fdafe3035bf5e (patch) | |
tree | cb3e84282faf43d336601a85c366111af729ab6e | |
parent | ae15a2cac1a01e98e34b4ccd8932ae8f1b99186c (diff) |
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.
-rw-r--r-- | src/vty/utils.c | 9 | ||||
-rw-r--r-- | tests/vty/vty_test.ok | 2 |
2 files changed, 6 insertions, 5 deletions
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) diff --git a/tests/vty/vty_test.ok b/tests/vty/vty_test.ok index 9ff68c88..baec2499 100644 --- a/tests/vty/vty_test.ok +++ b/tests/vty/vty_test.ok @@ -1,3 +1,3 @@ Going to test vty_cmd_string_from_valstr() -Tested with %s-strings, resulting cmd = '[prefix%s%s%s%s%s][foo%s%s%s%s%s][sep%s%s%s%s%s][' +Tested with %s-strings, resulting cmd = '[prefix%s%s%s%s%s][foo%s%s%s%s%s][sep%s%s%s%s%s][bar%s%s%s%s%s][end%s%s%s%s%s]' All tests passed |