summaryrefslogtreecommitdiffstats
path: root/src/vppinfra/unformat.c
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/unformat.c
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/unformat.c')
-rw-r--r--src/vppinfra/unformat.c24
1 files changed, 24 insertions, 0 deletions
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 */