summaryrefslogtreecommitdiffstats
path: root/src/vppinfra
diff options
context:
space:
mode:
authorMathiasRaoul <mathias.raoul@gmail.com>2019-10-04 09:53:45 +0000
committerAndrew Yourtchenko <ayourtch@gmail.com>2019-10-16 12:40:33 +0000
commitcb19100c1821a62f20a333edaa23772cba6e5b3e (patch)
tree7abb08007b5c45133047ad2e4c3ddf58b1a5e617 /src/vppinfra
parentfb76b4549f2ac529b82bdbbaee0786857386a2a7 (diff)
vppinfra: create unformat function for data size parsing
Type: feature Signed-off-by: MathiasRaoul <mathias.raoul@gmail.com> Change-Id: I8d71078a9ed42326e19453ea10008c6bb6992c52 (cherry picked from commit 579b165069e7c14392cded3a76e5cc1964ad13a9)
Diffstat (limited to 'src/vppinfra')
-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 */