Branch: Tag:

2000-04-01

2000-04-01 07:27:02 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>

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;