commit efdf6c711810cfa951741071cb7b67c3a76f2651 Author: Nick Mathewson nickm@torproject.org Date: Tue Jul 17 10:41:24 2012 -0400
Fix the remaining instances of nexted SMARTLIST_FOREACH --- changes/smartlist_foreach | 2 ++ src/or/networkstatus.c | 8 ++++---- src/or/rendservice.c | 8 ++++---- 3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/changes/smartlist_foreach b/changes/smartlist_foreach index d1e3505..0a6c960 100644 --- a/changes/smartlist_foreach +++ b/changes/smartlist_foreach @@ -2,3 +2,5 @@ - Do not allow the body of any SMARTLIST_FOREACH block to exceed 10 lines. Doing so in the past has led to hard-to-debug code. The new style is to use the SMARTLIST_FOREACH_{BEGIN,END} pair. + - Do not allow SMARTLIST_FOREACH blocks to nest. Any nested block + ought to be using SMARTLIST_FOREACH_{BEGIN,END}. diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c index 1979250..fadaf90 100644 --- a/src/or/networkstatus.c +++ b/src/or/networkstatus.c @@ -128,12 +128,12 @@ networkstatus_reset_download_failures(void) { int i; const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list(); - SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns, - SMARTLIST_FOREACH(ns->entries, routerstatus_t *, rs, - { + SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) { + SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t *, rs) { if (!router_get_by_descriptor_digest(rs->descriptor_digest)) rs->need_to_mirror = 1; - }));; + } SMARTLIST_FOREACH_END(rs); + } SMARTLIST_FOREACH_END(ns);
for (i=0; i < N_CONSENSUS_FLAVORS; ++i) download_status_reset(&consensus_dl_status[i]); diff --git a/src/or/rendservice.c b/src/or/rendservice.c index 6a51874..6af4778 100644 --- a/src/or/rendservice.c +++ b/src/or/rendservice.c @@ -500,16 +500,16 @@ rend_config_services(const or_options_t *options, int validate_only) /* Copy introduction points to new services. */ /* XXXX This is O(n^2), but it's only called on reconfigure, so it's * probably ok? */ - SMARTLIST_FOREACH(rend_service_list, rend_service_t *, new, { - SMARTLIST_FOREACH(old_service_list, rend_service_t *, old, { + SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, new) { + SMARTLIST_FOREACH_BEGIN(old_service_list, rend_service_t *, old) { if (!strcmp(old->directory, new->directory)) { smartlist_add_all(new->intro_nodes, old->intro_nodes); smartlist_clear(old->intro_nodes); smartlist_add(surviving_services, old); break; } - }); - }); + } SMARTLIST_FOREACH_END(old); + } SMARTLIST_FOREACH_END(new);
/* Close introduction circuits of services we don't serve anymore. */ /* XXXX it would be nicer if we had a nicer abstraction to use here,