On Thu, Mar 3, 2016 at 6:10 PM, <yla...@apache.org> wrote:

> Author: ylavic
> Date: Fri Mar  4 00:10:10 2016
> New Revision: 1733537
>
> URL: http://svn.apache.org/viewvc?rev=1733537&view=rev
> Log:
> ab: Use caseless matching for HTTP tokens (e.g. content-length).
> PR 59111.
>
> Modified:
>     httpd/httpd/trunk/support/ab.c
>
> Modified: httpd/httpd/trunk/support/ab.c
> URL:
> http://svn.apache.org/viewvc/httpd/httpd/trunk/support/ab.c?rev=1733537&r1=1733536&r2=1733537&view=diff
>
> ==============================================================================
> --- httpd/httpd/trunk/support/ab.c (original)
> +++ httpd/httpd/trunk/support/ab.c Fri Mar  4 00:10:10 2016
> @@ -426,6 +426,41 @@ static char *xstrdup(const char *s)
>      return ret;
>  }
>
> +/*
> + * Similar to standard strstr() but we ignore case in this version.
> + * Copied from ap_strcasestr().
> + */
> +static char *xstrcasestr(const char *s1, const char *s2)
> +{
> +    char *p1, *p2;
> +    if (*s2 == '\0') {
> +        /* an empty s2 */
> +        return((char *)s1);
> +    }
> +    while(1) {
> +        for ( ; (*s1 != '\0') && (apr_tolower(*s1) != apr_tolower(*s2));
> s1++);
> +        if (*s1 == '\0') {
> +            return(NULL);
> +        }
> +        /* found first character of s2, see if the rest matches */
> +        p1 = (char *)s1;
> +        p2 = (char *)s2;
> +        for (++p1, ++p2; apr_tolower(*p1) == apr_tolower(*p2); ++p1,
> ++p2) {
> +            if (*p1 == '\0') {
> +                /* both strings ended together */
> +                return((char *)s1);
> +            }
> +        }
> +        if (*p2 == '\0') {
> +            /* second string ended, a match */
> +            break;
> +        }
> +        /* didn't find a match here, try starting at next character in s1
> */
> +        s1++;
> +    }
> +    return((char *)s1);
> +}
> +
>  /* pool abort function */
>  static int abort_on_oom(int retcode)
>  {
>

Two thoughts.  It seems this is a good candidate for APR 1.6
apr_cstr_casestr?

Second thought - it seems like the implement locally -> push to apr model
is good for as far as it gets us, but we don't want our httpd users to be in
a rat race to chase new apr[-util] behavior unless they are chasing a new
httpd optional module or feature.

What if we were to refactor some of server/util*.c into a localized
ap-httpd.so
library that could be consumed by httpd core, as well as our support
utilities
and third parties who want our very http-specific functions that are simply
not
good fits for apr?

Reply via email to