vppinfra: add unformat_c_string_array 00/39300/2
authorDamjan Marion <damarion@cisco.com>
Mon, 31 Jul 2023 18:07:31 +0000 (20:07 +0200)
committerDamjan Marion <damarion@cisco.com>
Mon, 31 Jul 2023 18:10:57 +0000 (20:10 +0200)
Type: improvement
Change-Id: Iea5ecca5d4cbc6c7aea69104830afcfe78c708ee
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vppinfra/format.h
src/vppinfra/unformat.c

index 935b57f..7254031 100644 (file)
@@ -304,6 +304,9 @@ unformat_function_t unformat_eof;
 /* Parse memory size e.g. 100, 100k, 100m, 100g. */
 unformat_function_t unformat_memory_size;
 
+/* Unformat C string array, takes array length as 2nd argument */
+unformat_function_t unformat_c_string_array;
+
 /* Format base 10 e.g. 100, 100K, 100M, 100G */
 u8 *format_base10 (u8 *s, va_list *va);
 
index e8e5c28..a07f4e0 100644 (file)
@@ -1086,6 +1086,30 @@ unformat_data_size (unformat_input_t * input, va_list * args)
   return 1;
 }
 
+__clib_export uword
+unformat_c_string_array (unformat_input_t *input, va_list *va)
+{
+  char *str = va_arg (*va, char *);
+  u32 array_len = va_arg (*va, u32);
+  uword c, rv = 0;
+  u8 *s = 0;
+
+  if (unformat (input, "%v", &s) == 0)
+    return 0;
+
+  c = vec_len (s);
+
+  if (c > 0 && c < array_len)
+    {
+      clib_memcpy (str, s, c);
+      str[c] = 0;
+      rv = 1;
+    }
+
+  vec_free (s);
+  return rv;
+}
+
 #endif /* CLIB_UNIX */