]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Dr. Seuss on iterating circular lists: "It's fun to have fun, but you
authorNick Mathewson <nickm@torproject.org>
Tue, 23 Nov 2004 06:08:08 +0000 (06:08 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 23 Nov 2004 06:08:08 +0000 (06:08 +0000)
have to know how."

svn:r2948

src/or/circuitbuild.c

index bf2c2b859d2dd042025e617a71e858344ae5d659..1108b688a801c119df1970bbe0a9218a6774c700 100644 (file)
@@ -86,9 +86,12 @@ circuit_list_path(circuit_t *circ, int verbose)
     smartlist_add(elements, tor_strdup(buf));
   }
 
-  for (hop = circ->cpath; hop && hop != circ->cpath; hop = hop->next) {
+  hop = circ->cpath;
+  do {
     const char *elt;
     routerinfo_t *r;
+    if (!hop)
+      break;
     if (!verbose && hop->state != CPATH_STATE_OPEN)
       break;
     if ((r = router_get_by_digest(hop->identity_digest))) {
@@ -109,7 +112,8 @@ circuit_list_path(circuit_t *circ, int verbose)
     } else {
       smartlist_add(elements, tor_strdup(elt));
     }
-  }
+    hop = hop->next;
+  } while (hop != circ->cpath);
 
   s = smartlist_join_strings(elements, verbose?" ":",", 0, NULL);
   SMARTLIST_FOREACH(elements, char*, cp, tor_free(cp));
@@ -212,10 +216,14 @@ circuit_dump_details(int severity, circuit_t *circ, int poll_index,
     if(circ->state == CIRCUIT_STATE_BUILDING)
       log(severity,"Building: desired len %d, planned exit node %s.",
           circ->build_state->desired_path_len, circ->build_state->chosen_exit_name);
-    for(hop=circ->cpath;hop->next != circ->cpath; hop=hop->next)
+    hop = circ->cpath;
+    do {
+      if (!hop) break;
       log(severity,"hop: state %d, addr 0x%.8x, port %d", hop->state,
           (unsigned int)hop->addr,
           (int)hop->port);
+      hop = hop->next;
+    } while (hop != circ->cpath);
   }
 }