mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-19 11:09:42 +00:00
mg_get_cookie() moved to string.c
This commit is contained in:
1 parent
ebdf973af9
commit
7fe6b29218
3 files changed
+78
-79
No files matched your search
@@ -335,3 +335,42 @@ static int get_request_len(const char *buf, int buf_len) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mg_get_cookie(const char *cookie_header, const char *var_name,
|
||||
char *dst, size_t dst_size) {
|
||||
const char *s, *p, *end;
|
||||
int name_len, len = -1;
|
||||
|
||||
if (dst == NULL || dst_size == 0) {
|
||||
len = -2;
|
||||
} else if (var_name == NULL || (s = cookie_header) == NULL) {
|
||||
len = -1;
|
||||
dst[0] = '\0';
|
||||
} else {
|
||||
name_len = (int) strlen(var_name);
|
||||
end = s + strlen(s);
|
||||
dst[0] = '\0';
|
||||
|
||||
for (; (s = mg_strcasestr(s, var_name)) != NULL; s += name_len) {
|
||||
if (s[name_len] == '=') {
|
||||
s += name_len + 1;
|
||||
if ((p = strchr(s, ' ')) == NULL)
|
||||
p = end;
|
||||
if (p[-1] == ';')
|
||||
p--;
|
||||
if (*s == '"' && p[-1] == '"' && p > s + 1) {
|
||||
s++;
|
||||
p--;
|
||||
}
|
||||
if ((size_t) (p - s) < dst_size) {
|
||||
len = p - s;
|
||||
mg_strlcpy(dst, s, (size_t) len + 1);
|
||||
} else {
|
||||
len = -3;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return len;
|
||||
}
|
||||
Reference in new issue
Block a user