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
committed by
Dave Wallace
parent
1b86f0f477
commit
f6f21db2e3
@ -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);
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user