aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vppinfra/format.h2
-rw-r--r--src/vppinfra/unformat.c24
2 files changed, 26 insertions, 0 deletions
diff --git a/src/vppinfra/format.h b/src/vppinfra/format.h
index c4becff3a67..678029e2a16 100644
--- a/src/vppinfra/format.h
+++ b/src/vppinfra/format.h
@@ -317,6 +317,8 @@ uword unformat_init_unix_env (unformat_input_t * input, char *var);
unformat_function_t unformat_unix_gid;
#endif /* CLIB_UNIX */
+uword unformat_data_size (unformat_input_t * input, va_list * args);
+
/* Test code. */
int test_format_main (unformat_input_t * input);
int test_unformat_main (unformat_input_t * input);
diff --git a/src/vppinfra/unformat.c b/src/vppinfra/unformat.c
index 52b8bb779bb..3c671137941 100644
--- a/src/vppinfra/unformat.c
+++ b/src/vppinfra/unformat.c
@@ -1077,6 +1077,30 @@ unformat_init_unix_env (unformat_input_t * input, char *var)
return val != 0;
}
+uword
+unformat_data_size (unformat_input_t * input, va_list * args)
+{
+ u64 _a;
+ u64 *a = va_arg (*args, u64 *);
+ if (unformat (input, "%lluGb", &_a))
+ *a = _a << 30;
+ else if (unformat (input, "%lluG", &_a))
+ *a = _a << 30;
+ else if (unformat (input, "%lluMb", &_a))
+ *a = _a << 20;
+ else if (unformat (input, "%lluM", &_a))
+ *a = _a << 20;
+ else if (unformat (input, "%lluKb", &_a))
+ *a = _a << 10;
+ else if (unformat (input, "%lluK", &_a))
+ *a = _a << 10;
+ else if (unformat (input, "%llu", a))
+ ;
+ else
+ return 0;
+ return 1;
+}
+
#endif /* CLIB_UNIX */