2 * UCW Library -- Conversions of Strings to Numbers
4 * (c) 2010 Daniel Fiala <danfiala@ucw.cz>
6 * This software may be freely distributed and used according to the terms
7 * of the GNU Lesser General Public License.
11 #include "ucw/string.h"
12 #include "ucw/chartype.h"
13 #include "ucw/strtonum.h"
15 static const char err_numeric_overflow[] = "Numeric overflow";
16 static const char err_no_digits[] = "Number contains no digits";
17 static const char err_invalid_character[] = "Invalid character";
18 static const char err_unknown_base[] = "Unknown base";
20 static uns detect_base(const char *p, const uns flags)
22 if ((flags & STN_BASES) && *p == '0')
52 static const char *str_to_num_init(const char **pp, const uns flags, uns *sign, uns *base)
56 const char *err = NULL;
61 if (flags & (STN_SIGNS))
63 if (*p == '-' && (flags & STN_MINUS))
68 else if (*p == '+' && (flags & STN_PLUS))
72 const uns prefix_base = detect_base(p, flags);
80 *base = flags & STN_DBASES_MASK;
87 static inline uns get_digit(const uns c)
95 const int a = c & 0xDF;
104 #define STN_SUFFIX uns
105 #include "ucw/strtonum-gen.h"
107 #define STN_TYPE uintmax_t
108 #define STN_SUFFIX uintmax
109 #include "ucw/strtonum-gen.h"