diff options
Diffstat (limited to 'usr.sbin/xntpd/lib/decodenetnum.c')
-rw-r--r-- | usr.sbin/xntpd/lib/decodenetnum.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/usr.sbin/xntpd/lib/decodenetnum.c b/usr.sbin/xntpd/lib/decodenetnum.c new file mode 100644 index 0000000..32320a2 --- /dev/null +++ b/usr.sbin/xntpd/lib/decodenetnum.c @@ -0,0 +1,58 @@ +/* decodenetnum.c,v 3.1 1993/07/06 01:08:11 jbj Exp + * decodenetnum - return a net number (this is crude, but careful) + */ +#include <sys/types.h> +#include <ctype.h> +#include <sys/socket.h> +#include <netinet/in.h> + +#include "ntp_stdlib.h" + +int +decodenetnum(num, netnum) + const char *num; + U_LONG *netnum; +{ + register const char *cp; + register char *bp; + register int i; + register int temp; + register int eos; + char buf[80]; /* will core dump on really stupid stuff */ + + cp = num; + *netnum = 0; + + if (*cp == '[') { + eos = ']'; + cp++; + } else { + eos = '\0'; + } + + for (i = 0; i < 4; i++) { + bp = buf; + while (isdigit(*cp)) + *bp++ = *cp++; + if (bp == buf) + break; + + if (i < 3) { + if (*cp++ != '.') + break; + } else if (*cp != eos) + break; + + *bp = '\0'; + temp = atoi(buf); + if (temp > 255) + break; + *netnum <<= 8; + *netnum += temp; + } + + if (i < 4) + return 0; + *netnum = htonl(*netnum); + return 1; +} |