changeset 883:4e97d0735da7

Fix initialisation problems so +list works.
author Ben Schmidt
date Fri, 28 Jun 2013 08:04:08 +1000
parents 5b0f0431e55e
children b0f28e7ead43
files README.listtexts src/send_list.c
diffstat 2 files changed, 22 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/README.listtexts	Wed May 08 19:56:18 2013 +1000
+++ b/README.listtexts	Fri Jun 28 08:04:08 2013 +1000
@@ -368,6 +368,11 @@
 - %listsubs%
   (available only in list---*)
   the list of normal subscribers
+  DEPRECATED: use %normalsubs%
+
+- %normalsubs%
+  (available only in list---*)
+  the list of normal subscribers
 
 - %digestsubs%
   (available only in list---*)
--- a/src/send_list.c	Wed May 08 19:56:18 2013 +1000
+++ b/src/send_list.c	Fri Jun 28 08:04:08 2013 +1000
@@ -56,14 +56,13 @@
 
 static subs_list_state *init_subs_list(const char *dirname)
 {
-	/* We use a static variable rather than dynamic allocation as
-	 * there will never be two lists in use simultaneously */
-	static subs_list_state s;
-	s.dirname = mystrdup(dirname);
-	s.dirp = NULL;
-	s.fd = -1;
-	s.used = 0;
-	return &s;
+	subs_list_state *s = mymalloc(sizeof(subs_list_state));
+	s->dirname = mystrdup(dirname);
+	s->dirp = NULL;
+	s->fd = -1;
+	s->line = NULL;
+	s->used = 0;
+	return s;
 }
 
 
@@ -135,6 +134,7 @@
 	if (s->fd != -1) close(s->fd);
 	if (s->dirp != NULL) closedir(s->dirp);
 	myfree(s->dirname);
+	myfree(s);
 }
 
 
@@ -155,7 +155,7 @@
 	       const char *mlmmjsend)
 {
 	text *txt;
-	subs_list_state *subsls, *digestsls, *nomailsls;
+	subs_list_state *normalsls, *digestsls, *nomailsls;
 	char *queuefilename, *listaddr, *listdelim, *listname, *listfqdn;
 	char *fromaddr, *subdir, *nomaildir, *digestdir;
 	int fd;
@@ -171,7 +171,7 @@
 	subdir = concatstr(2, listdir, "/subscribers.d/");
 	digestdir = concatstr(2, listdir, "/digesters.d/");
 	nomaildir = concatstr(2, listdir, "/nomailsubs.d/");
-	subsls = init_subs_list(subdir);
+	normalsls = init_subs_list(subdir);
 	digestsls = init_subs_list(digestdir);
 	nomailsls = init_subs_list(nomaildir);
 	myfree(subdir);
@@ -181,8 +181,10 @@
 	txt = open_text(listdir, "list", NULL, NULL, subtype_strs[SUB_ALL],
 			"listsubs");
 	MY_ASSERT(txt);
-	register_formatted(txt, "subs",
-			rewind_subs_list, get_sub, subsls);
+	register_formatted(txt, "listsubs",
+			rewind_subs_list, get_sub, normalsls);
+	register_formatted(txt, "normalsubs",
+			rewind_subs_list, get_sub, normalsls);
 	register_formatted(txt, "digestsubs",
 			rewind_subs_list, get_sub, digestsls);
 	register_formatted(txt, "nomailsubs",
@@ -193,7 +195,7 @@
 
 	/* DEPRECATED */
 	/* Add lists manually if they weren't encountered in the list text */
-	if (!subsls->used && !digestsls->used && !nomailsls->used) {
+	if (!normalsls->used && !digestsls->used && !nomailsls->used) {
 		fd = open(queuefilename, O_WRONLY);
 		if(fd < 0) {
 			log_error(LOG_ARGS, "Could not open sub list mail");
@@ -203,7 +205,7 @@
 			log_error(LOG_ARGS, "Could not seek to end of file");
 			exit(EXIT_FAILURE);
 		}
-		print_subs(fd, subsls);
+		print_subs(fd, normalsls);
 		writen(fd, "\n-- \n", 5);
 		print_subs(fd, nomailsls);
 		writen(fd, "\n-- \n", 5);
@@ -212,7 +214,7 @@
 		close(fd);
 	}
 
-	finish_subs_list(subsls);
+	finish_subs_list(normalsls);
 	finish_subs_list(digestsls);
 	finish_subs_list(nomailsls);
 	myfree(listaddr);