]> granicus.if.org Git - strace/commitdiff
count: rewrite sort function selection using a table
authorEugene Syromyatnikov <evgsyr@gmail.com>
Tue, 4 Sep 2018 11:22:11 +0000 (13:22 +0200)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 6 Aug 2019 13:38:20 +0000 (13:38 +0000)
* count.c (set_sortby): Replace nested if's with iteration over a table.

Co-Authored-by: Dmitry V. Levin <ldv@altlinux.org>
count.c

diff --git a/count.c b/count.c
index 3adde7a3623eb0fb511000ff693aaf26319cc82e..329909ec3583c234213d6581007c7cc078d5eff2 100644 (file)
--- a/count.c
+++ b/count.c
@@ -91,17 +91,24 @@ static int (*sortfun)(const void *, const void *);
 void
 set_sortby(const char *sortby)
 {
-       if (strcmp(sortby, "time") == 0)
-               sortfun = time_cmp;
-       else if (strcmp(sortby, "calls") == 0)
-               sortfun = count_cmp;
-       else if (strcmp(sortby, "name") == 0)
-               sortfun = syscall_cmp;
-       else if (strcmp(sortby, "nothing") == 0)
-               sortfun = NULL;
-       else {
-               error_msg_and_help("invalid sortby: '%s'", sortby);
+       static const struct {
+               int (*fn)(const void *, const void *);
+               const char *name;
+       } sort_fns[] = {
+               { time_cmp,     "time" },
+               { count_cmp,    "calls" },
+               { syscall_cmp,  "name" },
+               { NULL,         "nothing" },
+       };
+
+       for (size_t i = 0; i < ARRAY_SIZE(sort_fns); ++i) {
+               if (!strcmp(sort_fns[i].name, sortby)) {
+                       sortfun = sort_fns[i].fn;
+                       return;
+               }
        }
+
+       error_msg_and_help("invalid sortby: '%s'", sortby);
 }
 
 int