From 6f6bfebce9f4a4f3d91aae0f6be67b45686126e8 Mon Sep 17 00:00:00 2001 From: Masatake Daimon Date: Fri, 7 Nov 2025 01:41:35 +0900 Subject: socket: Improve portability by replacing OS-specific macros with AC_CHECK_HEADERS The primary purpose of this change is to support NetBSD. No functional changes intended. --- configure.ac | 1 + src/socket.c | 34 +++++++++++++++++++--------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/configure.ac b/configure.ac index 9a4acc4..f3d083c 100644 --- a/configure.ac +++ b/configure.ac @@ -39,6 +39,7 @@ PKG_CHECK_MODULES(libplist, libplist-2.0 >= $LIBPLIST_VERSION) # Checks for header files. AC_CHECK_HEADERS([stdint.h stdlib.h string.h]) +AC_CHECK_HEADERS([netpacket/packet.h net/if_dl.h]) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST diff --git a/src/socket.c b/src/socket.c index b107a7c..5d22d14 100644 --- a/src/socket.c +++ b/src/socket.c @@ -56,10 +56,10 @@ #ifdef AF_INET6 #include #include -#if defined (__APPLE__) || defined (__FreeBSD__) || defined (__HAIKU__) +#if defined (HAVE_NET_IF_DL_H) #include #endif -#ifdef __linux__ +#if defined (HAVE_NETPACKET_PACKET_H) #include #endif #endif @@ -907,28 +907,32 @@ int get_primary_mac_address(unsigned char mac_addr_buf[6]) if (ifa->ifa_flags & IFF_LOOPBACK) { continue; } -#if defined(__APPLE__) || defined (__FreeBSD__) || defined (__HAIKU__) +#if defined (HAVE_NET_IF_DL_H) + /* BSD, Darwin, and Haiku */ if (ifa->ifa_addr->sa_family != AF_LINK) { continue; } #if defined (__APPLE__) - if (!strcmp(ifa->ifa_name, "en0")) { -#elif defined (__FreeBSD__) || defined (__HAIKU__) - { -#endif - memcpy(mac_addr_buf, (unsigned char *)LLADDR((struct sockaddr_dl *)(ifa)->ifa_addr), 6); - result = 0; - break; + if (strcmp(ifa->ifa_name, "en0") != 0) { + continue; } -#elif defined (__linux__) +#endif + memcpy(mac_addr_buf, (unsigned char *)LLADDR((struct sockaddr_dl *)(ifa)->ifa_addr), 6); + result = 0; + break; +#elif defined (HAVE_NETPACKET_PACKET_H) + /* Linux */ if (ifa->ifa_addr->sa_family != AF_PACKET) { continue; } - if (strcmp(ifa->ifa_name, "lo") != 0) { - memcpy(mac_addr_buf, ((struct sockaddr_ll*)ifa->ifa_addr)->sll_addr, 6); - result = 0; - break; +#if defined (__linux__) + if (strcmp(ifa->ifa_name, "lo") == 0) { + continue; } +#endif + memcpy(mac_addr_buf, ((struct sockaddr_ll*)ifa->ifa_addr)->sll_addr, 6); + result = 0; + break; #elif defined (WIN32) if (ifa->ifa_data) { memcpy(mac_addr_buf, ifa->ifa_data, 6); -- cgit v1.1-32-gdbae