octtoint.c revision 1.2
1/* $NetBSD: octtoint.c,v 1.2 2009/12/14 00:38:48 christos Exp $ */ 2 3/* 4 * octtoint - convert an ascii string in octal to an unsigned 5 * long, with error checking 6 */ 7#include <stdio.h> 8#include <ctype.h> 9 10#include "ntp_stdlib.h" 11 12int 13octtoint( 14 const char *str, 15 u_long *ival 16 ) 17{ 18 register u_long u; 19 register const char *cp; 20 21 cp = str; 22 23 if (*cp == '\0') 24 return 0; 25 26 u = 0; 27 while (*cp != '\0') { 28 if (!isdigit((unsigned char)*cp) || *cp == '8' || *cp == '9') 29 return 0; 30 if (u >= 0x20000000) 31 return 0; /* overflow */ 32 u <<= 3; 33 u += *cp++ - '0'; /* ascii dependent */ 34 } 35 *ival = u; 36 return 1; 37} 38