CLI: Refactor ast_cli_display_match_list.
authorCorey Farrell <git@cfware.com>
Tue, 7 Nov 2017 20:47:51 +0000 (15:47 -0500)
committerCorey Farrell <git@cfware.com>
Tue, 21 Nov 2017 14:48:36 +0000 (09:48 -0500)
* Stop estimating line count, just print until we run out of matches.
* Stop freeing entries, the caller does that anyways.
* Stop calculating / returning numoutput, it was ignored.

Change-Id: I7f92afa8bea92241a95227587367424c8c32a5cb

main/asterisk.c

index 77046f2..2908b46 100644 (file)
@@ -3071,51 +3071,37 @@ static int ast_el_sort_compare(const void *i1, const void *i2)
        return strcasecmp(s1, s2);
 }
 
-static int ast_cli_display_match_list(char **matches, int len, int max)
+static void ast_cli_display_match_list(char **matches, int len, int max)
 {
-       int i, idx, limit, count;
-       int screenwidth = 0;
-       int numoutput = 0, numoutputline = 0;
-
-       screenwidth = ast_get_termcols(STDOUT_FILENO);
-
+       int idx = 1;
        /* find out how many entries can be put on one line, with two spaces between strings */
-       limit = screenwidth / (max + 2);
-       if (limit == 0)
-               limit = 1;
+       int limit = ast_get_termcols(STDOUT_FILENO) / (max + 2);
 
-       /* how many lines of output */
-       count = len / limit;
-       if (count * limit < len)
-               count++;
-
-       idx = 1;
+       if (limit == 0) {
+               limit = 1;
+       }
 
        qsort(&matches[0], (size_t)(len), sizeof(char *), ast_el_sort_compare);
 
-       for (; count > 0; count--) {
-               numoutputline = 0;
-               for (i = 0; i < limit && matches[idx]; i++, idx++) {
+       for (;;) {
+               int numoutputline;
 
+               for (numoutputline = 0; numoutputline < limit && matches[idx]; idx++) {
                        /* Don't print dupes */
                        if ( (matches[idx+1] != NULL && strcmp(matches[idx], matches[idx+1]) == 0 ) ) {
-                               i--;
-                               ast_free(matches[idx]);
-                               matches[idx] = NULL;
                                continue;
                        }
 
-                       numoutput++;
                        numoutputline++;
                        fprintf(stdout, "%-*s  ", max, matches[idx]);
-                       ast_free(matches[idx]);
-                       matches[idx] = NULL;
                }
-               if (numoutputline > 0)
-                       fprintf(stdout, "\n");
-       }
 
-       return numoutput;
+               if (!numoutputline) {
+                       break;
+               }
+
+               fprintf(stdout, "\n");
+       }
 }