binarybuffer: simplify the prototype of str_to_buf()
With 'radix' always zero and '_detected_radix' always NULL, drop the two parameters and simplify str_to_buf(). While there: - drop some redundant assert(), - drop the re-check for the base prefix, - simplify str_strip_number_prefix_if_present() and rename it, as the prefix MUST be present, - fix a minor typo, - update the doxygen description of str_to_buf(). Change-Id: I1abdc8ec0587b23881953d3094101c04d5bb1c58 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/8394 Tested-by: jenkins Reviewed-by: Jan Matyas <jan.matyas@codasip.com>
This commit is contained in:
parent
ea859e1cd0
commit
8a3efbf21f
|
@ -225,49 +225,37 @@ static bool str_has_octal_prefix(const char *s)
|
|||
*/
|
||||
static unsigned int str_radix_guess(const char *str)
|
||||
{
|
||||
assert(str);
|
||||
|
||||
if (str_has_hex_prefix(str))
|
||||
return 16;
|
||||
|
||||
if (str_has_octal_prefix(str))
|
||||
return 8;
|
||||
|
||||
/* Otherwise assume a decadic number. */
|
||||
/* Otherwise assume a decimal number. */
|
||||
return 10;
|
||||
}
|
||||
|
||||
/** Strip leading "0x" or "0X" from hex numbers or "0" from octal numbers. */
|
||||
static void str_strip_number_prefix_if_present(const char **_str, unsigned int radix)
|
||||
static const char *str_strip_number_prefix(const char *str, unsigned int radix)
|
||||
{
|
||||
assert(radix == 16 || radix == 10 || radix == 8);
|
||||
assert(_str);
|
||||
|
||||
const char *str = *_str;
|
||||
assert(str);
|
||||
|
||||
if (radix == 16 && str_has_hex_prefix(str))
|
||||
str += 2;
|
||||
else if (radix == 8 && str_has_octal_prefix(str))
|
||||
str += 1;
|
||||
|
||||
/* No prefix to strip for radix == 10. */
|
||||
|
||||
*_str = str;
|
||||
switch (radix) {
|
||||
case 16:
|
||||
return str + 2;
|
||||
case 8:
|
||||
return str + 1;
|
||||
case 10:
|
||||
default:
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
int str_to_buf(const char *str, void *_buf, unsigned int buf_len,
|
||||
unsigned int radix, unsigned int *_detected_radix)
|
||||
int str_to_buf(const char *str, void *_buf, unsigned int buf_len)
|
||||
{
|
||||
assert(radix == 0 || radix == 8 || radix == 10 || radix == 16);
|
||||
assert(str);
|
||||
|
||||
if (radix == 0)
|
||||
radix = str_radix_guess(str);
|
||||
unsigned int radix = str_radix_guess(str);
|
||||
|
||||
if (_detected_radix)
|
||||
*_detected_radix = radix;
|
||||
|
||||
str_strip_number_prefix_if_present(&str, radix);
|
||||
str = str_strip_number_prefix(str, radix);
|
||||
|
||||
const size_t str_len = strlen(str);
|
||||
if (str_len == 0)
|
||||
|
|
|
@ -194,15 +194,14 @@ void *buf_set_buf(const void *src, unsigned src_start,
|
|||
|
||||
/**
|
||||
* Parse an unsigned number (provided as a zero-terminated string)
|
||||
* into a bit buffer whose size is buf_len bits.
|
||||
* into a bit buffer whose size is buf_len bits. The base of the
|
||||
* number is detected between decimal, hexadecimal and octal.
|
||||
* @param str Input number, zero-terminated string
|
||||
* @param _buf Output buffer, allocated by the caller
|
||||
* @param buf_len Output buffer size in bits
|
||||
* @param radix Base of the input number - 16, 10, 8 or 0.
|
||||
* 0 means auto-detect the radix.
|
||||
* @returns Error on invalid or overflowing number
|
||||
*/
|
||||
int str_to_buf(const char *str, void *_buf, unsigned int buf_len,
|
||||
unsigned int radix, unsigned int *_detected_radix);
|
||||
int str_to_buf(const char *str, void *_buf, unsigned int buf_len);
|
||||
|
||||
char *buf_to_hex_str(const void *buf, unsigned size);
|
||||
|
||||
|
|
|
@ -1365,7 +1365,7 @@ COMMAND_HELPER(command_parse_str_to_buf, const char *str, void *buf, unsigned in
|
|||
assert(str);
|
||||
assert(buf);
|
||||
|
||||
int ret = str_to_buf(str, buf, buf_len, 0, NULL);
|
||||
int ret = str_to_buf(str, buf, buf_len);
|
||||
if (ret == ERROR_OK)
|
||||
return ret;
|
||||
|
||||
|
|
Loading…
Reference in New Issue