diff options
| author | Roy Marples <roy@marples.name> | 2012-11-14 10:29:30 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2012-11-14 10:29:30 +0000 |
| commit | 987cce5189eda85568c8ad9f7b28e4c8431cc061 (patch) | |
| tree | 1af848a5ef98224c4f957ba46d4e8d9580774207 | |
| parent | 3ca921a30cf0022a0c8a19eae595655b2c40c365 (diff) | |
| download | dhcpcd-987cce5189eda85568c8ad9f7b28e4c8431cc061.tar.xz | |
Provide TAILQ_FOREACH_REVERSE_SAFE if not defined.
When removing routes, do it in reverse order.
| -rwxr-xr-x | configure | 5 | ||||
| -rw-r--r-- | ipv6.c | 2 |
2 files changed, 7 insertions, 0 deletions
@@ -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 @@ -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; } |
