1: /*
2: * atouint - convert an ascii string to an unsigned 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: atouint(
12: const char *str,
13: u_long *uval
14: )
15: {
16: register u_long u;
17: register const char *cp;
18:
19: cp = str;
20: if (*cp == '\0')
21: return 0;
22:
23: u = 0;
24: while (*cp != '\0') {
25: if (!isdigit((int)*cp))
26: return 0;
27: if (u > 429496729 || (u == 429496729 && *cp >= '6'))
28: return 0; /* overflow */
29: u = (u << 3) + (u << 1);
30: u += *cp++ - '0'; /* ascii dependent */
31: }
32:
33: *uval = u;
34: return 1;
35: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>