]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Get rid of "helper" *.c files
authorMichal Nowak <mnowak@isc.org>
Thu, 4 Jun 2020 16:53:47 +0000 (18:53 +0200)
committerMichał Kępień <michal@isc.org>
Fri, 5 Jun 2020 11:19:49 +0000 (13:19 +0200)
Merge lib/isc/unix/ifiter_getifaddrs.c into lib/isc/unix/interfaceiter.c
and lib/isc/xoshiro128starstar.c into lib/isc/random.c.  This avoids the
need for extra Automake directives required to process the "helper" *.c
files properly and makes the code more localized.

lib/isc/random.c
lib/isc/unix/ifiter_getifaddrs.c [deleted file]
lib/isc/unix/interfaceiter.c
lib/isc/xoshiro128starstar.c [deleted file]
util/copyrights

index aec88370ad08a9a56b4562b2e60d890870f3b288..8ee9578c37352fd4864a459e772f9a07c00395be 100644 (file)
  * the uint32_t random number provider because it is very fast and has
  * good enough properties for our usage pattern.
  */
-#include "xoshiro128starstar.c"
+
+/*
+ * Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org)
+ *
+ * To the extent possible under law, the author has dedicated all
+ * copyright and related and neighboring rights to this software to the
+ * public domain worldwide. This software is distributed without any
+ * warranty.
+ *
+ * See <http://creativecommons.org/publicdomain/zero/1.0/>.
+ */
+
+/*
+ * This is xoshiro128** 1.0, our 32-bit all-purpose, rock-solid generator.
+ * It has excellent (sub-ns) speed, a state size (128 bits) that is large
+ * enough for mild parallelism, and it passes all tests we are aware of.
+ *
+ * For generating just single-precision (i.e., 32-bit) floating-point
+ * numbers, xoshiro128+ is even faster.
+ *
+ * The state must be seeded so that it is not everywhere zero.
+ */
+static thread_local uint32_t seed[4] = { 0 };
+
+static inline uint32_t
+rotl(const uint32_t x, int k) {
+       return ((x << k) | (x >> (32 - k)));
+}
+
+static inline uint32_t
+next(void) {
+       uint32_t result_starstar, t;
+
+       result_starstar = rotl(seed[0] * 5, 7) * 9;
+       t = seed[1] << 9;
+
+       seed[2] ^= seed[0];
+       seed[3] ^= seed[1];
+       seed[1] ^= seed[2];
+       seed[0] ^= seed[3];
+
+       seed[2] ^= t;
+
+       seed[3] = rotl(seed[3], 11);
+
+       return (result_starstar);
+}
 
 static thread_local isc_once_t isc_random_once = ISC_ONCE_INIT;
 
diff --git a/lib/isc/unix/ifiter_getifaddrs.c b/lib/isc/unix/ifiter_getifaddrs.c
deleted file mode 100644 (file)
index eb6d82c..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * See the COPYRIGHT file distributed with this work for additional
- * information regarding copyright ownership.
- */
-
-/*! \file
- * \brief
- * Obtain the list of network interfaces using the getifaddrs(3) library.
- */
-
-#include <ifaddrs.h>
-#include <stdbool.h>
-
-#include <isc/strerr.h>
-
-/*% Iterator Magic */
-#define IFITER_MAGIC ISC_MAGIC('I', 'F', 'I', 'G')
-/*% Valid Iterator */
-#define VALID_IFITER(t) ISC_MAGIC_VALID(t, IFITER_MAGIC)
-
-#ifdef __linux
-static bool seenv6 = false;
-#endif /* ifdef __linux */
-
-/*% Iterator structure */
-struct isc_interfaceiter {
-       unsigned int magic; /*%< Magic number. */
-       isc_mem_t *mctx;
-       void *buf;               /*%< (unused) */
-       unsigned int bufsize;    /*%< (always 0) */
-       struct ifaddrs *ifaddrs; /*%< List of ifaddrs */
-       struct ifaddrs *pos;     /*%< Ptr to current ifaddr */
-       isc_interface_t current; /*%< Current interface data. */
-       isc_result_t result;     /*%< Last result code. */
-#ifdef __linux
-       FILE *proc;
-       char entry[ISC_IF_INET6_SZ];
-       isc_result_t valid;
-#endif /* ifdef __linux */
-};
-
-isc_result_t
-isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
-       isc_interfaceiter_t *iter;
-       isc_result_t result;
-       char strbuf[ISC_STRERRORSIZE];
-
-       REQUIRE(mctx != NULL);
-       REQUIRE(iterp != NULL);
-       REQUIRE(*iterp == NULL);
-
-       iter = isc_mem_get(mctx, sizeof(*iter));
-
-       iter->mctx = mctx;
-       iter->buf = NULL;
-       iter->bufsize = 0;
-       iter->ifaddrs = NULL;
-#ifdef __linux
-       /*
-        * Only open "/proc/net/if_inet6" if we have never seen a IPv6
-        * address returned by getifaddrs().
-        */
-       if (!seenv6) {
-               iter->proc = fopen("/proc/net/if_inet6", "r");
-       } else {
-               iter->proc = NULL;
-       }
-       iter->valid = ISC_R_FAILURE;
-#endif /* ifdef __linux */
-
-       if (getifaddrs(&iter->ifaddrs) < 0) {
-               strerror_r(errno, strbuf, sizeof(strbuf));
-               UNEXPECTED_ERROR(__FILE__, __LINE__,
-                                "getting interface addresses: getifaddrs: %s",
-                                strbuf);
-               result = ISC_R_UNEXPECTED;
-               goto failure;
-       }
-
-       /*
-        * A newly created iterator has an undefined position
-        * until isc_interfaceiter_first() is called.
-        */
-       iter->pos = NULL;
-       iter->result = ISC_R_FAILURE;
-
-       iter->magic = IFITER_MAGIC;
-       *iterp = iter;
-       return (ISC_R_SUCCESS);
-
-failure:
-#ifdef __linux
-       if (iter->proc != NULL) {
-               fclose(iter->proc);
-       }
-#endif                              /* ifdef __linux */
-       if (iter->ifaddrs != NULL) { /* just in case */
-               freeifaddrs(iter->ifaddrs);
-       }
-       isc_mem_put(mctx, iter, sizeof(*iter));
-       return (result);
-}
-
-/*
- * Get information about the current interface to iter->current.
- * If successful, return ISC_R_SUCCESS.
- * If the interface has an unsupported address family,
- * return ISC_R_IGNORE.
- */
-
-static isc_result_t
-internal_current(isc_interfaceiter_t *iter) {
-       struct ifaddrs *ifa;
-       int family;
-       unsigned int namelen;
-
-       REQUIRE(VALID_IFITER(iter));
-
-       ifa = iter->pos;
-
-#ifdef __linux
-       if (iter->pos == NULL) {
-               return (linux_if_inet6_current(iter));
-       }
-#endif /* ifdef __linux */
-
-       INSIST(ifa != NULL);
-       INSIST(ifa->ifa_name != NULL);
-
-       if (ifa->ifa_addr == NULL) {
-               return (ISC_R_IGNORE);
-       }
-
-       family = ifa->ifa_addr->sa_family;
-       if (family != AF_INET && family != AF_INET6) {
-               return (ISC_R_IGNORE);
-       }
-
-#ifdef __linux
-       if (family == AF_INET6) {
-               seenv6 = true;
-       }
-#endif /* ifdef __linux */
-
-       memset(&iter->current, 0, sizeof(iter->current));
-
-       namelen = strlen(ifa->ifa_name);
-       if (namelen > sizeof(iter->current.name) - 1) {
-               namelen = sizeof(iter->current.name) - 1;
-       }
-
-       memset(iter->current.name, 0, sizeof(iter->current.name));
-       memmove(iter->current.name, ifa->ifa_name, namelen);
-
-       iter->current.flags = 0;
-
-       if ((ifa->ifa_flags & IFF_UP) != 0) {
-               iter->current.flags |= INTERFACE_F_UP;
-       }
-
-       if ((ifa->ifa_flags & IFF_POINTOPOINT) != 0) {
-               iter->current.flags |= INTERFACE_F_POINTTOPOINT;
-       }
-
-       if ((ifa->ifa_flags & IFF_LOOPBACK) != 0) {
-               iter->current.flags |= INTERFACE_F_LOOPBACK;
-       }
-
-       iter->current.af = family;
-
-       get_addr(family, &iter->current.address, ifa->ifa_addr, ifa->ifa_name);
-
-       if (ifa->ifa_netmask != NULL) {
-               get_addr(family, &iter->current.netmask, ifa->ifa_netmask,
-                        ifa->ifa_name);
-       }
-
-       if (ifa->ifa_dstaddr != NULL &&
-           (iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0)
-       {
-               get_addr(family, &iter->current.dstaddress, ifa->ifa_dstaddr,
-                        ifa->ifa_name);
-       }
-
-       return (ISC_R_SUCCESS);
-}
-
-/*
- * Step the iterator to the next interface.  Unlike
- * isc_interfaceiter_next(), this may leave the iterator
- * positioned on an interface that will ultimately
- * be ignored.  Return ISC_R_NOMORE if there are no more
- * interfaces, otherwise ISC_R_SUCCESS.
- */
-static isc_result_t
-internal_next(isc_interfaceiter_t *iter) {
-       if (iter->pos != NULL) {
-               iter->pos = iter->pos->ifa_next;
-       }
-       if (iter->pos == NULL) {
-#ifdef __linux
-               if (!seenv6) {
-                       return (linux_if_inet6_next(iter));
-               }
-#endif /* ifdef __linux */
-               return (ISC_R_NOMORE);
-       }
-
-       return (ISC_R_SUCCESS);
-}
-
-static void
-internal_destroy(isc_interfaceiter_t *iter) {
-#ifdef __linux
-       if (iter->proc != NULL) {
-               fclose(iter->proc);
-       }
-       iter->proc = NULL;
-#endif /* ifdef __linux */
-       if (iter->ifaddrs) {
-               freeifaddrs(iter->ifaddrs);
-       }
-       iter->ifaddrs = NULL;
-}
-
-static void
-internal_first(isc_interfaceiter_t *iter) {
-#ifdef __linux
-       linux_if_inet6_first(iter);
-#endif /* ifdef __linux */
-       iter->pos = iter->ifaddrs;
-}
index 875465c10c9a3360a65b89563bb3d4e4446d5fa7..3b5571c73651b2c81d9eebe201fd5991b7bba2df 100644 (file)
@@ -18,7 +18,9 @@
 #endif                 /* ifdef HAVE_SYS_SOCKIO_H */
 
 #include <errno.h>
+#include <ifaddrs.h>
 #include <inttypes.h>
+#include <stdbool.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -142,7 +144,223 @@ static void
 linux_if_inet6_first(isc_interfaceiter_t *iter);
 #endif /* ifdef __linux */
 
-#include "ifiter_getifaddrs.c"
+/*% Iterator Magic */
+#define IFITER_MAGIC ISC_MAGIC('I', 'F', 'I', 'G')
+/*% Valid Iterator */
+#define VALID_IFITER(t) ISC_MAGIC_VALID(t, IFITER_MAGIC)
+
+#ifdef __linux
+static bool seenv6 = false;
+#endif /* ifdef __linux */
+
+/*% Iterator structure */
+struct isc_interfaceiter {
+       unsigned int magic; /*%< Magic number. */
+       isc_mem_t *mctx;
+       void *buf;               /*%< (unused) */
+       unsigned int bufsize;    /*%< (always 0) */
+       struct ifaddrs *ifaddrs; /*%< List of ifaddrs */
+       struct ifaddrs *pos;     /*%< Ptr to current ifaddr */
+       isc_interface_t current; /*%< Current interface data. */
+       isc_result_t result;     /*%< Last result code. */
+#ifdef __linux
+       FILE *proc;
+       char entry[ISC_IF_INET6_SZ];
+       isc_result_t valid;
+#endif /* ifdef __linux */
+};
+
+isc_result_t
+isc_interfaceiter_create(isc_mem_t *mctx, isc_interfaceiter_t **iterp) {
+       isc_interfaceiter_t *iter;
+       isc_result_t result;
+       char strbuf[ISC_STRERRORSIZE];
+
+       REQUIRE(mctx != NULL);
+       REQUIRE(iterp != NULL);
+       REQUIRE(*iterp == NULL);
+
+       iter = isc_mem_get(mctx, sizeof(*iter));
+
+       iter->mctx = mctx;
+       iter->buf = NULL;
+       iter->bufsize = 0;
+       iter->ifaddrs = NULL;
+#ifdef __linux
+       /*
+        * Only open "/proc/net/if_inet6" if we have never seen a IPv6
+        * address returned by getifaddrs().
+        */
+       if (!seenv6) {
+               iter->proc = fopen("/proc/net/if_inet6", "r");
+       } else {
+               iter->proc = NULL;
+       }
+       iter->valid = ISC_R_FAILURE;
+#endif /* ifdef __linux */
+
+       if (getifaddrs(&iter->ifaddrs) < 0) {
+               strerror_r(errno, strbuf, sizeof(strbuf));
+               UNEXPECTED_ERROR(__FILE__, __LINE__,
+                                "getting interface addresses: getifaddrs: %s",
+                                strbuf);
+               result = ISC_R_UNEXPECTED;
+               goto failure;
+       }
+
+       /*
+        * A newly created iterator has an undefined position
+        * until isc_interfaceiter_first() is called.
+        */
+       iter->pos = NULL;
+       iter->result = ISC_R_FAILURE;
+
+       iter->magic = IFITER_MAGIC;
+       *iterp = iter;
+       return (ISC_R_SUCCESS);
+
+failure:
+#ifdef __linux
+       if (iter->proc != NULL) {
+               fclose(iter->proc);
+       }
+#endif                              /* ifdef __linux */
+       if (iter->ifaddrs != NULL) { /* just in case */
+               freeifaddrs(iter->ifaddrs);
+       }
+       isc_mem_put(mctx, iter, sizeof(*iter));
+       return (result);
+}
+
+/*
+ * Get information about the current interface to iter->current.
+ * If successful, return ISC_R_SUCCESS.
+ * If the interface has an unsupported address family,
+ * return ISC_R_IGNORE.
+ */
+
+static isc_result_t
+internal_current(isc_interfaceiter_t *iter) {
+       struct ifaddrs *ifa;
+       int family;
+       unsigned int namelen;
+
+       REQUIRE(VALID_IFITER(iter));
+
+       ifa = iter->pos;
+
+#ifdef __linux
+       if (iter->pos == NULL) {
+               return (linux_if_inet6_current(iter));
+       }
+#endif /* ifdef __linux */
+
+       INSIST(ifa != NULL);
+       INSIST(ifa->ifa_name != NULL);
+
+       if (ifa->ifa_addr == NULL) {
+               return (ISC_R_IGNORE);
+       }
+
+       family = ifa->ifa_addr->sa_family;
+       if (family != AF_INET && family != AF_INET6) {
+               return (ISC_R_IGNORE);
+       }
+
+#ifdef __linux
+       if (family == AF_INET6) {
+               seenv6 = true;
+       }
+#endif /* ifdef __linux */
+
+       memset(&iter->current, 0, sizeof(iter->current));
+
+       namelen = strlen(ifa->ifa_name);
+       if (namelen > sizeof(iter->current.name) - 1) {
+               namelen = sizeof(iter->current.name) - 1;
+       }
+
+       memset(iter->current.name, 0, sizeof(iter->current.name));
+       memmove(iter->current.name, ifa->ifa_name, namelen);
+
+       iter->current.flags = 0;
+
+       if ((ifa->ifa_flags & IFF_UP) != 0) {
+               iter->current.flags |= INTERFACE_F_UP;
+       }
+
+       if ((ifa->ifa_flags & IFF_POINTOPOINT) != 0) {
+               iter->current.flags |= INTERFACE_F_POINTTOPOINT;
+       }
+
+       if ((ifa->ifa_flags & IFF_LOOPBACK) != 0) {
+               iter->current.flags |= INTERFACE_F_LOOPBACK;
+       }
+
+       iter->current.af = family;
+
+       get_addr(family, &iter->current.address, ifa->ifa_addr, ifa->ifa_name);
+
+       if (ifa->ifa_netmask != NULL) {
+               get_addr(family, &iter->current.netmask, ifa->ifa_netmask,
+                        ifa->ifa_name);
+       }
+
+       if (ifa->ifa_dstaddr != NULL &&
+           (iter->current.flags & INTERFACE_F_POINTTOPOINT) != 0)
+       {
+               get_addr(family, &iter->current.dstaddress, ifa->ifa_dstaddr,
+                        ifa->ifa_name);
+       }
+
+       return (ISC_R_SUCCESS);
+}
+
+/*
+ * Step the iterator to the next interface.  Unlike
+ * isc_interfaceiter_next(), this may leave the iterator
+ * positioned on an interface that will ultimately
+ * be ignored.  Return ISC_R_NOMORE if there are no more
+ * interfaces, otherwise ISC_R_SUCCESS.
+ */
+static isc_result_t
+internal_next(isc_interfaceiter_t *iter) {
+       if (iter->pos != NULL) {
+               iter->pos = iter->pos->ifa_next;
+       }
+       if (iter->pos == NULL) {
+#ifdef __linux
+               if (!seenv6) {
+                       return (linux_if_inet6_next(iter));
+               }
+#endif /* ifdef __linux */
+               return (ISC_R_NOMORE);
+       }
+
+       return (ISC_R_SUCCESS);
+}
+
+static void
+internal_destroy(isc_interfaceiter_t *iter) {
+#ifdef __linux
+       if (iter->proc != NULL) {
+               fclose(iter->proc);
+       }
+       iter->proc = NULL;
+#endif /* ifdef __linux */
+       if (iter->ifaddrs) {
+               freeifaddrs(iter->ifaddrs);
+       }
+       iter->ifaddrs = NULL;
+}
+
+static void
+internal_first(isc_interfaceiter_t *iter) {
+#ifdef __linux
+       linux_if_inet6_first(iter);
+#endif /* ifdef __linux */
+       iter->pos = iter->ifaddrs;
+}
 
 #ifdef __linux
 static void
diff --git a/lib/isc/xoshiro128starstar.c b/lib/isc/xoshiro128starstar.c
deleted file mode 100644 (file)
index ba14e48..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Portions Copyright (C) Internet Systems Consortium, Inc. ("ISC")
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * See the COPYRIGHT file distributed with this work for additional
- * information regarding copyright ownership.
- */
-
-/*
- * Written in 2018 by David Blackman and Sebastiano Vigna (vigna@acm.org)
- *
- * To the extent possible under law, the author has dedicated all
- * copyright and related and neighboring rights to this software to the
- * public domain worldwide. This software is distributed without any
- * warranty.
- *
- * See <http://creativecommons.org/publicdomain/zero/1.0/>.
- */
-
-#include <inttypes.h>
-
-#include <isc/thread.h>
-
-/*
- * This is xoshiro128** 1.0, our 32-bit all-purpose, rock-solid generator.
- * It has excellent (sub-ns) speed, a state size (128 bits) that is large
- * enough for mild parallelism, and it passes all tests we are aware of.
- *
- * For generating just single-precision (i.e., 32-bit) floating-point
- * numbers, xoshiro128+ is even faster.
- *
- * The state must be seeded so that it is not everywhere zero.
- */
-static thread_local uint32_t seed[4] = { 0 };
-
-static inline uint32_t
-rotl(const uint32_t x, int k) {
-       return ((x << k) | (x >> (32 - k)));
-}
-
-static inline uint32_t
-next(void) {
-       uint32_t result_starstar, t;
-
-       result_starstar = rotl(seed[0] * 5, 7) * 9;
-       t = seed[1] << 9;
-
-       seed[2] ^= seed[0];
-       seed[3] ^= seed[1];
-       seed[1] ^= seed[2];
-       seed[0] ^= seed[3];
-
-       seed[2] ^= t;
-
-       seed[3] = rotl(seed[3], 11);
-
-       return (result_starstar);
-}
index e86e83d2b30b330bb683a63fefa45331bdc19519..53b9c34e29c512a2a6692f4650b46f0335a42b1d 100644 (file)
 ./lib/isc/unix/errno2result.h                  C       2000,2001,2004,2005,2007,2011,2012,2016,2018,2019,2020
 ./lib/isc/unix/file.c                          C       2000,2001,2002,2004,2005,2007,2009,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020
 ./lib/isc/unix/fsaccess.c                      C       2000,2001,2004,2005,2006,2007,2016,2018,2019,2020
-./lib/isc/unix/ifiter_getifaddrs.c             C       2003,2004,2005,2007,2008,2009,2014,2016,2018,2019,2020
 ./lib/isc/unix/include/isc/align.h             C       2019,2020
 ./lib/isc/unix/include/isc/dir.h               C       1999,2000,2001,2004,2005,2007,2016,2018,2019,2020
 ./lib/isc/unix/include/isc/net.h               C       1999,2000,2001,2002,2003,2004,2005,2007,2008,2012,2013,2014,2016,2017,2018,2019,2020
 ./lib/isc/win32/time.c                         C       1998,1999,2000,2001,2003,2004,2006,2007,2008,2009,2012,2013,2014,2015,2016,2017,2018,2019,2020
 ./lib/isc/win32/unistd.h                       C       2000,2001,2004,2007,2008,2009,2016,2018,2019,2020
 ./lib/isc/win32/win32os.c                      C       2002,2004,2007,2013,2014,2015,2016,2018,2019,2020
-./lib/isc/xoshiro128starstar.c                 C.PORTION       2018,2019,2020
 ./lib/isccc/alist.c                            C.NOM   2001,2004,2005,2007,2015,2016,2018,2019,2020
 ./lib/isccc/api                                        X       2001,2006,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020
 ./lib/isccc/base64.c                           C.NOM   2001,2004,2005,2007,2013,2016,2018,2019,2020