diff options
author | Igor Sysoev <igor@sysoev.ru> | 2009-04-04 21:31:54 +0400 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2009-04-04 21:31:54 +0400 |
commit | a514d68bfb7c0417013cb76e7626fa8c90b5c840 (patch) | |
tree | 592b727398a710e4bd8cd16af845adcce4d0de1a /src/core/ngx_string.c | |
parent | 054c505050d45983c6c8ab6ebf2b2ccc246e00e0 (diff) |
ngx_strlcasestrn()
Diffstat (limited to 'src/core/ngx_string.c')
-rw-r--r-- | src/core/ngx_string.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c index 0ad594f82..fbde1c2ce 100644 --- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -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) { |