#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,
vec_free (s);
return 0;
}
+ /* Make sure something was processed. */
+ else if (s == 0)
+ {
+ return 0;
+ }
*hexstring_return = s;
return 1;
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;
}
*result = line;
- return 1;
+ return vec_len (line);
}
/* Parse a line ending with \n and return it as an unformat_input_t. */
{
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)
{
#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;
}
void
-unformat_init_unix_file (unformat_input_t * input, int file_descriptor)
+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;
}
+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 */