Browse Source

Increment step of a for loop should only happen once.

svn:r3746
Nick Mathewson 20 years ago
parent
commit
2b7907ef42
1 changed files with 7 additions and 9 deletions
  1. 7 9
      src/or/connection_edge.c

+ 7 - 9
src/or/connection_edge.c

@@ -718,24 +718,22 @@ addressmap_get_mappings(smartlist_t *sl, time_t min_expires, time_t max_expires)
    void *_val;
    addressmap_entry_t *val;
 
-   for (iter = strmap_iter_init(addressmap); !strmap_iter_done(iter);
-        iter = strmap_iter_next(addressmap,iter)) {
+   for (iter = strmap_iter_init(addressmap); !strmap_iter_done(iter); ) {
      strmap_iter_get(iter, &key, &_val);
      val = _val;
      if (val->expires >= min_expires && val->expires <= max_expires) {
-       if (sl) {
+       if (!sl) {
+         addressmap_ent_remove(key, val);
+         iter = strmap_iter_next_rmv(addressmap,iter);
+         continue;
+       } else {
          size_t len = strlen(key)+strlen(val->new_address)+2;
          char *line = tor_malloc(len);
          tor_snprintf(line, len, "%s %s", key, val->new_address);
          smartlist_add(sl, line);
-         iter = strmap_iter_next(addressmap,iter);
-       } else {
-         addressmap_ent_remove(key, val);
-         iter = strmap_iter_next_rmv(addressmap,iter);
        }
-     } else {
-       iter = strmap_iter_next(addressmap,iter);
      }
+     iter = strmap_iter_next(addressmap,iter);
    }
 }