diff options
author | Adam Chlipala <adamc@hcoop.net> | 2008-11-08 12:12:50 -0500 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2008-11-08 12:12:50 -0500 |
commit | 7d6eed032a2b129056ff264a91076cec68035a34 (patch) | |
tree | 3e0286912dbc8c2cd57c2f90fa095b82429434bc /src/c | |
parent | dbf4d428936189bba18ffb1d622029c79da39414 (diff) |
Handle EError returning a function; handle multiple cookies in one input header
Diffstat (limited to 'src/c')
-rw-r--r-- | src/c/urweb.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c index e8c75275..57584f53 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -1193,9 +1193,21 @@ uw_Basis_string uw_Basis_get_cookie(uw_context ctx, uw_Basis_string c) { } while (p = strchr(s, ':')) { - if (!strncasecmp(s, "Cookie: ", 8) && !strncmp(p + 2, c, len) - && p + 2 + len < ctx->headers_end && p[2 + len] == '=') { - return p + 3 + len; + if (!strncasecmp(s, "Cookie: ", 8)) { + p += 2; + while (1) { + if (!strncmp(p, c, len) + && p + len < ctx->headers_end && p[len] == '=') + return p + 1 + len; + else if (p = strchr(p, ';')) + p += 2; + else if ((s = strchr(s, 0)) && s < ctx->headers_end) { + s += 2; + break; + } + else + return NULL; + } } else { if ((s = strchr(p, 0)) && s < ctx->headers_end) s += 2; |