pike.git/
src/
stralloc.c
Branch:
Tag:
Non-build tags
All tags
No tags
2000-04-01
2000-04-01 07:27:02 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
bbee34e452be4cfc70bc7693846d1390cb45a2ae (
30
lines) (+
17
/-
13
)
[
Show
|
Annotate
]
Branch:
7.9
some bugfixes in STRTOL/STRTOD
Rev: src/port.h:1.25
Rev: src/stralloc.c:1.81
25:
#define HUGE HUGE_VAL #endif /*!HUGE*/
-
RCSID("$Id: stralloc.c,v 1.
80
2000/
03
/
20
21
:
00
:
04
hubbe Exp $");
+
RCSID("$Id: stralloc.c,v 1.
81
2000/
04
/
01
07
:
27
:
02
hubbe Exp $");
#define BEGIN_HASH_SIZE 997 #define MAX_AVG_LINK_LENGTH 3
1755:
return MKPCHARP(0,0); /* make wcc happy */ }
-
#define DIGIT(x) (
isdigit
(x) ? (x) - '0' : \
-
islower
(x) ? (x) + 10 - 'a' : (x) + 10 - 'A')
+
#define DIGIT(x) (
WIDE_ISDIGIT
(x) ? (x) - '0' : \
+
WIDE_ISLOWER
(x) ? (x) + 10 - 'a' : (x) + 10 - 'A')
#define MBASE ('z' - 'a' + 1 + 10) long STRTOL_PCHARP(PCHARP str, PCHARP *ptr, int base)
1767:
if (ptr) *ptr = str; if (base < 0 || base > MBASE) return 0;
-
if (!
isalnum
(c = EXTRACT_PCHARP(str)))
+
if (!
WIDE_ISALNUM
(c = EXTRACT_PCHARP(str)))
{ while (ISSPACE(c)) {
1794:
base = 8; }
-
if (!
isalnum
(c) || (xx = DIGIT(c)) >= base)
+
if (!
WIDE_ISALNUM
(c) || (xx = DIGIT(c)) >= base)
return 0; /* no number formed */ if (base == 16 && c == '0' && isxdigit(INDEX_PCHARP(str,2)) && (INDEX_PCHARP(str,1) == 'x' || INDEX_PCHARP(str,1) == 'X'))
1807:
{ INC_PCHARP(str,1); c=EXTRACT_PCHARP(str);
-
if(!(
isalnum
(c) && (xx=DIGIT(c)) < base)) break;
+
if(!(
WIDE_ISALNUM
(c) && (xx=DIGIT(c)) < base)) break;
val = base * val - xx; } if (ptr) *ptr = str;
1872:
if(base < 0 || MBASE < base) return 0;
-
if(!
isalnum
(c = EXTRACT_PCHARP(str)))
+
if(!
WIDE_ISALNUM
(c = EXTRACT_PCHARP(str)))
{
-
while(ISSPACE(c))
+
while(
WIDE_
ISSPACE(c))
{ INC_PCHARP(str,1); c = EXTRACT_PCHARP(str);
1909:
* For any base > 10, the digits incrementally following * 9 are assumed to be "abc...z" or "ABC...Z". */
-
if(!
isalnum
(c) || (xx = DIGIT(c)) >= base)
+
if(!
WIDE_ISALNUM
(c) || (xx = DIGIT(c)) >= base)
return 0; /* No number formed. */ if(implicit_base && c == '0' &&
1924:
} for(val = -DIGIT(c);
-
isalnum
(
c = (
INC_PCHARP(str,1),EXTRACT_PCHARP(str) )) &&
+
(INC_PCHARP(str,1),
WIDE_ISALNUM(c =
EXTRACT_PCHARP(str) )) &&
(xx = DIGIT(c)) < base && 0 != maxlength--; ) {
2023:
s = nptr; /* Eat whitespace. */
-
while (EXTRACT_PCHARP(s) <256 && ISSPACE(EXTRACT_PCHARP(s))) INC_PCHARP(s,1);
+
while (EXTRACT_PCHARP(s) <256 &&
WIDE_
ISSPACE(EXTRACT_PCHARP(s))) INC_PCHARP(s,1);
/* Get the sign. */ sign = EXTRACT_PCHARP(s) == '-' ? -1 : 1;
2036:
exponent = 0; for (;; INC_PCHARP(s,1)) {
-
if (EXTRACT_PCHARP(s)<256 &&
isdigit
(EXTRACT_PCHARP(s)))
+
if (EXTRACT_PCHARP(s)<256 &&
WIDE_ISDIGIT
(EXTRACT_PCHARP(s)))
{ got_digit = 1;
2121:
goto overflow; }
+
if(exponent < 0 && exponent >-100) /* make sure we don't underflow */
+
num /= pow(10.0, (double) -exponent);
+
else
num *= pow(10.0, (double) exponent); return num * sign;