From: Eugene Syromyatnikov Date: Tue, 4 Sep 2018 11:22:11 +0000 (+0200) Subject: count: rewrite sort function selection using a table X-Git-Tag: v5.3~68 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=930cec83b62972f0b94e19fcd10e2f553861cf8a;p=strace count: rewrite sort function selection using a table * count.c (set_sortby): Replace nested if's with iteration over a table. Co-Authored-by: Dmitry V. Levin --- diff --git a/count.c b/count.c index 3adde7a3..329909ec 100644 --- 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