]> git.kaiwu.me - nginx.git/commitdiff
ngx_strstrn() and ngx_strcasestrn()
authorIgor Sysoev <igor@sysoev.ru>
Wed, 26 Sep 2007 19:25:52 +0000 (19:25 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Wed, 26 Sep 2007 19:25:52 +0000 (19:25 +0000)
src/core/ngx_string.c
src/core/ngx_string.h

index bdce0c1695abe7d0c69c47b34e1be480c67fec87..68b2d61f05cd63267ad2bbba4eb690ebf1ad64df 100644 (file)
@@ -503,6 +503,55 @@ ngx_strncasecmp(u_char *s1, u_char *s2, size_t n)
 }
 
 
+u_char *
+ngx_strstrn(u_char *s1, char *s2, size_t n)
+{
+    u_char  c1, c2;
+
+    c2 = *(u_char *) s2++;
+
+    do {
+        do {
+            c1 = *s1++;
+
+            if (c1 == 0) {
+                return NULL;
+            }
+
+        } while (c1 != c2);
+
+    } while (ngx_strncmp(s1, (u_char *) s2, n) != 0);
+
+    return --s1;
+}
+
+
+u_char *
+ngx_strcasestrn(u_char *s1, char *s2, size_t n)
+{
+    ngx_uint_t  c1, c2;
+
+    c2 = (ngx_uint_t) *s2++;
+    c2  = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
+
+    do {
+        do {
+            c1 = (ngx_uint_t) *s1++;
+
+            if (c1 == 0) {
+                return NULL;
+            }
+
+            c1  = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
+
+        } while (c1 != c2);
+
+    } while (ngx_strncasecmp(s1, (u_char *) s2, n) != 0);
+
+    return --s1;
+}
+
+
 ngx_int_t
 ngx_rstrncmp(u_char *s1, u_char *s2, size_t n)
 {
index 42d50a46c4e60b15f7078552274ee68256b3420b..a1da15f6bfa2b09012480ba0045dd02862bec7df 100644 (file)
@@ -126,6 +126,9 @@ u_char *ngx_vsnprintf(u_char *buf, size_t max, const char *fmt, va_list args);
 ngx_int_t ngx_strcasecmp(u_char *s1, u_char *s2);
 ngx_int_t ngx_strncasecmp(u_char *s1, u_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);
+
 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);
 ngx_int_t ngx_memn2cmp(u_char *s1, u_char *s2, size_t n1, size_t n2);