]> git.kaiwu.me - nginx.git/commitdiff
ngx_strnstr()
authorIgor Sysoev <igor@sysoev.ru>
Mon, 1 Oct 2007 14:48:33 +0000 (14:48 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Mon, 1 Oct 2007 14:48:33 +0000 (14:48 +0000)
src/core/ngx_string.c
src/core/ngx_string.h

index 45079b70691966806bf0884b33848847fc39beac..0385c964378c77c831f2342224881b8c6268840c 100644 (file)
@@ -503,6 +503,40 @@ ngx_strncasecmp(u_char *s1, u_char *s2, size_t n)
 }
 
 
+u_char *
+ngx_strnstr(u_char *s1, char *s2, size_t len)
+{
+    u_char  c1, c2;
+    size_t  n;
+
+    c2 = *(u_char *) s2++;
+
+    n = ngx_strlen(s2);
+
+    do {
+        do {
+            if (len-- == 0) {
+                return NULL;
+            }
+
+            c1 = *s1++;
+
+            if (c1 == 0) {
+                return NULL;
+            }
+
+        } while (c1 != c2);
+
+        if (n > len) {
+            return NULL;
+        }
+
+    } while (ngx_strncmp(s1, (u_char *) s2, n) != 0);
+
+    return --s1;
+}
+
+
 /*
  * ngx_strstrn() and ngx_strcasestrn() are intended to search for static
  * substring with known length in null-terminated string. The argument n
index e17fc13fb38aa719e3b5aef6055b73ceef2aba50..319938471762b8d8c49e11b8e2b3dc0016a7c4e7 100644 (file)
@@ -126,6 +126,8 @@ 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_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);