From 69e4af157752a09002c18fd0bca43edf1c4f9001 Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sun, 14 Oct 2018 11:55:16 -0400 Subject: [PATCH] unix: restore skipping of phys_addr copy Prior to https://github.com/libuv/libuv/pull/1999, uv_interface_addresses() did not populate the phys_addr field on Cygwin or MinGW. This commit restores that behavior, which was mistakenly changed. Fixes: https://github.com/libuv/libuv/issues/2034 PR-URL: https://github.com/libuv/libuv/pull/2035 Reviewed-By: Ben Noordhuis Reviewed-By: Anna Henningsen Reviewed-By: Santiago Gimeno --- src/unix/bsd-ifaddrs.c | 7 ++++++- src/unix/linux-core.c | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/unix/bsd-ifaddrs.c b/src/unix/bsd-ifaddrs.c index 9825b1c4..4ce48200 100644 --- a/src/unix/bsd-ifaddrs.c +++ b/src/unix/bsd-ifaddrs.c @@ -119,14 +119,19 @@ int uv_interface_addresses(uv_interface_address_t** addresses, int* count) { continue; address = *addresses; - memset(address->phys_addr, 0, sizeof(address->phys_addr)); for (i = 0; i < *count; i++) { +#if defined(__CYGWIN__) || defined(__MSYS__) + memset(address->phys_addr, 0, sizeof(address->phys_addr)); +#else if (strcmp(address->name, ent->ifa_name) == 0) { struct sockaddr_dl* sa_addr; sa_addr = (struct sockaddr_dl*)(ent->ifa_addr); memcpy(address->phys_addr, LLADDR(sa_addr), sizeof(address->phys_addr)); + } else { + memset(address->phys_addr, 0, sizeof(address->phys_addr)); } +#endif address++; } } diff --git a/src/unix/linux-core.c b/src/unix/linux-core.c index 75362eb7..be586af4 100644 --- a/src/unix/linux-core.c +++ b/src/unix/linux-core.c @@ -890,12 +890,13 @@ int uv_interface_addresses(uv_interface_address_t** addresses, continue; address = *addresses; - memset(address->phys_addr, 0, sizeof(address->phys_addr)); for (i = 0; i < (*count); i++) { if (strcmp(address->name, ent->ifa_name) == 0) { sll = (struct sockaddr_ll*)ent->ifa_addr; memcpy(address->phys_addr, sll->sll_addr, sizeof(address->phys_addr)); + } else { + memset(address->phys_addr, 0, sizeof(address->phys_addr)); } address++; }