From 930cec83b62972f0b94e19fcd10e2f553861cf8a Mon Sep 17 00:00:00 2001 From: Eugene Syromyatnikov <evgsyr@gmail.com> Date: Tue, 4 Sep 2018 13:22:11 +0200 Subject: [PATCH] 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 <ldv@altlinux.org> --- count.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) 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 -- 2.40.0