aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ask.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/ask.c b/ask.c
index 1c4fb4f..0adfd64 100644
--- a/ask.c
+++ b/ask.c
@@ -297,6 +297,11 @@ static char *get_input(FILE *in, FILE *out, const char *prompt, const char *init
return picked;
}
+static int cmp_len(const void *a, const void *b)
+{
+ return (int)(strlen(*(char**)a) - strlen(*(char**)b));
+}
+
int main(int argc, char *argv[])
{
int yes = 0, no = 0;
@@ -399,6 +404,8 @@ int main(int argc, char *argv[])
if (tcsetattr(fileno(tty_out), TCSAFLUSH, &bb_termios) == -1)
return 1;
+ // Prefer shorter matches, but otherwise keep original order (mergesort is stable)
+ mergesort(opts, (size_t)nopts, sizeof(char*), cmp_len);
char *output = get_input(tty_in, tty_out, prompt, query, nopts, opts);
fflush(tty_out);