summaryrefslogtreecommitdiff
path: root/packages/links/files/cookies-save-0.96.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/links/files/cookies-save-0.96.patch')
-rw-r--r--packages/links/files/cookies-save-0.96.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/packages/links/files/cookies-save-0.96.patch b/packages/links/files/cookies-save-0.96.patch
new file mode 100644
index 0000000000..a1e35c01ca
--- /dev/null
+++ b/packages/links/files/cookies-save-0.96.patch
@@ -0,0 +1,106 @@
+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);
+ }
+