summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2012-11-14 10:29:30 +0000
committerRoy Marples <roy@marples.name>2012-11-14 10:29:30 +0000
commit987cce5189eda85568c8ad9f7b28e4c8431cc061 (patch)
tree1af848a5ef98224c4f957ba46d4e8d9580774207
parent3ca921a30cf0022a0c8a19eae595655b2c40c365 (diff)
downloaddhcpcd-987cce5189eda85568c8ad9f7b28e4c8431cc061.tar.xz
Provide TAILQ_FOREACH_REVERSE_SAFE if not defined.
When removing routes, do it in reverse order.
-rwxr-xr-xconfigure5
-rw-r--r--ipv6.c2
2 files changed, 7 insertions, 0 deletions
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;
}