summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMathiasRaoul <mathias.raoul@gmail.com>2019-10-04 09:53:45 +0000
committerDave Wallace <dwallacelf@gmail.com>2019-10-04 14:02:04 +0000
commit579b165069e7c14392cded3a76e5cc1964ad13a9 (patch)
tree8ee05343e02c018f8930a6106759d8d045e1481c /src
parent7233846ce93fddef495a1029ca211f42afe046f2 (diff)
vppinfra: create unformat function for data size parsing
Type: feature Signed-off-by: MathiasRaoul <mathias.raoul@gmail.com> Change-Id: I8d71078a9ed42326e19453ea10008c6bb6992c52
Diffstat (limited to 'src')
-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 */