Annotation of embedaddon/ntp/libntp/atoint.c, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * atoint - convert an ascii string to a signed long, with error checking
                      3:  */
                      4: #include <sys/types.h>
                      5: #include <ctype.h>
                      6: 
                      7: #include "ntp_types.h"
                      8: #include "ntp_stdlib.h"
                      9: 
                     10: int
                     11: atoint(
                     12:        const char *str,
                     13:        long *ival
                     14:        )
                     15: {
                     16:        register long u;
                     17:        register const char *cp;
                     18:        register int isneg;
                     19:        register int oflow_digit;
                     20: 
                     21:        cp = str;
                     22: 
                     23:        if (*cp == '-') {
                     24:                cp++;
                     25:                isneg = 1;
                     26:                oflow_digit = '8';
                     27:        } else {
                     28:                isneg = 0;
                     29:                oflow_digit = '7';
                     30:        }
                     31: 
                     32:        if (*cp == '\0')
                     33:            return 0;
                     34: 
                     35:        u = 0;
                     36:        while (*cp != '\0') {
                     37:                if (!isdigit((int)*cp))
                     38:                    return 0;
                     39:                if (u > 214748364 || (u == 214748364 && *cp > oflow_digit))
                     40:                    return 0;   /* overflow */
                     41:                u = (u << 3) + (u << 1);
                     42:                u += *cp++ - '0';       /* ascii dependent */
                     43:        }
                     44: 
                     45:        if (isneg)
                     46:            *ival = -u;
                     47:        else 
                     48:            *ival = u;
                     49:        return 1;
                     50: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>