Mercurial > hg > nginx
changeset 2668:2f9c37445ffb
ngx_strlcasestrn()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sat, 04 Apr 2009 17:31:54 +0000 |
parents | c1ac00c2bc75 |
children | 5e4d8bd4486c |
files | src/core/ngx_string.c src/core/ngx_string.h |
diffstat | 2 files changed, 34 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/ngx_string.c Sat Apr 04 17:22:26 2009 +0000 +++ b/src/core/ngx_string.c Sat Apr 04 17:31:54 2009 +0000 @@ -692,6 +692,39 @@ } +/* + * 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) {
--- a/src/core/ngx_string.h Sat Apr 04 17:22:26 2009 +0000 +++ b/src/core/ngx_string.h Sat Apr 04 17:31:54 2009 +0000 @@ -149,6 +149,7 @@ 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);