diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-25 14:49:04 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-25 14:49:04 +0000 |
commit | 43bddf31e95080abf7232952da9064207636f47b (patch) | |
tree | bcd498d7eb67a83b49f55d881fedc8ff05d89fb5 /libbb/xatonum.c | |
parent | f2408e6c3ff5f9f798bb5553346d9e1657dc9833 (diff) | |
download | busybox-w32-43bddf31e95080abf7232952da9064207636f47b.tar.gz busybox-w32-43bddf31e95080abf7232952da9064207636f47b.tar.bz2 busybox-w32-43bddf31e95080abf7232952da9064207636f47b.zip |
small improvements in str -> num convertors
Diffstat (limited to 'libbb/xatonum.c')
-rw-r--r-- | libbb/xatonum.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/libbb/xatonum.c b/libbb/xatonum.c index 910667c14..0d487dd9b 100644 --- a/libbb/xatonum.c +++ b/libbb/xatonum.c | |||
@@ -52,6 +52,15 @@ | |||
52 | #endif | 52 | #endif |
53 | 53 | ||
54 | #if UINT_MAX != ULONG_MAX | 54 | #if UINT_MAX != ULONG_MAX |
55 | extern inline unsigned bb_strtoui(const char *str, char **end, int b) | ||
56 | { | ||
57 | unsigned long v = strtoul(str, end, b); | ||
58 | if (v > UINT_MAX) { | ||
59 | errno = ERANGE; | ||
60 | return UINT_MAX; | ||
61 | } | ||
62 | return v; | ||
63 | } | ||
55 | #define type int | 64 | #define type int |
56 | #define xstrtou(rest) xstrtou##rest | 65 | #define xstrtou(rest) xstrtou##rest |
57 | #define xstrto(rest) xstrtoi##rest | 66 | #define xstrto(rest) xstrtoi##rest |
@@ -60,7 +69,8 @@ | |||
60 | #define XSTR_UTYPE_MAX UINT_MAX | 69 | #define XSTR_UTYPE_MAX UINT_MAX |
61 | #define XSTR_TYPE_MAX INT_MAX | 70 | #define XSTR_TYPE_MAX INT_MAX |
62 | #define XSTR_TYPE_MIN INT_MIN | 71 | #define XSTR_TYPE_MIN INT_MIN |
63 | #define XSTR_STRTOU strtoul | 72 | /* libc has no strtoui, so we need to create/use our own */ |
73 | #define XSTR_STRTOU bb_strtoui | ||
64 | #include "xatonum_template.c" | 74 | #include "xatonum_template.c" |
65 | #undef type | 75 | #undef type |
66 | #undef xstrtou | 76 | #undef xstrtou |
@@ -77,7 +87,7 @@ | |||
77 | 87 | ||
78 | int xatoi_u(const char *numstr) | 88 | int xatoi_u(const char *numstr) |
79 | { | 89 | { |
80 | return xatoul_range(numstr, 0, INT_MAX); | 90 | return xatou_range(numstr, 0, INT_MAX); |
81 | } | 91 | } |
82 | 92 | ||
83 | uint32_t xatou32(const char *numstr) | 93 | uint32_t xatou32(const char *numstr) |
@@ -87,5 +97,5 @@ uint32_t xatou32(const char *numstr) | |||
87 | 97 | ||
88 | uint16_t xatou16(const char *numstr) | 98 | uint16_t xatou16(const char *numstr) |
89 | { | 99 | { |
90 | return xatoul_range(numstr, 0, 0xffff); | 100 | return xatou_range(numstr, 0, 0xffff); |
91 | } | 101 | } |