1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
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);
}
|