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