MINOR: ist: Add a case insensitive istmatch function
authorRemi Tricot-Le Breton <rlebreton@haproxy.com>
Wed, 28 Oct 2020 10:35:14 +0000 (11:35 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Tue, 3 Nov 2020 15:18:05 +0000 (16:18 +0100)
Add a helper function that checks if a string starts with another string
while ignoring case.

(cherry picked from commit bb4582cf719bcf9facf4e9b459fd3a68a97fffbd)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit fce0402a3bebcfae35ce2f7bff00b2e24174d89e)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>

include/common/ist.h

index 0d8b457..3afe74e 100644 (file)
@@ -297,6 +297,26 @@ static inline int istmatch(const struct ist ist1, const struct ist ist2)
        return 1;
 }
 
+/* returns non-zero if <ist1> starts like <ist2>, ignoring the case (empty strings do match) */
+static inline int istmatchi(const struct ist ist1, const struct ist ist2)
+{
+       struct ist l = ist1;
+       struct ist r = ist2;
+
+       if (l.len < r.len)
+               return 0;
+
+       while (r.len--) {
+               if (*l.ptr != *r.ptr &&
+                   ist_lc[(unsigned char)*l.ptr] != ist_lc[(unsigned char)*r.ptr])
+                       return 0;
+
+               l.ptr++;
+               r.ptr++;
+       }
+       return 1;
+}
+
 /* returns non-zero if <ist1> starts like <ist2> on the first <count>
  * characters (empty strings do match).
  */