ruby-changes:3361
From: ko1@a...
Date: 2 Jan 2008 23:53:29 +0900
Subject: [ruby-changes:3361] akr - Ruby:r14854 (trunk): * util.c (ruby_strtoul): "0x", "+" and "-" is not a valid integer.
akr 2008-01-02 23:53:16 +0900 (Wed, 02 Jan 2008)
New Revision: 14854
Modified files:
trunk/ChangeLog
trunk/util.c
Log:
* util.c (ruby_strtoul): "0x", "+" and "-" is not a valid integer.
end of integer should be just after "0", the beginning, the
beginning respectively.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=14854&r2=14853&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/util.c?r1=14854&r2=14853&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 14853)
+++ ChangeLog (revision 14854)
@@ -1,3 +1,9 @@
+Wed Jan 2 23:50:15 2008 Tanaka Akira <akr@f...>
+
+ * 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@f...>
* util.c (ruby_strtoul): locale independent strtoul is implemented to
Index: util.c
===================================================================
--- util.c (revision 14853)
+++ util.c (revision 14854)
@@ -117,6 +117,7 @@
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 @@
}
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 @@
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 @@
}
if (sign < 0) {
- ret = -(long)ret;
+ ret = -ret;
return ret;
}
else {
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml