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 579b165069)
This commit is contained in:
MathiasRaoul
2019-10-04 09:53:45 +00:00
committed by Andrew Yourtchenko
parent fb76b4549f
commit cb19100c18
2 changed files with 26 additions and 0 deletions

View File

@ -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);

View File

@ -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 */