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