diff options
Diffstat (limited to 'contrib/ntp/libntp/atouint.c')
-rw-r--r-- | contrib/ntp/libntp/atouint.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/contrib/ntp/libntp/atouint.c b/contrib/ntp/libntp/atouint.c new file mode 100644 index 0000000..c25e3a0 --- /dev/null +++ b/contrib/ntp/libntp/atouint.c @@ -0,0 +1,35 @@ +/* + * atouint - convert an ascii string to an unsigned long, with error checking + */ +#include <sys/types.h> +#include <ctype.h> + +#include "ntp_types.h" +#include "ntp_stdlib.h" + +int +atouint( + const char *str, + u_long *uval + ) +{ + register u_long u; + register const char *cp; + + cp = str; + if (*cp == '\0') + return 0; + + u = 0; + while (*cp != '\0') { + if (!isdigit((int)*cp)) + return 0; + if (u > 429496729 || (u == 429496729 && *cp >= '6')) + return 0; /* overflow */ + u = (u << 3) + (u << 1); + u += *cp++ - '0'; /* ascii dependent */ + } + + *uval = u; + return 1; +} |