# HG changeset patch # User Ben Schmidt # Date 1372370648 -36000 # Node ID 4e97d0735da7513571eb6fa793bd5ecd5720d41b # Parent 5b0f0431e55e36927f14bf750d68aa607ef6225f Fix initialisation problems so +list works. diff -r 5b0f0431e55e -r 4e97d0735da7 README.listtexts --- 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---*) diff -r 5b0f0431e55e -r 4e97d0735da7 src/send_list.c --- 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);