]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Make smartlist Do What Arma Expects.
authorNick Mathewson <nickm@torproject.org>
Tue, 30 Mar 2004 22:59:00 +0000 (22:59 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 30 Mar 2004 22:59:00 +0000 (22:59 +0000)
svn:r1401

src/common/util.c
src/common/util.h
src/or/circuit.c
src/or/onion.c
src/or/routerlist.c

index 069e879d00f9bfa7109b1a999870713b45ee1e8c..2a688316b67d9d8b6f2e68b43c25ef66d21f2d5a 100644 (file)
@@ -117,10 +117,11 @@ void set_uint32(char *cp, uint32_t v)
  * _add() adds an element, _remove() removes an element if it's there,
  * _choose() returns a random element.
  */
-smartlist_t *smartlist_create(int capacity) {
+#define SMARTLIST_DEFAULT_CAPACITY 32
+smartlist_t *smartlist_create() {
   smartlist_t *sl = tor_malloc(sizeof(smartlist_t));
   sl->num_used = 0;
-  sl->capacity = capacity;
+  sl->capacity = SMARTLIST_DEFAULT_CAPACITY;
   sl->list = tor_malloc(sizeof(void *) * sl->capacity);
   return sl;
 }
@@ -130,8 +131,8 @@ void smartlist_free(smartlist_t *sl) {
   free(sl);
 }
 
-void smartlist_grow_capacity(smartlist_t *sl, int n) {
-  if (sl->capacity < n) {
+void smartlist_set_capacity(smartlist_t *sl, int n) {
+  if (sl->capacity != n && sl->num_used < n) {
     sl->capacity = n;
     sl->list = tor_realloc(sl->list, sizeof(void*)*sl->capacity);
   }
index 9465a8f786ffc2829def080d115a355e063106d8..862a657e721284d86a1562c1d68239b2ba53c47a 100644 (file)
@@ -64,9 +64,9 @@ typedef struct {
   int capacity;
 } smartlist_t;
 
-smartlist_t *smartlist_create(int capacity);
+smartlist_t *smartlist_create();
 void smartlist_free(smartlist_t *sl);
-void smartlist_grow_capacity(smartlist_t *sl, int n);
+void smartlist_set_capacity(smartlist_t *sl, int n);
 void smartlist_add(smartlist_t *sl, void *element);
 void smartlist_remove(smartlist_t *sl, void *element);
 int smartlist_isin(smartlist_t *sl, void *element);
index 05ee82d3e541e96e76d390b8df2cca47d2891091..017194dae4d1e73dc3ef0646bcdac0dac56d33ba 100644 (file)
@@ -946,7 +946,7 @@ void circuit_expire_unused_circuits(void) {
   smartlist_t *unused_open_circs;
   int i;
 
-  unused_open_circs = smartlist_create(circuitlist_len);
+  unused_open_circs = smartlist_create();
 
   for (circ = global_circuitlist; circ; circ = circ->next) {
     if (circ->marked_for_close)
index 20a9484874652fa6dbceb7ebe5b22e0702e35e1f..64f2581c22f4e107fc42925d03b02e9559a83ca4 100644 (file)
@@ -300,13 +300,13 @@ static routerinfo_t *choose_good_exit_server(routerlist_t *dir)
   log_fn(LOG_INFO, "Found %d servers that might support %d/%d pending connections.",
          n_best_support, best_support, n_pending_connections);
 
-  preferredexits = smartlist_create(16);
+  preferredexits = smartlist_create();
   add_nickname_list_to_smartlist(preferredexits,options.ExitNodes);
 
-  excludedexits = smartlist_create(16);
+  excludedexits = smartlist_create();
   add_nickname_list_to_smartlist(excludedexits,options.ExcludeNodes);
 
-  sl = smartlist_create(dir->n_routers);
+  sl = smartlist_create();
 
   /* If any routers definitely support any pending connections, choose one
    * at random. */
@@ -450,7 +450,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
   log_fn(LOG_DEBUG, "Path is %d long; we want %d", cur_len,
          state->desired_path_len);
 
-  excludednodes = smartlist_create(16);
+  excludednodes = smartlist_create();
   add_nickname_list_to_smartlist(excludednodes,options.ExcludeNodes);
 
   if(cur_len == state->desired_path_len - 1) { /* Picking last node */
@@ -465,7 +465,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
     }
   } else if(cur_len == 0) { /* picking first node */
     /* try the nodes in EntryNodes first */
-    sl = smartlist_create(16);
+    sl = smartlist_create();
     add_nickname_list_to_smartlist(sl,options.EntryNodes);
     /* XXX one day, consider picking chosen_exit knowing what's in EntryNodes */
     remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
@@ -473,7 +473,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
     choice = smartlist_choose(sl);
     smartlist_free(sl);
     if(!choice) {
-      sl = smartlist_create(32);
+      sl = smartlist_create();
       router_add_running_routers_to_smartlist(sl);
       remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
       smartlist_subtract(sl,excludednodes);
@@ -487,7 +487,7 @@ int onion_extend_cpath(crypt_path_t **head_ptr, cpath_build_state_t *state, rout
     }
   } else {
     log_fn(LOG_DEBUG, "Contemplating intermediate hop: random choice.");
-    sl = smartlist_create(32);
+    sl = smartlist_create();
     router_add_running_routers_to_smartlist(sl);
     remove_twins_from_smartlist(sl,router_get_by_nickname(state->chosen_exit));
     for (i = 0, cpath = *head_ptr; i < cur_len; ++i, cpath=cpath->next) {
index 40d90d52209910fabf1a0e9baa2507a595aba8be..8c2f7103d18749cb18c91ae5fff878e358ad26cf 100644 (file)
@@ -164,7 +164,7 @@ static routerinfo_t *router_pick_directory_server_impl(void) {
   if(!routerlist)
     return NULL;
 
-  sl = smartlist_create(8);
+  sl = smartlist_create();
   for(i=0;i<routerlist->n_routers;i++) {
     router = routerlist->routers[i];
     if(router->dir_port > 0 && router->is_running)
@@ -605,7 +605,7 @@ router_get_routerlist_from_directory_impl(const char *str,
     end = str + strlen(str);
   }
 
-  tokens = smartlist_create(16);
+  tokens = smartlist_create();
   if (tokenize_string(str,end,tokens,1)) {
     log_fn(LOG_WARN, "Error tokenizing directory"); goto err;
   }
@@ -671,7 +671,7 @@ router_get_routerlist_from_directory_impl(const char *str,
     token_free((directory_token_t*)tokens->list[i]);
   }
   smartlist_free(tokens);
-  tokens = smartlist_create(16);
+  tokens = smartlist_create();
   if (tokenize_string(str,str+strlen(str),tokens,1)<0) {
     log_fn(LOG_WARN, "Error tokenizing signature"); goto err;
   }
@@ -817,7 +817,7 @@ routerinfo_t *router_get_entry_from_string(const char *s,
     log_fn(LOG_WARN, "Couldn't compute router hash.");
     return NULL;
   }
-  tokens = smartlist_create(16);
+  tokens = smartlist_create();
   if (tokenize_string(s,end,tokens,0)) {
     log_fn(LOG_WARN, "Error tokeninzing router descriptor."); goto err;
   }
@@ -1403,7 +1403,7 @@ find_all_exitpolicy(smartlist_t *s)
 {
   int i;
   directory_token_t *tok;
-  smartlist_t *out = smartlist_create(s->num_used);
+  smartlist_t *out = smartlist_create();
   for (i = 0; i < s->num_used; ++i) {
     tok = (directory_token_t*) s->list[i];
     if (tok->tp == K_ACCEPT || tok->tp == K_REJECT) {