decodenetnum.c revision 132452
1/*
2 * decodenetnum - return a net number (this is crude, but careful)
3 */
4#include <sys/types.h>
5#include <ctype.h>
6#include <sys/socket.h>
7#include <netinet/in.h>
8#include <netdb.h>
9
10#include "ntp_stdlib.h"
11
12int
13decodenetnum(
14	const char *num,
15	struct sockaddr_storage *netnum
16	)
17{
18	struct addrinfo hints, *ai = NULL;
19	register int err, i;
20	register const char *cp;
21	char name[80];
22
23	cp = num;
24
25	if (*cp == '[') {
26		cp++;
27		for (i = 0; *cp != ']'; cp++, i++)
28			name[i] = *cp;
29	name[i] = '\0';
30	num = name;
31	}
32	memset(&hints, 0, sizeof(struct addrinfo));
33	hints.ai_flags = AI_NUMERICHOST;
34	err = getaddrinfo(num, NULL, &hints, &ai);
35	if (err != 0)
36		return 0;
37	memcpy(netnum, (struct sockaddr_storage *)ai->ai_addr, ai->ai_addrlen);
38	freeaddrinfo(ai);
39	return 1;
40}
41