]> git.kaiwu.me - nginx.git/commitdiff
ngx_strlcasestrn()
authorIgor Sysoev <igor@sysoev.ru>
Sat, 4 Apr 2009 17:31:54 +0000 (17:31 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Sat, 4 Apr 2009 17:31:54 +0000 (17:31 +0000)
src/core/ngx_string.c
src/core/ngx_string.h

index 0ad594f82a427ce29e432943c2bafd06b85418e3..fbde1c2cef73924f21bfae6022f98d7b75d9c7c2 100644 (file)
@@ -692,6 +692,39 @@ ngx_strcasestrn(u_char *s1, char *s2, size_t n)
 }
 
 
+/*
+ * ngx_strlcasestrn() is intended to search for static substring
+ * with known length in string until the argument last. The argument n
+ * must be length of the second substring - 1.
+ */
+
+u_char *
+ngx_strlcasestrn(u_char *s1, u_char *last, u_char *s2, size_t n)
+{
+    ngx_uint_t  c1, c2;
+
+    c2 = (ngx_uint_t) *s2++;
+    c2  = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
+    last -= n;
+
+    do {
+        do {
+            if (s1 == last) {
+                return NULL;
+            }
+
+            c1 = (ngx_uint_t) *s1++;
+
+            c1  = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
+
+        } while (c1 != c2);
+
+    } while (ngx_strncasecmp(s1, s2, n) != 0);
+
+    return --s1;
+}
+
+
 ngx_int_t
 ngx_rstrncmp(u_char *s1, u_char *s2, size_t n)
 {
index af28186399bf8e1686a57f12df1e9f4c52017cf1..0560bd8be713eec05f2c02f3ea0119e08e5ed089 100644 (file)
@@ -149,6 +149,7 @@ u_char *ngx_strnstr(u_char *s1, char *s2, size_t n);
 
 u_char *ngx_strstrn(u_char *s1, char *s2, size_t n);
 u_char *ngx_strcasestrn(u_char *s1, char *s2, size_t n);
+u_char *ngx_strlcasestrn(u_char *s1, u_char *last, u_char *s2, size_t n);
 
 ngx_int_t ngx_rstrncmp(u_char *s1, u_char *s2, size_t n);
 ngx_int_t ngx_rstrncasecmp(u_char *s1, u_char *s2, size_t n);