diff options
-rw-r--r-- | cmd.c | 21 |
1 files changed, 13 insertions, 8 deletions
@@ -488,19 +488,25 @@ cmd_lookup_session(const char *name, int *ambiguous) *ambiguous = 0; /* - * Look for matches. Session names must be unique so an exact match - * can't be ambigious and can just be returned. + * Look for matches. First look for exact matches - session names must + * be unique so an exact match can't be ambigious and can just be + * returned. */ - sfound = NULL; for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { if ((s = ARRAY_ITEM(&sessions, i)) == NULL) continue; - - /* Check for an exact match and return it if found. */ if (strcmp(name, s->name) == 0) return (s); - - /* Then check for pattern matches. */ + } + + /* + * Otherwise look for partial matches, returning early if it is found to + * be ambiguous. + */ + sfound = NULL; + for (i = 0; i < ARRAY_LENGTH(&sessions); i++) { + if ((s = ARRAY_ITEM(&sessions, i)) == NULL) + continue; if (strncmp(name, s->name, strlen(name)) == 0 || fnmatch(name, s->name, 0) == 0) { if (sfound != NULL) { @@ -510,7 +516,6 @@ cmd_lookup_session(const char *name, int *ambiguous) sfound = s; } } - return (sfound); } |