#ifndef _STRTONUM_H
#define _STRTONUM_H
+#ifdef CONFIG_UCW_CLEAN_ABI
+#define str_to_u32 ucw_str_to_u32
+#define str_to_u64 ucw_str_to_u64
+#define str_to_uint ucw_str_to_uint
+#define str_to_uintmax ucw_str_to_uintmax
+#define str_to_uns ucw_str_to_uns
+#endif
+
+// Set (flags & 0x1f) in the range 1 to 31 to denote the default base of the number
enum str_to_num_flags {
STN_SIGNED = 0x20, // The resulting range is signed
STN_MINUS = 0x40, // Allow optional '-' sign
STN_PLUS = 0x80, // Allow optional '+' sign
STN_TRUNC = 0x100, // Allow range overflow -> truncate to the allowed range
- STN_DEC = 0x200, // Support decimal numbers
+ STN_DEC = 0x200, // Support decimal numbers (currently no prefix)
STN_HEX = 0x400, // Support hexadecimal numbers (0x...)
STN_BIN = 0x800, // Support binary numbers (0b...)
STN_OCT = 0x1000, // Support octal numbers (0o...)
#define STN_USFLAGS (STN_SFLAGS | STN_UNDERSCORE)
#define STN_DECLARE_CONVERTOR(type, suffix) \
-const char *str_to_##suffix(type *num, const char *str, const char **next, const uns flags)
+const char *str_to_##suffix(type *num, const char *str, const char **next, const uint flags)
#define STN_SIGNED_CONVERTOR(type, suffix, usuffix) \
-static inline const char *str_to_##suffix(type *num, const char *str, const char **next, const uns flags) \
+static inline const char *str_to_##suffix(type *num, const char *str, const char **next, const uint flags) \
{ \
return str_to_##usuffix((void *) num, str, next, flags | STN_SIGNED | STN_PLUS | STN_MINUS); \
}
-STN_DECLARE_CONVERTOR(uns, uns);
-STN_SIGNED_CONVERTOR(int, int, uns)
+STN_DECLARE_CONVERTOR(uint, uint);
+STN_SIGNED_CONVERTOR(int, int, uint)
+
+STN_DECLARE_CONVERTOR(u32, u32);
+STN_SIGNED_CONVERTOR(s32, s32, u32)
+
+STN_DECLARE_CONVERTOR(u64, u64);
+STN_SIGNED_CONVERTOR(s64, s64, u64)
STN_DECLARE_CONVERTOR(uintmax_t, uintmax);
STN_SIGNED_CONVERTOR(intmax_t, intmax, uintmax)
+// FIXME: For backward compatibility, will be removed soon
+STN_DECLARE_CONVERTOR(uns, uns);
+
#endif