summaryrefslogtreecommitdiff
path: root/include/vsprintf.h
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2021-08-02 13:32:20 -0400
committerTom Rini <trini@konsulko.com>2021-08-02 13:32:20 -0400
commit51aef405550e603ff702c034f0e2cd0f15bdf2bb (patch)
tree15216d11d6890cd497b6a97176c7aad4c4d63ecf /include/vsprintf.h
parent73994c452fc5a960114360a651201ac48b135e81 (diff)
parente6951139c0544116330b12e287fe45e30bbab11c (diff)
Merge branch '2021-08-02-numeric-input-cleanups'
- Merge in a series that cleans up and makes more consistent how we deal with numeric input on the CLI. This saves a few bytes in a lot of places.
Diffstat (limited to 'include/vsprintf.h')
-rw-r--r--include/vsprintf.h55
1 files changed, 52 insertions, 3 deletions
diff --git a/include/vsprintf.h b/include/vsprintf.h
index 4016de6677a..83d187e53d4 100644
--- a/include/vsprintf.h
+++ b/include/vsprintf.h
@@ -10,12 +10,57 @@
#include <stdarg.h>
#include <linux/types.h>
+/**
+ * simple_strtoul - convert a string to an unsigned long
+ *
+ * @param cp The string to be converted
+ * @param endp Updated to point to the first character not converted
+ * @param base The number base to use (0 for the default)
+ * @return value decoded from string (0 if invalid)
+ *
+ * Converts a string to an unsigned long. If there are invalid characters at
+ * the end these are ignored. In the worst case, if all characters are invalid,
+ * 0 is returned
+ *
+ * A hex prefix is supported (e.g. 0x123) regardless of the value of @base.
+ * If found, the base is set to hex (16).
+ *
+ * If @base is 0:
+ * - an octal '0' prefix (e.g. 0777) sets the base to octal (8).
+ * - otherwise the base defaults to decimal (10).
+ */
ulong simple_strtoul(const char *cp, char **endp, unsigned int base);
/**
+ * hex_strtoul - convert a string in hex to an unsigned long
+ *
+ * @param cp The string to be converted
+ * @param endp Updated to point to the first character not converted
+ * @return value decoded from string (0 if invalid)
+ *
+ * Converts a hex string to an unsigned long. If there are invalid characters at
+ * the end these are ignored. In the worst case, if all characters are invalid,
+ * 0 is returned
+ */
+unsigned long hextoul(const char *cp, char **endp);
+
+/**
+ * dec_strtoul - convert a string in decimal to an unsigned long
+ *
+ * @param cp The string to be converted
+ * @param endp Updated to point to the first character not converted
+ * @return value decoded from string (0 if invalid)
+ *
+ * Converts a decimal string to an unsigned long. If there are invalid
+ * characters at the end these are ignored. In the worst case, if all characters
+ * are invalid, 0 is returned
+ */
+unsigned long dectoul(const char *cp, char **endp);
+
+/**
* strict_strtoul - convert a string to an unsigned long strictly
* @param cp The string to be converted
- * @param base The number base to use
+ * @param base The number base to use (0 for the default)
* @param res The converted result value
* @return 0 if conversion is successful and *res is set to the converted
* value, otherwise it returns -EINVAL and *res is set to 0.
@@ -30,8 +75,12 @@ ulong simple_strtoul(const char *cp, char **endp, unsigned int base);
*
* echo will append a newline to the tail.
*
- * simple_strtoul just ignores the successive invalid characters and
- * return the converted value of prefix part of the string.
+ * A hex prefix is supported (e.g. 0x123) regardless of the value of @base.
+ * If found, the base is set to hex (16).
+ *
+ * If @base is 0:
+ * - an octal '0' prefix (e.g. 0777) sets the base to octal (8).
+ * - otherwise the base defaults to decimal (10).
*
* Copied this function from Linux 2.6.38 commit ID:
* 521cb40b0c44418a4fd36dc633f575813d59a43d