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

configure
ipv6.c

index c8e3bde9bb64391293d6efbba0224725acd5a90a..de4bffd8ad908293f1a133fc5f2e59d1c556410f 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 87bc7ade6832b0a352ca623a7b9f6ef4d45c208a..f56a5d1aeffd8a54b0626fdfea4948a39e74dd93 100644 (file)
--- a/ipv6.c
+++ b/ipv6.c
@@ -437,6 +437,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) &&
@@ -451,6 +452,7 @@ ipv6_build_routes(void)
                }
                free(rt);
        }
+
        free(routes);
        routes = nrs;
 }