From: Roy Marples Date: Wed, 14 Nov 2012 10:29:30 +0000 (+0000) Subject: Provide TAILQ_FOREACH_REVERSE_SAFE if not defined. X-Git-Tag: v5.6.3~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=987cce5189eda85568c8ad9f7b28e4c8431cc061;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 7e3bfafe..72ae62b9 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 352503f5..6ddad002 100644 --- 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; }