vppinfra: add unformat_{single,double}_quoted_string function

Change-Id: I8ee90be1b772074c1130b98c71b3be48c973b2e2
Type: improvement
Signed-off-by: Damjan Marion <damarion@cisco.com>
This commit is contained in:
Damjan Marion
2023-11-13 21:43:17 +00:00
committed by Dave Wallace
parent 1b86f0f477
commit f6f21db2e3
2 changed files with 44 additions and 0 deletions

View File

@ -312,6 +312,10 @@ unformat_function_t unformat_memory_size;
/* Unformat C string array, takes array length as 2nd argument */
unformat_function_t unformat_c_string_array;
/* Unformat sigle and double quoted string */
unformat_function_t unformat_single_quoted_string;
unformat_function_t unformat_double_quoted_string;
/* Format base 10 e.g. 100, 100K, 100M, 100G */
u8 *format_base10 (u8 *s, va_list *va);

View File

@ -1143,6 +1143,46 @@ unformat_c_string_array (unformat_input_t *input, va_list *va)
return rv;
}
static uword
__unformat_quoted_string (unformat_input_t *input, u8 **sp, char quote)
{
u8 *s = 0;
uword c, p = 0;
while ((c = unformat_get_input (input)) != UNFORMAT_END_OF_INPUT)
if (!is_white_space (c))
break;
if (c != quote)
return 0;
while ((c = unformat_get_input (input)) != UNFORMAT_END_OF_INPUT)
{
if (c == quote && p != '\\')
{
*sp = s;
return 1;
}
vec_add1 (s, c);
p = c;
}
vec_free (s);
return 0;
}
__clib_export uword
unformat_single_quoted_string (unformat_input_t *input, va_list *va)
{
return __unformat_quoted_string (input, va_arg (*va, u8 **), '\'');
}
__clib_export uword
unformat_double_quoted_string (unformat_input_t *input, va_list *va)
{
return __unformat_quoted_string (input, va_arg (*va, u8 **), '"');
}
#endif /* CLIB_UNIX */