diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-28 10:54:16 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-11-28 10:54:16 +0000 |
commit | df38188367a9fe10cc4efc00d3236be05178ff4e (patch) | |
tree | 62744bb61c464da31b5e2d2bb2a5ee7f3de2bbba | |
parent | 7df69b887ad07c051b53a0217bc649c4bed20ed4 (diff) | |
download | busybox-w32-df38188367a9fe10cc4efc00d3236be05178ff4e.tar.gz busybox-w32-df38188367a9fe10cc4efc00d3236be05178ff4e.tar.bz2 busybox-w32-df38188367a9fe10cc4efc00d3236be05178ff4e.zip |
fix bug in new str -> num convertors
-rw-r--r-- | libbb/bb_strtonum.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libbb/bb_strtonum.c b/libbb/bb_strtonum.c index 7e28eeb86..6fbd1f87d 100644 --- a/libbb/bb_strtonum.c +++ b/libbb/bb_strtonum.c | |||
@@ -49,6 +49,7 @@ static unsigned long long handle_errors(unsigned long long v, char **endp, char | |||
49 | 49 | ||
50 | unsigned long long bb_strtoull(const char *arg, char **endp, int base) | 50 | unsigned long long bb_strtoull(const char *arg, char **endp, int base) |
51 | { | 51 | { |
52 | unsigned long long v; | ||
52 | char *endptr; | 53 | char *endptr; |
53 | 54 | ||
54 | /* strtoul(" -4200000000") returns 94967296, errno 0 (!) */ | 55 | /* strtoul(" -4200000000") returns 94967296, errno 0 (!) */ |
@@ -57,35 +58,42 @@ unsigned long long bb_strtoull(const char *arg, char **endp, int base) | |||
57 | 58 | ||
58 | /* not 100% correct for lib func, but convenient for the caller */ | 59 | /* not 100% correct for lib func, but convenient for the caller */ |
59 | errno = 0; | 60 | errno = 0; |
60 | return handle_errors(strtoull(arg, &endptr, base), endp, endptr); | 61 | v = strtoull(arg, &endptr, base); |
62 | return handle_errors(v, endp, endptr); | ||
61 | } | 63 | } |
62 | 64 | ||
63 | long long bb_strtoll(const char *arg, char **endp, int base) | 65 | long long bb_strtoll(const char *arg, char **endp, int base) |
64 | { | 66 | { |
67 | unsigned long long v; | ||
65 | char *endptr; | 68 | char *endptr; |
66 | 69 | ||
67 | if (arg[0] != '-' && !isalnum(arg[0])) return ret_ERANGE(); | 70 | if (arg[0] != '-' && !isalnum(arg[0])) return ret_ERANGE(); |
68 | errno = 0; | 71 | errno = 0; |
69 | return handle_errors(strtoll(arg, &endptr, base), endp, endptr); | 72 | v = strtoll(arg, &endptr, base); |
73 | return handle_errors(v, endp, endptr); | ||
70 | } | 74 | } |
71 | 75 | ||
72 | #if ULONG_MAX != ULLONG_MAX | 76 | #if ULONG_MAX != ULLONG_MAX |
73 | unsigned long bb_strtoul(const char *arg, char **endp, int base) | 77 | unsigned long bb_strtoul(const char *arg, char **endp, int base) |
74 | { | 78 | { |
79 | unsigned long v; | ||
75 | char *endptr; | 80 | char *endptr; |
76 | 81 | ||
77 | if (!isalnum(arg[0])) return ret_ERANGE(); | 82 | if (!isalnum(arg[0])) return ret_ERANGE(); |
78 | errno = 0; | 83 | errno = 0; |
79 | return handle_errors(strtoul(arg, &endptr, base), endp, endptr); | 84 | v = strtoul(arg, &endptr, base); |
85 | return handle_errors(v, endp, endptr); | ||
80 | } | 86 | } |
81 | 87 | ||
82 | long bb_strtol(const char *arg, char **endp, int base) | 88 | long bb_strtol(const char *arg, char **endp, int base) |
83 | { | 89 | { |
90 | long v; | ||
84 | char *endptr; | 91 | char *endptr; |
85 | 92 | ||
86 | if (arg[0] != '-' && !isalnum(arg[0])) return ret_ERANGE(); | 93 | if (arg[0] != '-' && !isalnum(arg[0])) return ret_ERANGE(); |
87 | errno = 0; | 94 | errno = 0; |
88 | return handle_errors(strtol(arg, &endptr, base), endp, endptr); | 95 | v = strtol(arg, &endptr, base); |
96 | return handle_errors(v, endp, endptr); | ||
89 | } | 97 | } |
90 | #endif | 98 | #endif |
91 | 99 | ||