[PATCH 1/3] uclient-fetch: Make request_types sorted to optimize search

Sergey Ponomarev stokito at gmail.com
Thu Apr 6 14:39:07 PDT 2023


Signed-off-by: Sergey Ponomarev <stokito at gmail.com>
---
 uclient-http.c | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/uclient-http.c b/uclient-http.c
index c2bba6b..80d4495 100644
--- a/uclient-http.c
+++ b/uclient-http.c
@@ -40,11 +40,11 @@ enum auth_type {
 };
 
 enum request_type {
+	REQ_DELETE,
 	REQ_GET,
 	REQ_HEAD,
 	REQ_POST,
 	REQ_PUT,
-	REQ_DELETE,
 	__REQ_MAX
 };
 
@@ -57,12 +57,13 @@ enum http_state {
 	HTTP_STATE_ERROR,
 };
 
+// Must be sorted aplhabeticaly
 static const char * const request_types[__REQ_MAX] = {
+	[REQ_DELETE] = "DELETE",
 	[REQ_GET] = "GET",
 	[REQ_HEAD] = "HEAD",
 	[REQ_POST] = "POST",
 	[REQ_PUT] = "PUT",
-	[REQ_DELETE] = "DELETE",
 };
 
 struct uclient_http {
@@ -991,11 +992,15 @@ uclient_http_set_request_type(struct uclient *cl, const char *type)
 		return -1;
 
 	for (i = 0; i < ARRAY_SIZE(request_types); i++) {
-		if (strcmp(request_types[i], type) != 0)
+		int c = strcmp(request_types[i], type);
+		if (c < 0) {
 			continue;
-
-		uh->req_type = i;
-		return 0;
+		} else if (c == 0) {
+			uh->req_type = i;
+			return 0;
+		} else {
+			return -1;
+		}
 	}
 
 	return -1;
-- 
2.37.2




More information about the openwrt-devel mailing list