MINOR: stats admin: reduce memcmp()/strcmp() calls on status codes

memcmp()/strcmp() calls were needed in different parts of code to determine
the status code. Each new status code introduces new calls, which can become
inefficient and source of bugs.
This patch reorganizes the code to rely on a numeric status code internally
and to be hopefully more generic.
diff --git a/src/proto_http.c b/src/proto_http.c
index bf91328..3f6ec04 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -188,6 +188,18 @@
 
 };
 
+/* status codes available for the stats admin page (strictly 4 chars length) */
+const char *stat_status_codes[STAT_STATUS_SIZE] = {
+	[STAT_STATUS_DENY] = "DENY",
+	[STAT_STATUS_DONE] = "DONE",
+	[STAT_STATUS_ERRP] = "ERRP",
+	[STAT_STATUS_EXCD] = "EXCD",
+	[STAT_STATUS_NONE] = "NONE",
+	[STAT_STATUS_PART] = "PART",
+	[STAT_STATUS_UNKN] = "UNKN",
+};
+
+
 /* We must put the messages here since GCC cannot initialize consts depending
  * on strlen().
  */
@@ -7132,6 +7144,7 @@
 		return 0;
 
 	memset(&si->applet.ctx.stats, 0, sizeof(si->applet.ctx.stats));
+	si->applet.ctx.stats.st_code = STAT_STATUS_INIT;
 
 	/* check URI size */
 	if (uri_auth->uri_len > txn->req.sl.rq.u_l)
@@ -7175,22 +7188,15 @@
 	h = txn->req.sol + txn->req.sl.rq.u + uri_auth->uri_len;
 	while (h <= txn->req.sol + txn->req.sl.rq.u + txn->req.sl.rq.u_l - 8) {
 		if (memcmp(h, ";st=", 4) == 0) {
+			int i;
 			h += 4;
-
-			if (memcmp(h, STAT_STATUS_DONE, 4) == 0)
-				si->applet.ctx.stats.st_code = STAT_STATUS_DONE;
-			else if (memcmp(h, STAT_STATUS_NONE, 4) == 0)
-				si->applet.ctx.stats.st_code = STAT_STATUS_NONE;
-			else if (memcmp(h, STAT_STATUS_PART, 4) == 0)
-				si->applet.ctx.stats.st_code = STAT_STATUS_PART;
-			else if (memcmp(h, STAT_STATUS_ERRP, 4) == 0)
-				si->applet.ctx.stats.st_code = STAT_STATUS_ERRP;
-			else if (memcmp(h, STAT_STATUS_EXCD, 4) == 0)
-				si->applet.ctx.stats.st_code = STAT_STATUS_EXCD;
-			else if (memcmp(h, STAT_STATUS_DENY, 4) == 0)
-				si->applet.ctx.stats.st_code = STAT_STATUS_DENY;
-			else
-				si->applet.ctx.stats.st_code = STAT_STATUS_UNKN;
+			for (i = STAT_STATUS_INIT + 1; i < STAT_STATUS_SIZE; i++) {
+				if (strncmp(stat_status_codes[i], h, 4) == 0) {
+					si->applet.ctx.stats.st_code = i;
+					break;
+				}
+			}
+			si->applet.ctx.stats.st_code = STAT_STATUS_UNKN;
 			break;
 		}
 		h++;