Changeset View
Changeset View
Standalone View
Standalone View
head/contrib/ntp/libntp/ntp_rfc2553.c
Show First 20 Lines • Show All 197 Lines • ▼ Show 20 Lines | #endif | ||||
pcanon = (void *)(psau + elements); | pcanon = (void *)(psau + elements); | ||||
for (ai_src = src; NULL != ai_src; ai_src = ai_nxt) { | for (ai_src = src; NULL != ai_src; ai_src = ai_nxt) { | ||||
if (just_one) | if (just_one) | ||||
ai_nxt = NULL; | ai_nxt = NULL; | ||||
else | else | ||||
ai_nxt = ai_src->ai_next; | ai_nxt = ai_src->ai_next; | ||||
*ai_cpy = *ai_src; | *ai_cpy = *ai_src; | ||||
REQUIRE(ai_src->ai_addrlen <= sizeof(sockaddr_u)); | DEBUG_INSIST(ai_cpy->ai_canonname == ai_src->ai_canonname); | ||||
INSIST(ai_src->ai_addrlen <= sizeof(sockaddr_u)); | |||||
memcpy(psau, ai_src->ai_addr, ai_src->ai_addrlen); | memcpy(psau, ai_src->ai_addr, ai_src->ai_addrlen); | ||||
ai_cpy->ai_addr = &psau->sa; | ai_cpy->ai_addr = &psau->sa; | ||||
++psau; | ++psau; | ||||
if (NULL != ai_cpy->ai_canonname) { | if (NULL != ai_src->ai_canonname) { | ||||
ai_cpy->ai_canonname = pcanon; | ai_cpy->ai_canonname = pcanon; | ||||
str_octets = 1 + strlen(ai_src->ai_canonname); | str_octets = 1 + strlen(ai_src->ai_canonname); | ||||
memcpy(pcanon, ai_src->ai_canonname, str_octets); | memcpy(pcanon, ai_src->ai_canonname, str_octets); | ||||
pcanon += str_octets; | pcanon += str_octets; | ||||
} | } | ||||
if (NULL != ai_cpy->ai_next) { | if (NULL != ai_cpy->ai_next) { | ||||
if (just_one) | if (just_one) | ||||
ai_cpy->ai_next = NULL; | ai_cpy->ai_next = NULL; | ||||
▲ Show 20 Lines • Show All 256 Lines • ▼ Show 20 Lines | if (ai->ai_addr == NULL) | ||||
return (EAI_MEMORY); | return (EAI_MEMORY); | ||||
/* | /* | ||||
* For an empty node name just use the wildcard. | * For an empty node name just use the wildcard. | ||||
* NOTE: We need to assume that the address family is | * NOTE: We need to assume that the address family is | ||||
* set elsewhere so that we can set the appropriate wildcard | * set elsewhere so that we can set the appropriate wildcard | ||||
*/ | */ | ||||
if (nodename == NULL) { | if (nodename == NULL) { | ||||
ai->ai_addrlen = sizeof(struct sockaddr_storage); | |||||
if (ai->ai_family == AF_INET) | if (ai->ai_family == AF_INET) | ||||
{ | { | ||||
ai->ai_addrlen = sizeof(struct sockaddr_in); | |||||
sockin = (struct sockaddr_in *)ai->ai_addr; | sockin = (struct sockaddr_in *)ai->ai_addr; | ||||
sockin->sin_family = (short) ai->ai_family; | sockin->sin_family = (short) ai->ai_family; | ||||
sockin->sin_addr.s_addr = htonl(INADDR_ANY); | sockin->sin_addr.s_addr = htonl(INADDR_ANY); | ||||
} | } | ||||
else | else | ||||
{ | { | ||||
ai->ai_addrlen = sizeof(struct sockaddr_in6); | |||||
sockin6 = (struct sockaddr_in6 *)ai->ai_addr; | sockin6 = (struct sockaddr_in6 *)ai->ai_addr; | ||||
sockin6->sin6_family = (short) ai->ai_family; | sockin6->sin6_family = (short) ai->ai_family; | ||||
/* | /* | ||||
* we have already zeroed out the address | * we have already zeroed out the address | ||||
* so we don't actually need to do this | * so we don't actually need to do this | ||||
* This assignment is causing problems so | * This assignment is causing problems so | ||||
* we don't do what this would do. | * we don't do what this would do. | ||||
sockin6->sin6_addr = in6addr_any; | sockin6->sin6_addr = in6addr_any; | ||||
▲ Show 20 Lines • Show All 77 Lines • Show Last 20 Lines |