switch (item->ar_item->type) {
case DNS_RTYPE_A:
- srv_update_addr(srv, &(((struct sockaddr_in*)&item->ar_item->address)->sin_addr), AF_INET, "DNS additional record");
+ srv_update_addr(srv, &item->ar_item->address.in4.sin_addr, AF_INET, "DNS additional record");
break;
case DNS_RTYPE_AAAA:
- srv_update_addr(srv, &(((struct sockaddr_in6*)&item->ar_item->address)->sin6_addr), AF_INET6, "DNS additional record");
+ srv_update_addr(srv, &item->ar_item->address.in6.sin6_addr, AF_INET6, "DNS additional record");
break;
}
if (answer_record->data_len != 4)
goto invalid_resp;
- answer_record->address.sa_family = AF_INET;
- memcpy(&(((struct sockaddr_in *)&answer_record->address)->sin_addr),
- reader, answer_record->data_len);
+ answer_record->address.in4.sin_family = AF_INET;
+ memcpy(&answer_record->address.in4.sin_addr, reader, answer_record->data_len);
break;
case DNS_RTYPE_CNAME:
if (answer_record->data_len != 16)
goto invalid_resp;
- answer_record->address.sa_family = AF_INET6;
- memcpy(&(((struct sockaddr_in6 *)&answer_record->address)->sin6_addr),
- reader, answer_record->data_len);
+ answer_record->address.in6.sin6_family = AF_INET6;
+ memcpy(&answer_record->address.in6.sin6_addr, reader, answer_record->data_len);
break;
} /* switch (record type) */
switch(tmp_record->type) {
case DNS_RTYPE_A:
- if (!memcmp(&((struct sockaddr_in *)&answer_record->address)->sin_addr,
- &((struct sockaddr_in *)&tmp_record->address)->sin_addr,
- sizeof(in_addr_t)))
+ if (!memcmp(&answer_record->address.in4.sin_addr,
+ &tmp_record->address.in4.sin_addr,
+ sizeof(answer_record->address.in4.sin_addr)))
found = 1;
break;
case DNS_RTYPE_AAAA:
- if (!memcmp(&((struct sockaddr_in6 *)&answer_record->address)->sin6_addr,
- &((struct sockaddr_in6 *)&tmp_record->address)->sin6_addr,
- sizeof(struct in6_addr)))
+ if (!memcmp(&answer_record->address.in6.sin6_addr,
+ &tmp_record->address.in6.sin6_addr,
+ sizeof(answer_record->address.in6.sin6_addr)))
found = 1;
break;
if (answer_record->data_len != 4)
goto invalid_resp;
- answer_record->address.sa_family = AF_INET;
- memcpy(&(((struct sockaddr_in *)&answer_record->address)->sin_addr),
- reader, answer_record->data_len);
+ answer_record->address.in4.sin_family = AF_INET;
+ memcpy(&answer_record->address.in4.sin_addr, reader, answer_record->data_len);
break;
case DNS_RTYPE_AAAA:
if (answer_record->data_len != 16)
goto invalid_resp;
- answer_record->address.sa_family = AF_INET6;
- memcpy(&(((struct sockaddr_in6 *)&answer_record->address)->sin6_addr),
- reader, answer_record->data_len);
+ answer_record->address.in6.sin6_family = AF_INET6;
+ memcpy(&answer_record->address.in6.sin6_addr, reader, answer_record->data_len);
break;
default:
switch(ar_item->type) {
case DNS_RTYPE_A:
- if (!memcmp(&((struct sockaddr_in *)&answer_record->address)->sin_addr,
- &((struct sockaddr_in *)&ar_item->address)->sin_addr,
- sizeof(in_addr_t)))
+ if (!memcmp(&answer_record->address.in4.sin_addr,
+ &ar_item->address.in4.sin_addr,
+ sizeof(answer_record->address.in4.sin_addr)))
found = 1;
break;
case DNS_RTYPE_AAAA:
- if (!memcmp(&((struct sockaddr_in6 *)&answer_record->address)->sin6_addr,
- &((struct sockaddr_in6 *)&ar_item->address)->sin6_addr,
- sizeof(struct in6_addr)))
+ if (!memcmp(&answer_record->address.in6.sin6_addr,
+ &ar_item->address.in6.sin6_addr,
+ sizeof(answer_record->address.in6.sin6_addr)))
found = 1;
break;
unsigned char ip_type;
if (record->type == DNS_RTYPE_A) {
- ip = &(((struct sockaddr_in *)&record->address)->sin_addr);
ip_type = AF_INET;
+ ip = &record->address.in4.sin_addr;
}
else if (record->type == DNS_RTYPE_AAAA) {
ip_type = AF_INET6;
- ip = &(((struct sockaddr_in6 *)&record->address)->sin6_addr);
+ ip = &record->address.in6.sin6_addr;
}
else
continue;