From 783402f63a38ab02acbb9321ca54ef9bd2f43f22 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Fri, 12 Oct 2007 21:33:37 +0000 Subject: r15731@catbus: nickm | 2007-10-12 17:27:48 -0400 Move "sort a list of routerinfo_t" into its own function in routerlist.c svn:r11903 --- src/or/dirserv.c | 19 +++++-------------- src/or/routerlist.c | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 14 deletions(-) (limited to 'src/or') diff --git a/src/or/dirserv.c b/src/or/dirserv.c index d2e0d5e42..addb3f4fc 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -1695,17 +1695,6 @@ routerstatus_format_entry(char *buf, size_t buf_len, return 0; } -/** Helper for sorting: compare two routerinfos by their identity - * digest. */ -static int -_compare_routerinfo_by_id_digest(const void **a, const void **b) -{ - routerinfo_t *first = *(routerinfo_t **)a, *second = *(routerinfo_t **)b; - return memcmp(first->cache_info.identity_digest, - second->cache_info.identity_digest, - DIGEST_LEN); -} - /** Helper for sorting: compares two routerinfos first by address, and then by * descending order of "usefulness". (An authority is more useful than a * non-authority; a running router is more useful than a non-running router; @@ -1754,7 +1743,9 @@ _compare_routerinfo_by_ip_and_bw(const void **a, const void **b) /* They're equal! Compare by identity digest, so there's a * deterministic order and we avoid flapping. */ - return _compare_routerinfo_by_id_digest(a, b); + return memcmp(first->cache_info.identity_digest, + second->cache_info.identity_digest, + DIGEST_LEN); } /** Given a list of routerinfo_t in routers, return a new digestmap_t @@ -1913,7 +1904,7 @@ generate_networkstatus_vote_obj(crypto_pk_env_t *private_key, routers = smartlist_create(); smartlist_add_all(routers, rl->routers); - smartlist_sort(routers, _compare_routerinfo_by_id_digest); + routers_sort_by_identity(routers); omit_as_sybil = get_possible_sybil_list(routers); routerstatuses = smartlist_create(); @@ -2337,7 +2328,7 @@ generate_networkstatus_opinion(int v2) routers = smartlist_create(); smartlist_add_all(routers, rl->routers); - smartlist_sort(routers, _compare_routerinfo_by_id_digest); + routers_sort_by_identity(routers); omit_as_sybil = get_possible_sybil_list(routers); diff --git a/src/or/routerlist.c b/src/or/routerlist.c index c974adb0f..d4e692cad 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -4403,3 +4403,21 @@ esc_router_info(routerinfo_t *router) return info; } +/** Helper for sorting: compare two routerinfos by their identity + * digest. */ +static int +_compare_routerinfo_by_id_digest(const void **a, const void **b) +{ + routerinfo_t *first = *(routerinfo_t **)a, *second = *(routerinfo_t **)b; + return memcmp(first->cache_info.identity_digest, + second->cache_info.identity_digest, + DIGEST_LEN); +} + +/** Sort a list of routerinfo_t in ascending order of identity digest. */ +void +routers_sort_by_identity(smartlist_t *routers) +{ + smartlist_sort(routers, _compare_routerinfo_by_id_digest); +} + -- cgit v1.2.3