aboutsummaryrefslogtreecommitdiff
path: root/src/or/routerlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/or/routerlist.c')
-rw-r--r--src/or/routerlist.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index ed932dc41..4b10b3c90 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -155,25 +155,22 @@ int all_directory_servers_down(void) {
void
add_nickname_list_to_smartlist(smartlist_t *sl, const char *list, int warn_if_down)
{
- const char *start,*end;
- char nick[MAX_HEX_NICKNAME_LEN+1];
routerinfo_t *router;
+ smartlist_t *nickname_list;
tor_assert(sl);
tor_assert(list);
- while(isspace((int)*list) || *list==',') list++;
+ nickname_list = smartlist_create();
- start = list;
- while(*start) {
- end=start; while(*end && !isspace((int)*end) && *end != ',') end++;
- if (end-start > MAX_HEX_NICKNAME_LEN) {
+ smartlist_split_string(nickname_list, list, ",",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+
+ SMARTLIST_FOREACH(nickname_list, const char *, nick, {
+ if (strlen(nick) > MAX_HEX_NICKNAME_LEN) {
log_fn(LOG_WARN,"Nickname too long; skipping");
- start = end;
continue;
}
- memcpy(nick,start,end-start);
- nick[end-start] = 0; /* null terminate it */
router = router_get_by_nickname(nick);
if (router) {
if (router->is_running)
@@ -184,9 +181,9 @@ add_nickname_list_to_smartlist(smartlist_t *sl, const char *list, int warn_if_do
} else
log_fn(has_fetched_directory ? LOG_WARN : LOG_INFO,
"Nickname list includes '%s' which isn't a known router.",nick);
- while(isspace((int)*end) || *end==',') end++;
- start = end;
- }
+ });
+ SMARTLIST_FOREACH(nickname_list, char *, nick, tor_free(nick));
+ smartlist_free(nickname_list);
}
/** Add every router from our routerlist that is currently running to