Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > 7909056b8d318a670bd2044d8ef97cd5 > files > 1

links-2.2-10.1.mga1.src.rpm

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);
 }