gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [libmicrohttpd] 01/02: More speedups by using predefined le


From: gnunet
Subject: [GNUnet-SVN] [libmicrohttpd] 01/02: More speedups by using predefined length of strings
Date: Wed, 15 May 2019 23:24:21 +0200

This is an automated email from the git hooks/post-receive script.

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 11350cbeafffca63ec71a93ebfa3e8a67451218d
Author: Evgeny Grin (Karlson2k) <address@hidden>
AuthorDate: Wed May 15 23:51:49 2019 +0300

    More speedups by using predefined length of strings
---
 src/microhttpd/connection.c | 32 +++++++++++++++++++++-----------
 src/microhttpd/response.c   | 16 ++++++++++++----
 2 files changed, 33 insertions(+), 15 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index d3f47d4d..b73e6d5a 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -1010,6 +1010,8 @@ MHD_lookup_connection_value_n (struct MHD_Connection 
*connection,
  * Case-insensitive match used for header names and tokens.
  * @param connection the connection to get values from
  * @param header     the header name
+ * @param header_len the length of header, not including optional
+ *                   terminating null-character
  * @param token      the token to find
  * @param token_len  the length of token, not including optional
  *                   terminating null-character.
@@ -1019,6 +1021,7 @@ MHD_lookup_connection_value_n (struct MHD_Connection 
*connection,
 static bool
 MHD_lookup_header_token_ci (const struct MHD_Connection *connection,
                          const char *header,
+                         size_t header_len,
                          const char *token,
                          size_t token_len)
 {
@@ -1026,12 +1029,15 @@ MHD_lookup_header_token_ci (const struct MHD_Connection 
*connection,
 
   if (NULL == connection || NULL == header || 0 == header[0] || NULL == token 
|| 0 == token[0])
     return false;
+
   for (pos = connection->headers_received; NULL != pos; pos = pos->next)
     {
       if ((0 != (pos->kind & MHD_HEADER_KIND)) &&
+          (header_len == pos->header_size) &&
           ( (header == pos->header) ||
-            (MHD_str_equal_caseless_(header,
-                                      pos->header)) ) &&
+            (MHD_str_equal_caseless_bin_n_(header,
+                                           pos->header,
+                                           header_len)) ) &&
           (MHD_str_has_token_caseless_ (pos->value, token, token_len)))
         return true;
     }
@@ -1045,13 +1051,14 @@ MHD_lookup_header_token_ci (const struct MHD_Connection 
*connection,
  * Token could be surrounded by spaces and tabs and delimited by comma.
  * Case-insensitive match used for header names and tokens.
  * @param c   the connection to get values from
- * @param h   the header name
+ * @param h   the static string of header name
  * @param tkn the static string of token to find
  * @return true if token is found in specified header,
  *         false otherwise
  */
 #define MHD_lookup_header_s_token_ci(c,h,tkn) \
-    MHD_lookup_header_token_ci((c),(h),(tkn),MHD_STATICSTR_LEN_(tkn))
+    MHD_lookup_header_token_ci((c),(h),MHD_STATICSTR_LEN_(h),\
+                               (tkn),MHD_STATICSTR_LEN_(tkn))
 
 
 /**
@@ -1649,7 +1656,7 @@ build_header_response (struct MHD_Connection *connection)
   if (MHD_CONNECTION_FOOTERS_RECEIVED == connection->state)
     {
       reason_phrase = MHD_get_reason_phrase_for (rc);
-      MHD_snprintf_ (code,
+      off = MHD_snprintf_ (code,
                     sizeof (code),
                     "%s %u %s\r\n",
                     (0 != (connection->responseCode & MHD_ICY_FLAG))
@@ -1661,7 +1668,6 @@ build_header_response (struct MHD_Connection *connection)
                         : MHD_HTTP_VERSION_1_1),
                     rc,
                     reason_phrase);
-      off = strlen (code);
       /* estimate size */
       size = off + 2;           /* +2 for extra "\r\n" at the end */
       kind = MHD_HEADER_KIND;
@@ -1864,11 +1870,13 @@ build_header_response (struct MHD_Connection 
*connection)
       if ( (pos->kind == kind) &&
            (! ( (MHD_YES == must_add_close) &&
                 (response_has_keepalive) &&
-                (MHD_str_equal_caseless_(pos->header,
-                                         MHD_HTTP_HEADER_CONNECTION)) &&
+                (pos->header_size == 
MHD_STATICSTR_LEN_(MHD_HTTP_HEADER_CONNECTION)) &&
+                (MHD_str_equal_caseless_bin_n_(pos->header,
+                                               MHD_HTTP_HEADER_CONNECTION,
+                                               
MHD_STATICSTR_LEN_(MHD_HTTP_HEADER_CONNECTION))) &&
                 (MHD_str_equal_caseless_(pos->value,
                                          "Keep-Alive")) ) ) )
-        size += strlen (pos->header) + strlen (pos->value) + 4; /* colon, 
space, linefeeds */
+        size += pos->header_size + pos->value_size + 4; /* colon, space, 
linefeeds */
     }
   /* produce data */
   data = MHD_pool_allocate (connection->pool,
@@ -1926,8 +1934,10 @@ build_header_response (struct MHD_Connection *connection)
       if ( (pos->kind == kind) &&
            (! ( (MHD_YES == must_add_close) &&
                 (response_has_keepalive) &&
-                (MHD_str_equal_caseless_(pos->header,
-                                         MHD_HTTP_HEADER_CONNECTION)) &&
+                (pos->header_size == 
MHD_STATICSTR_LEN_(MHD_HTTP_HEADER_CONNECTION)) &&
+                (MHD_str_equal_caseless_bin_n_(pos->header,
+                                               MHD_HTTP_HEADER_CONNECTION,
+                                               
MHD_STATICSTR_LEN_(MHD_HTTP_HEADER_CONNECTION))) &&
                 (MHD_str_equal_caseless_(pos->value,
                                          "Keep-Alive")) ) ) )
         off += MHD_snprintf_ (&data[off],
diff --git a/src/microhttpd/response.c b/src/microhttpd/response.c
index 7d7e899b..f43ca541 100644
--- a/src/microhttpd/response.c
+++ b/src/microhttpd/response.c
@@ -199,18 +199,26 @@ MHD_del_response_header (struct MHD_Response *response,
 {
   struct MHD_HTTP_Header *pos;
   struct MHD_HTTP_Header *prev;
+  size_t header_len;
+  size_t content_len;
 
   if ( (NULL == header) ||
   (NULL == content) )
     return MHD_NO;
+  header_len = strlen (header);
+  content_len = strlen (content);
   prev = NULL;
   pos = response->first_header;
   while (NULL != pos)
     {
-      if ((0 == strcmp (header,
-                        pos->header)) &&
-          (0 == strcmp (content,
-                        pos->value)))
+      if ((header_len == pos->header_size) &&
+          (content_len == pos->value_size) &&
+          (0 == memcmp (header,
+                        pos->header,
+                        header_len)) &&
+          (0 == memcmp (content,
+                        pos->value,
+                        content_len)))
         {
           free (pos->header);
           free (pos->value);

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]