mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* util.c (ruby_strtoul): "0x", "+" and "-" is not a valid integer.
end of integer should be just after "0", the beginning, the beginning respectively. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14854 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
99fc557fa5
commit
1db9577184
2 changed files with 13 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
Wed Jan 2 23:50:15 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* util.c (ruby_strtoul): "0x", "+" and "-" is not a valid integer.
|
||||
end of integer should be just after "0", the beginning, the
|
||||
beginning respectively.
|
||||
|
||||
Wed Jan 2 15:23:15 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* util.c (ruby_strtoul): locale independent strtoul is implemented to
|
||||
|
|
9
util.c
9
util.c
|
@ -117,6 +117,7 @@ ruby_strtoul(const char *str, char **endptr, int base)
|
|||
int sign = 0;
|
||||
size_t len;
|
||||
unsigned long ret;
|
||||
const char *subject_found = str;
|
||||
|
||||
if (base == 1 || 36 < base) {
|
||||
errno = EINVAL;
|
||||
|
@ -136,6 +137,7 @@ ruby_strtoul(const char *str, char **endptr, int base)
|
|||
}
|
||||
|
||||
if (str[0] == '0') {
|
||||
subject_found = str+1;
|
||||
if (base == 0 || base == 16) {
|
||||
if (str[1] == 'x' || str[1] == 'X') {
|
||||
b = 16;
|
||||
|
@ -157,8 +159,11 @@ ruby_strtoul(const char *str, char **endptr, int base)
|
|||
|
||||
ret = scan_digits(str, b, &len, &overflow);
|
||||
|
||||
if (0 < len)
|
||||
subject_found = str+len;
|
||||
|
||||
if (endptr)
|
||||
*endptr = (char*)(str+len);
|
||||
*endptr = (char*)subject_found;
|
||||
|
||||
if (overflow) {
|
||||
errno = ERANGE;
|
||||
|
@ -166,7 +171,7 @@ ruby_strtoul(const char *str, char **endptr, int base)
|
|||
}
|
||||
|
||||
if (sign < 0) {
|
||||
ret = -(long)ret;
|
||||
ret = -ret;
|
||||
return ret;
|
||||
}
|
||||
else {
|
||||
|
|
Loading…
Reference in a new issue