diff options
author | MathiasRaoul <mathias.raoul@gmail.com> | 2019-10-04 09:53:45 +0000 |
---|---|---|
committer | Andrew Yourtchenko <ayourtch@gmail.com> | 2019-10-16 12:40:33 +0000 |
commit | cb19100c1821a62f20a333edaa23772cba6e5b3e (patch) | |
tree | 7abb08007b5c45133047ad2e4c3ddf58b1a5e617 /src | |
parent | fb76b4549f2ac529b82bdbbaee0786857386a2a7 (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')
-rw-r--r-- | src/vppinfra/format.h | 2 | ||||
-rw-r--r-- | src/vppinfra/unformat.c | 24 |
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 */ |