]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Improve eloop loading sys/queue.h
authorRoy Marples <roy@marples.name>
Tue, 12 May 2015 19:42:44 +0000 (19:42 +0000)
committerRoy Marples <roy@marples.name>
Tue, 12 May 2015 19:42:44 +0000 (19:42 +0000)
dhcpcd.c
eloop.c
eloop.h

index cadc6ed49f7dd89563b44053c0a8879966b78f9b..28bb828a85db08e2ca7d775d03cafaabdb48eba1 100644 (file)
--- a/dhcpcd.c
+++ b/dhcpcd.c
@@ -1327,13 +1327,6 @@ main(int argc, char **argv)
        }
 
        memset(&ctx, 0, sizeof(ctx));
-#ifdef USE_SIGNALS
-#ifndef HAVE_KQUEUE
-       dhcpcd_ctx = &ctx;
-#endif
-       sig = 0;
-       siga = NULL;
-#endif
        closefrom(3);
 
        ctx.log_fd = -1;
diff --git a/eloop.c b/eloop.c
index 77be77e3d07c331e0b229aeb6e31824b80cf14f5..9b5a512a3609041f05e6c9e9bc568284a95644f0 100644 (file)
--- a/eloop.c
+++ b/eloop.c
 #ifndef UNUSED
 #define UNUSED(a) (void)((a))
 #endif
+#ifndef __unused
+#ifdef __GNUC__
+#define __unused   __attribute__((__unused__))
+#else
+#define __unused
+#endif
+#endif
 
 #ifndef MSEC_PER_SEC
 #define MSEC_PER_SEC   1000L
-#endif
-#ifndef NSEC_PER_MSEC
 #define NSEC_PER_MSEC  1000000L
 #endif
 
diff --git a/eloop.h b/eloop.h
index d3ba3349cdd575edb7dca7050ee423371e13d258..74189d55bda90b56e94d78ef0a88473d882ca483 100644 (file)
--- a/eloop.h
+++ b/eloop.h
 #endif
 #endif
 
+/* Our structures require TAILQ macros, which really every libc should
+ * ship as they are useful beyond belief.
+ * Sadly some libc's don't have sys/queue.h and some that do don't have
+ * the TAILQ_FOREACH macro. For those that don't, the application using
+ * this implementation will need to ship a working queue.h somewhere.
+ * If we don't have sys/queue.h found in config.h, then
+ * allow QUEUE_H to override loading queue.h in the current directory. */
+#ifndef TAILQ_FOREACH
 #ifdef HAVE_SYS_QUEUE_H
 #include <sys/queue.h>
+#elif defined(QUEUE_H)
+#define __QUEUE_HEADER(x) #x
+#define _QUEUE_HEADER(x) __QUEUE_HEADER(x)
+#include _QUEUE_HEADER(QUEUE_H)
 #else
 #include "queue.h"
 #endif
+#endif
+
+/* Some systems don't define timespec macros */
+#ifndef timespecclear
+#define timespecclear(tsp)      (tsp)->tv_sec = (time_t)((tsp)->tv_nsec = 0L)
+#define timespecisset(tsp)      ((tsp)->tv_sec || (tsp)->tv_nsec)
+#define timespeccmp(tsp, usp, cmp)                                      \
+        (((tsp)->tv_sec == (usp)->tv_sec) ?                             \
+            ((tsp)->tv_nsec cmp (usp)->tv_nsec) :                       \
+            ((tsp)->tv_sec cmp (usp)->tv_sec))
+#define timespecadd(tsp, usp, vsp)                                      \
+        do {                                                            \
+                (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec;          \
+                (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec;       \
+                if ((vsp)->tv_nsec >= 1000000000L) {                    \
+                        (vsp)->tv_sec++;                                \
+                        (vsp)->tv_nsec -= 1000000000L;                  \
+                }                                                       \
+        } while (/* CONSTCOND */ 0)
+#define timespecsub(tsp, usp, vsp)                                      \
+        do {                                                            \
+                (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec;          \
+                (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec;       \
+                if ((vsp)->tv_nsec < 0) {                               \
+                        (vsp)->tv_sec--;                                \
+                        (vsp)->tv_nsec += 1000000000L;                  \
+                }                                                       \
+        } while (/* CONSTCOND */ 0)
+#endif
 
+/* eloop queues are really only for deleting timeouts registered
+ * for a function or object.
+ * The idea being that one interface as different timeouts for
+ * say DHCP and DHCPv6. */
 #ifndef ELOOP_QUEUE
   #define ELOOP_QUEUE 1
 #endif
 
-/* EXIT_FAILURE is a non zero value and EXIT_SUCCESS is zero.
- * To add a CONTINUE definition, simply do the opposite of EXIT_FAILURE. */
-#define ELOOP_CONTINUE -EXIT_FAILURE
-
 struct eloop_event {
        TAILQ_ENTRY(eloop_event) next;
        int fd;