#include <vppinfra/format.h>
/* Call user's function to fill input buffer. */
-uword
+__clib_export uword
_unformat_fill_input (unformat_input_t * i)
{
uword l, first_mark;
}
/* Format function for dumping input stream. */
-u8 *
+__clib_export u8 *
format_unformat_error (u8 * s, va_list * va)
{
unformat_input_t *i = va_arg (*va, unformat_input_t *);
}
/* Print everything: not just error context. */
-u8 *
+__clib_export u8 *
format_unformat_input (u8 * s, va_list * va)
{
unformat_input_t *i = va_arg (*va, unformat_input_t *);
#endif
/* Parse delimited vector string. If string starts with { then string
- is delimited by balenced parenthesis. Other string is delimited by
+ is delimited by balanced parenthesis. Other string is delimited by
white space. {} were chosen since they are special to the shell. */
static uword
unformat_string (unformat_input_t * input,
return 1;
}
-uword
+__clib_export uword
unformat_hex_string (unformat_input_t * input, va_list * va)
{
u8 **hexstring_return = va_arg (*va, u8 **);
}
/* unformat (input "foo%U", unformat_eof) matches terminal foo only */
-uword
+__clib_export uword
unformat_eof (unformat_input_t * input, va_list * va)
{
return unformat_check_input (input) == UNFORMAT_END_OF_INPUT;
}
/* Parse a token containing given set of characters. */
-uword
+__clib_export uword
unformat_token (unformat_input_t * input, va_list * va)
{
u8 *token_chars = va_arg (*va, u8 *);
if (!token_chars)
token_chars = (u8 *) "a-zA-Z0-9_";
- memset (map, 0, sizeof (map));
+ clib_memset (map, 0, sizeof (map));
for (s = token_chars; *s;)
{
- /* Parse range. */
- if (s[0] < s[2] && s[1] == '-')
+ /*
+ * Parse range.
+ * The test order is important: s[1] is valid because s[0] != '\0' but
+ * s[2] might not if s[1] == '\0'
+ * Also, if s[1] == '-' but s[2] == '\0' the test s[0] < s[2] will
+ * (correctly) fail
+ */
+ if (s[1] == '-' && s[0] < s[2])
{
for (i = s[0]; i <= s[2]; i++)
map[i] = 1;
/* Unformat (parse) function which reads a %s string and converts it
to and unformat_input_t. */
-uword
+__clib_export uword
unformat_input (unformat_input_t * i, va_list * args)
{
unformat_input_t *sub_input = va_arg (*args, unformat_input_t *);
}
/* Parse a line ending with \n and return it. */
-uword
+__clib_export uword
unformat_line (unformat_input_t * i, va_list * va)
{
u8 *line = 0, **result = va_arg (*va, u8 **);
}
*result = line;
- return 1;
+ return vec_len (line);
}
/* Parse a line ending with \n and return it as an unformat_input_t. */
-uword
+__clib_export uword
unformat_line_input (unformat_input_t * i, va_list * va)
{
unformat_input_t *result = va_arg (*va, unformat_input_t *);
u8 *line;
- unformat_user (i, unformat_line, &line);
+ if (!unformat_user (i, unformat_line, &line))
+ return 0;
unformat_init_vector (result, line);
return 1;
}
uword signs[2], sign_index = 0;
uword n_input = 0;
- memset (values, 0, sizeof (values));
- memset (n_digits, 0, sizeof (n_digits));
- memset (signs, 0, sizeof (signs));
+ clib_memset (values, 0, sizeof (values));
+ clib_memset (n_digits, 0, sizeof (n_digits));
+ clib_memset (signs, 0, sizeof (signs));
while ((c = unformat_get_input (input)) != UNFORMAT_END_OF_INPUT)
{
return n ? f : 0;
}
-uword
+__clib_export uword
unformat_skip_white_space (unformat_input_t * input)
{
uword n = 0;
return n;
}
-uword
+__clib_export uword
va_unformat (unformat_input_t * input, const char *fmt, va_list * va)
{
const char *f;
return input_matches_format;
}
-uword
+__clib_export uword
unformat (unformat_input_t * input, const char *fmt, ...)
{
va_list va;
return result;
}
-uword
+__clib_export uword
unformat_user (unformat_input_t * input, unformat_function_t * func, ...)
{
va_list va;
}
/* Setup for unformat of Unix style command line. */
-void
+__clib_export void
unformat_init_command_line (unformat_input_t * input, char *argv[])
{
uword i;
}
}
-void
+__clib_export void
unformat_init_string (unformat_input_t * input, char *string, int string_len)
{
unformat_init (input, 0, 0);
vec_add (input->buffer, string, string_len);
}
-void
+__clib_export void
unformat_init_vector (unformat_input_t * input, u8 * vector_string)
{
unformat_init (input, 0, 0);
#ifdef CLIB_UNIX
static uword
-unix_file_fill_buffer (unformat_input_t * input)
+clib_file_fill_buffer (unformat_input_t * input)
{
int fd = pointer_to_uword (input->fill_buffer_arg);
uword l, n;
return input->index;
}
-void
-unformat_init_unix_file (unformat_input_t * input, int file_descriptor)
+__clib_export void
+unformat_init_clib_file (unformat_input_t * input, int file_descriptor)
{
- unformat_init (input, unix_file_fill_buffer,
+ unformat_init (input, clib_file_fill_buffer,
uword_to_pointer (file_descriptor, void *));
}
return val != 0;
}
+__clib_export 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 */