2012-07-31 00:14:55 +02:00

107 lines
2.3 KiB
Diff

diff -ru links-0.96/cookies.c links-0.96+cookies-save/cookies.c
--- links-0.96/cookies.c Mon Sep 3 07:19:37 2001
+++ links-0.96+cookies-save/cookies.c Mon Sep 3 07:18:42 2001
@@ -276,15 +276,99 @@
void init_cookies(void)
{
- /* !!! FIXME: read cookies */
+ unsigned char in_buffer[MAX_STR_LEN];
+ unsigned char *cookfile, *p, *q;
+ FILE *fp;
+
+ /* must be called after init_home */
+ if (! links_home) return;
+
+ cookfile = stracpy(links_home);
+ if (! cookfile) return;
+ add_to_strn(&cookfile, "cookies");
+
+ fp = fopen(cookfile, "r");
+ mem_free(cookfile);
+ if (fp == NULL) return;
+
+ while (fgets(in_buffer, MAX_STR_LEN, fp)) {
+ struct cookie *cookie;
+
+ if (!(cookie = mem_alloc(sizeof(struct cookie)))) return;
+ memset(cookie, 0, sizeof(struct cookie));
+
+ q = in_buffer; p = strchr(in_buffer, ' ');
+ if (p == NULL) goto inv;
+ *p++ = '\0';
+ cookie->name = stracpy(q);
+
+ q = p; p = strchr(p, ' ');
+ if (p == NULL) goto inv;
+ *p++ = '\0';
+ cookie->value = stracpy(q);
+
+ q = p; p = strchr(p, ' ');
+ if (p == NULL) goto inv;
+ *p++ = '\0';
+ cookie->server = stracpy(q);
+
+ q = p; p = strchr(p, ' ');
+ if (p == NULL) goto inv;
+ *p++ = '\0';
+ cookie->path = stracpy(q);
+
+ q = p; p = strchr(p, ' ');
+ if (p == NULL) goto inv;
+ *p++ = '\0';
+ cookie->domain = stracpy(q);
+
+ q = p; p = strchr(p, ' ');
+ if (p == NULL) goto inv;
+ *p++ = '\0';
+ cookie->expires = atoi(q);
+
+ cookie->secure = atoi(p);
+
+ cookie->id = cookie_id++;
+
+ accept_cookie(cookie);
+
+ continue;
+
+inv:
+ free_cookie(cookie);
+ free(cookie);
+ }
+ fclose(fp);
}
void cleanup_cookies(void)
{
struct cookie *c;
+ unsigned char *cookfile;
+ FILE *fp;
+
free_list(c_domains);
- /* !!! FIXME: save cookies */
- foreach (c, cookies) free_cookie(c);
+
+ cookfile = stracpy(links_home);
+ if (! cookfile) return;
+ add_to_strn(&cookfile, "cookies");
+
+ fp = fopen(cookfile, "w");
+ mem_free(cookfile);
+ if (fp == NULL) return;
+
+ foreach (c, cookies) {
+ if (c->expires && ! cookie_expired(c))
+ fprintf(fp, "%s %s %s %s %s %d %d\n", c->name, c->value,
+ c->server?c->server:(unsigned char *)"", c->path?c->path:(unsigned char *)"",
+ c->domain?c->domain:(unsigned char *)"", c->expires, c->secure);
+
+ free_cookie(c);
+ }
+
+ fclose(fp);
+
free_list(cookies);
}