Changeset 346


Ignore:
Timestamp:
Feb 20, 2009, 3:09:25 AM (9 years ago)
Author:
khorben
Message:

Added strtoll() and strtoul()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/System/Sources/libc/src/stdlib.c

    r330 r346  
    635635
    636636/* strtol */
    637 static unsigned long _strtoul(char const * str, char ** endptr, int base,
     637static unsigned long long _strtoull(char const * str, char ** endptr, int base,
    638638                int * neg);
     639
    639640long strtol(char const * str, char ** endptr, int base)
    640641{
     
    642643        int neg = 0;
    643644
    644         ret = _strtoul(str, endptr, base, &neg);
     645        ret = _strtoull(str, endptr, base, &neg);
    645646        if(neg != 0)
    646647        {
     
    660661}
    661662
    662 static unsigned long _strtoul(char const * str, char ** endptr, int base,
     663static unsigned long long _strtoull(char const * str, char ** endptr, int base,
    663664                int * neg)
    664665{
    665         unsigned long ret = 0;
     666        unsigned long long ret = 0;
    666667        char const * p;
    667668        int r;
     
    723724
    724725
     726/* strtoll */
     727long long strtoll(char const * str, char ** endptr, int base)
     728{
     729        unsigned long long ret;
     730        int neg = 0;
     731
     732        ret = _strtoull(str, endptr, base, &neg);
     733        if(neg != 0)
     734        {
     735                if(ret > (unsigned)LONG_MAX+1)
     736                {
     737                        errno = ERANGE;
     738                        return LONG_MIN;
     739                }
     740                return -ret;
     741        }
     742        if(ret > LONG_MAX)
     743        {
     744                errno = ERANGE;
     745                return LONG_MAX;
     746        }
     747        return ret;
     748}
     749
     750
    725751/* strtoul */
    726752unsigned long strtoul(char const * str, char ** endptr, int base)
    727753{
    728         return _strtoul(str, endptr, base, NULL);
     754        return _strtoull(str, endptr, base, NULL);
     755}
     756
     757
     758/* strtoull */
     759unsigned long long strtoull(char const * str, char ** endptr, int base)
     760{
     761        return _strtoull(str, endptr, base, NULL);
    729762}
    730763
Note: See TracChangeset for help on using the changeset viewer.