Annotation of 42BSD/ingres/source/gutil/atol.c, revision 1.1.1.1

1.1       root        1: # include      <sccs.h>
                      2: 
                      3: SCCSID(@(#)atol.c      7.1     2/5/81)
                      4: 
                      5: /*
                      6: **  ASCII CHARACTER STRING TO 32-BIT INTEGER CONVERSION
                      7: **
                      8: **     `a' is a pointer to the character string, `i' is a
                      9: **     pointer to the doubleword which is to contain the result.
                     10: **
                     11: **     The return value of the function is:
                     12: **             zero:   succesful conversion; `i' contains the integer
                     13: **             +1:     numeric overflow; `i' is unchanged
                     14: **             -1:     syntax error; `i' is unchanged
                     15: **
                     16: **     A valid string is of the form:
                     17: **             <space>* [+-] <space>* <digit>* <space>*
                     18: */
                     19: 
                     20: atol(a, i)
                     21: register char  *a;
                     22: long   *i;
                     23: {
                     24:        register int    sign;   /* flag to indicate the sign */
                     25:        long            x;      /* holds the integer being formed */
                     26:        register char   c;
                     27: 
                     28:        sign = 0;
                     29:        /* skip leading blanks */
                     30:        while (*a == ' ')
                     31:                a++;
                     32:        /* check for sign */
                     33:        switch (*a)
                     34:        {
                     35: 
                     36:          case '-':
                     37:                sign = -1;
                     38: 
                     39:          case '+':
                     40:                while (*++a == ' ');
                     41:        }
                     42: 
                     43:        /* at this point everything had better be numeric */
                     44:        x = 0;
                     45:        while ((c = *a) <= '9' && c >= '0')
                     46:        {
                     47:                /* check for overflow */
                     48:                /* 2 ** 31 = 2147483648 */
                     49:                if (x > 0x7fffffffL / 10)
                     50:                        return (1);
                     51:                x = x * 10 + (c - '0');
                     52:                if (x < 0)      /* check if new digit caused overflow */
                     53:                        return (1);
                     54:                a++;
                     55:        }
                     56: 
                     57:        /* eaten all the numerics; better be all blanks */
                     58:        while (c = *a++)
                     59:                if(c != ' ')                    /* syntax error */
                     60:                        return (-1);
                     61:        *i = sign ? -x : x;
                     62:        return (0);             /* successful termination */
                     63: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.