diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2019-06-12 17:18:39 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2019-06-12 17:18:39 -0700 |
| commit | b9440f4b8ad9b1b5684facc409e13d963cb37f11 (patch) | |
| tree | 8edad7843a3359a53789d49286339950e8f32bde | |
| parent | 2b7b4cd8d728f2eea2f9d32008a3d220baed1a27 (diff) | |
Linux doesn't have mergesort, so just use qsort by (length, alphabetic)
| -rw-r--r-- | ask.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -297,9 +297,12 @@ 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) +static int cmp_len(const void *v1, const void *v2) { - return (int)(strlen(*(char**)a) - strlen(*(char**)b)); + char *s1 = *(char**)v1, *s2 = *(char**)v2; + size_t len1 = strlen(s1), len2 = strlen(s2); + if (len1 != len2) return (int)(len1 - len2); + return strcmp(s1, s2); } int main(int argc, char *argv[]) @@ -404,8 +407,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); + // Prefer shorter matches, but otherwise use alphabetic order + qsort(opts, (size_t)nopts, sizeof(char*), cmp_len); char *output = get_input(tty_in, tty_out, prompt, query, nopts, opts); fflush(tty_out); |
