diff options
Diffstat (limited to 'packages/links/files/cookies-save-0.96.patch')
-rw-r--r-- | packages/links/files/cookies-save-0.96.patch | 106 |
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); + } + |