[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] Make smartlist_string_remove consistent with smartlist_string
Update of /home/or/cvsroot/tor/src/common
In directory moria.mit.edu:/tmp/cvs-serv30711/src/common
Modified Files:
container.c
Log Message:
Make smartlist_string_remove consistent with smartlist_string
Index: container.c
===================================================================
RCS file: /home/or/cvsroot/tor/src/common/container.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- container.c 3 Apr 2005 05:52:32 -0000 1.23
+++ container.c 3 Apr 2005 05:58:23 -0000 1.24
@@ -118,17 +118,18 @@
}
}
-/** If there are any string in sl equal to element, remove the first.
+/** If there are any strings in sl equal to element, remove them.
* Does not preserve order. */
void
smartlist_string_remove(smartlist_t *sl, const char *element)
{
int i;
- size_t len = smartlist_len(sl);
- for (i = 0; i < len; ++i) {
- if (!strcmp(element, smartlist_get(sl, i))) {
- smartlist_del(sl, i);
- return;
+ tor_assert(sl);
+ tor_assert(element);
+ for (i = 0; i < sl->num_used; ++i) {
+ if (!strcmp(element, sl->list[i]) {
+ sl->list[i] = sl->list[--sl->num_used]; /* swap with the end */
+ i--; /* so we process the new i'th element */
}
}
}