-#define HTTP_COOKIE_FIXVAL() \
- { \
- ++val; \
- while (isspace(*val)) ++val; \
- vallen = key - val; \
- while (isspace(val[vallen - 1])) --vallen; \
- }
-
- HTTP_COOKIE_FIXKEY();
- HTTP_COOKIE_VAL(&array, "name", key, keylen);
-
- /* just a name=value cookie */
- if (!(key = strchr(val, ';'))) {
- key = val + strlen(val);
- HTTP_COOKIE_FIXVAL();
- HTTP_COOKIE_VAL(&array, "value", val, vallen);
- }
- /* additional info appended */
- else {
- char *keydup = NULL;
-
- HTTP_COOKIE_FIXVAL();
- HTTP_COOKIE_VAL(&array, "value", val, vallen);
-
- do {
- if (!(val = strchr(key, '='))) {
- break;
- }
- ++key;
- HTTP_COOKIE_FIXKEY();
- keydup = estrndup(key, keylen);
- if (!(key = strchr(val, ';'))) {
- done = 1;
- key = val + strlen(val);
- }
- HTTP_COOKIE_FIXVAL();
- HTTP_COOKIE_VAL(&array, keydup, val, vallen);
- efree(keydup);
- } while (!done);
- }
- return SUCCESS;