mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
r15967@catbus: nickm | 2007-10-19 14:14:47 -0400
Change meaning of "freefn" argument to smartlist_uniq so that we can remove duplicates from a list without freeing them. svn:r12053
This commit is contained in:
@@ -471,8 +471,7 @@ smartlist_sort(smartlist_t *sl, int (*compare)(const void **a, const void **b))
|
||||
|
||||
/** Given a sorted smartlist <b>sl</b> and the comparison function used to
|
||||
* sort it, remove all duplicate members. If free_fn is provided, calls
|
||||
* free_fn on each duplicate. Otherwise, frees them with tor_free(), which
|
||||
* may not be what you want.. Preserves order.
|
||||
* free_fn on each duplicate. Otherwise, just removes them. Preserves order.
|
||||
*/
|
||||
void
|
||||
smartlist_uniq(smartlist_t *sl,
|
||||
@@ -485,8 +484,6 @@ smartlist_uniq(smartlist_t *sl,
|
||||
(const void **)&(sl->list[i])) == 0) {
|
||||
if (free_fn)
|
||||
free_fn(sl->list[i]);
|
||||
else
|
||||
tor_free(sl->list[i]);
|
||||
smartlist_del_keeporder(sl, i--);
|
||||
}
|
||||
}
|
||||
@@ -530,7 +527,7 @@ smartlist_sort_strings(smartlist_t *sl)
|
||||
void
|
||||
smartlist_uniq_strings(smartlist_t *sl)
|
||||
{
|
||||
smartlist_uniq(sl, _compare_string_ptrs, NULL);
|
||||
smartlist_uniq(sl, _compare_string_ptrs, _tor_free);
|
||||
}
|
||||
|
||||
/* Heap-based priority queue implementation for O(lg N) insert and remove.
|
||||
@@ -653,7 +650,7 @@ smartlist_sort_digests(smartlist_t *sl)
|
||||
void
|
||||
smartlist_uniq_digests(smartlist_t *sl)
|
||||
{
|
||||
smartlist_uniq(sl, _compare_digests, NULL);
|
||||
smartlist_uniq(sl, _compare_digests, _tor_free);
|
||||
}
|
||||
|
||||
#define DEFINE_MAP_STRUCTS(maptype, keydecl, prefix) \
|
||||
|
||||
@@ -3119,6 +3119,6 @@ sort_version_list(smartlist_t *versions, int remove_duplicates)
|
||||
smartlist_sort(versions, _compare_tor_version_str_ptr);
|
||||
|
||||
if (remove_duplicates)
|
||||
smartlist_uniq(versions, _compare_tor_version_str_ptr, NULL);
|
||||
smartlist_uniq(versions, _compare_tor_version_str_ptr, _tor_free);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1469,7 +1469,7 @@ test_util_smartlist(void)
|
||||
"50,noon,radar,a,man,a,plan,a,canal,panama,radar,noon,50",
|
||||
",", 0, 0);
|
||||
smartlist_sort(sl, _compare_strs);
|
||||
smartlist_uniq(sl, _compare_strs, NULL);
|
||||
smartlist_uniq(sl, _compare_strs, _tor_free);
|
||||
cp = smartlist_join_strings(sl, ",", 0, NULL);
|
||||
test_streq(cp, "50,a,canal,man,noon,panama,plan,radar");
|
||||
tor_free(cp);
|
||||
|
||||
Reference in New Issue
Block a user