diff options
author | Anton Lavrentiev via Cygwin-patches <cygwin-patches@cygwin.com> | 2022-01-17 13:03:14 -0500 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2022-01-18 11:24:48 +0100 |
commit | e195f51af76687d2aebfdd0b24517bd923024b7a (patch) | |
tree | 2cc3da9be9a4b86cab2b5bb223f7370063924b97 /winsup/cygwin/libc | |
parent | 90947659b0b0de783874abf4143099cc71a54308 (diff) | |
download | newlib-e195f51af76687d2aebfdd0b24517bd923024b7a.zip newlib-e195f51af76687d2aebfdd0b24517bd923024b7a.tar.gz newlib-e195f51af76687d2aebfdd0b24517bd923024b7a.tar.bz2 |
Cygwin: resolver: Added processing of AAAA records
AAAA records returned from Windows resolver were flagged as "No
structure" in debug output because of being processed (although
correctly) in the default catch-all case. This patch makes the AAAA
records properly recognized.
Diffstat (limited to 'winsup/cygwin/libc')
-rw-r--r-- | winsup/cygwin/libc/minires-os-if.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/winsup/cygwin/libc/minires-os-if.c b/winsup/cygwin/libc/minires-os-if.c index 6b4c5e3..bb6786f 100644 --- a/winsup/cygwin/libc/minires-os-if.c +++ b/winsup/cygwin/libc/minires-os-if.c @@ -69,15 +69,14 @@ static unsigned char * write_record(unsigned char * ptr, PDNS_RECORD rr, switch(rr->wType) { case DNS_TYPE_A: + case DNS_TYPE_AAAA: { - u_int8_t * aptr = (u_int8_t *) & rr->Data.A.IpAddress; - if (ptr + 4 <= EndPtr) { - ptr[0] = aptr[0]; - ptr[1] = aptr[1]; - ptr[2] = aptr[2]; - ptr[3] = aptr[3]; - } - ptr += 4; + u_int8_t * aptr = rr->wType == DNS_TYPE_A + ? (u_int8_t *) & rr->Data.A.IpAddress : (u_int8_t *) & rr->Data.AAAA.Ip6Address; + int sz = rr->wType == DNS_TYPE_A ? NS_INADDRSZ/*4*/ : NS_IN6ADDRSZ/*16*/; + if (ptr + sz <= EndPtr) + memcpy(ptr, aptr, sz); + ptr += sz; break; } case DNS_TYPE_NS: |