From: Roy Marples Date: Wed, 31 Oct 2012 20:14:08 +0000 (+0000) Subject: Provide TAILQ_FOREACH_REVERSE_SAFE if not defined. X-Git-Tag: v5.99.3~43 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6855bff4c405ebf2463f83892c2e544224e42b98;p=thirdparty%2Fdhcpcd.git Provide TAILQ_FOREACH_REVERSE_SAFE if not defined. When removing routes, do it in reverse order. --- diff --git a/configure b/configure index c8e3bde9..de4bffd8 100755 --- 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 87bc7ade..f56a5d1a 100644 --- 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; }