]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Provide TAILQ_FOREACH_REVERSE_SAFE if not defined.
authorRoy Marples <roy@marples.name>
Wed, 14 Nov 2012 10:29:30 +0000 (10:29 +0000)
committerRoy Marples <roy@marples.name>
Wed, 14 Nov 2012 10:29:30 +0000 (10:29 +0000)
When removing routes, do it in reverse order.

configure
ipv6.c

index 7e3bfafe429bdbacaf43e5b00ac07bff6076f38e..72ae62b9277bb6e30b7b82f53107ae9b117ffced 100755 (executable)
--- a/configure
+++ b/configure
@@ -213,6 +213,7 @@ if [ -n "$DEBUG" -a "$DEBUG" != no -a "$DEBUG" != false ]; then
 elif [ -z "$DEBUG" -a -d .git ]; then
        printf "Found git ... "
        DEBUG=yes
+       echo "CFLAGS+=          -ggdb" >>$CONFIG_MK
 else
        DEBUG=no
 fi
@@ -404,6 +405,10 @@ if [ "$TAILQ_FOREACH_SAFE" = no ]; then
        for ((var) = TAILQ_FIRST((head));                               \
            (var) && ((next) = TAILQ_NEXT((var), field), 1);            \
            (var) = (next))
+#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, prev)   \
+        for ((var) = TAILQ_LAST((head), headname);                     \
+                (var) && ((prev) = TAILQ_PREV((var), headname, field), 1);\
+                (var) = (prev))
 EOF
 fi
 
diff --git a/ipv6.c b/ipv6.c
index 352503f52c4e8a213ca21bfda30f7b95fe18f3df..6ddad0027faaf01a837e3a6d5cc8e9b6730e3c52 100644 (file)
--- a/ipv6.c
+++ b/ipv6.c
@@ -430,6 +430,7 @@ ipv6_build_routes(void)
         * If we own the default route, but not RA management itself
         * then we need to preserve the last best default route we had */
        TAILQ_FOREACH_REVERSE_SAFE(rt, routes, rt6head, next, rtn) {
+               TAILQ_REMOVE(routes, rt, next);
                if (find_route6(nrs, rt) == NULL) {
                        if (!have_default &&
                            (options & DHCPCD_IPV6RA_OWN_DEFAULT) &&
@@ -444,6 +445,7 @@ ipv6_build_routes(void)
                }
                free(rt);
        }
+
        free(routes);
        routes = nrs;
 }