]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
cleanup: eliminate most of the concatsdtr use case
authorBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 4 Jan 2022 22:17:01 +0000 (23:17 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 4 Jan 2022 22:17:01 +0000 (23:17 +0100)
src/gethdrline.c
src/listcontrol.c
src/log_oper.c
src/mlmmj-bounce.c
src/mlmmj-process.c
src/mlmmj-receive.c
src/mlmmj-send.c
src/mlmmj-sub.c
src/prepstdreply.c

index 1a2a87b30a93bccb368e1ec0c6393a5bd5793780..dc0a8d4025f4505a7ce89f8c3590b29c253cc5f9 100644 (file)
@@ -97,13 +97,13 @@ char *gethdrline(int fd, char **unfolded)
 
                if (unfolded != NULL) {
                        oldunfolded = *unfolded;
-                       *unfolded = concatstr(2, oldunfolded, line);
+                       xasprintf(unfolded, "%s%s", oldunfolded, line);
                        free(oldunfolded);
                }
 
                chomp(line);
                oldretstr = retstr;
-               retstr = concatstr(2, oldretstr, line);
+               xasprintf(&retstr, "%s%s", oldretstr, line);
                free(oldretstr);
 
                free(line);
index 0c1c891c2b89b30eb3666ce735ad7df775f18006..634565831766862f8b6ea669ead5fbf75ebb610a 100644 (file)
@@ -32,6 +32,7 @@
 #include <sys/stat.h>
 #include <ctype.h>
 
+#include "xmalloc.h"
 #include "mlmmj.h"
 #include "listcontrol.h"
 #include "strgen.h"
@@ -42,7 +43,6 @@
 #include "controls.h"
 #include "mygetline.h"
 #include "chomp.h"
-#include "xmalloc.h"
 #include "log_oper.h"
 #include "subscriberfuncs.h"
 
@@ -373,7 +373,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
 
        /* listname+subconf-digest-COOKIE@domain.tld */
        case CTRL_CONFSUB_DIGEST:
-               conffilename = concatstr(3, list->dir, "/subconf/", param);
+               xasprintf(&conffilename, "%s/subconf/%s", list->dir, param);
                free(param);
                if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
                        /* invalid COOKIE */
@@ -401,7 +401,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
 
        /* listname+subconf-nomail-COOKIE@domain.tld */
        case CTRL_CONFSUB_NOMAIL:
-               conffilename = concatstr(3, list->dir, "/subconf/", param);
+               xasprintf(&conffilename, "%s/subconf/%s", list->dir, param);
                free(param);
                if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
                        /* invalid COOKIE */
@@ -429,7 +429,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
 
        /* listname+subconf-both-COOKIE@domain.tld */
        case CTRL_CONFSUB_BOTH:
-               conffilename = concatstr(3, list->dir, "/subconf/", param);
+               xasprintf(&conffilename, "%s/subconf/%s/", list->dir, param);
                free(param);
                if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
                        /* invalid COOKIE */
@@ -457,7 +457,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
 
        /* listname+subconf-COOKIE@domain.tld */
        case CTRL_CONFSUB:
-               conffilename = concatstr(3, list->dir, "/subconf/", param);
+               xasprintf(&conffilename, "%s/subconf/%s", list->dir, param);
                free(param);
                if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
                        /* invalid COOKIE */
@@ -524,7 +524,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
                                " sent to a closed list. Ignoring mail");
                        return -1;
                }
-               conffilename = concatstr(3, list->dir, "/unsubconf/", param);
+               xasprintf(&conffilename, "%s/unsubconf/%s", list->dir, param);
                free(param);
                if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
                        /* invalid COOKIE */
@@ -558,7 +558,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
                                " sent to a closed list. Ignoring mail");
                        return -1;
                }
-               conffilename = concatstr(3, list->dir, "/unsubconf/", param);
+               xasprintf(&conffilename, "%s/unsubconf/%s", list->dir, param);
                free(param);
                if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
                        /* invalid COOKIE */
@@ -592,7 +592,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
                                " sent to a closed list. Ignoring mail");
                        return -1;
                }
-               conffilename = concatstr(3, list->dir, "/unsubconf/", param);
+               xasprintf(&conffilename, "%s/unsubconf/%s", list->dir, param);
                free(param);
                if((tmpfd = open(conffilename, O_RDONLY)) < 0) {
                        /* invalid COOKIE */
@@ -655,7 +655,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
                        goto permit;
                }
 
-               moderatefilename = concatstr(3, list->dir, "/moderation/", param);
+               xasprintf(&moderatefilename, "%s/moderation/%s", list->dir, param);
                if(stat(moderatefilename, &stbuf) < 0) {
                        free(moderatefilename);
                        /* no mail to moderate */
@@ -666,14 +666,14 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
                        return -1;
                }
 
-               sendfilename = concatstr(2, moderatefilename, ".sending");
+               xasprintf(&sendfilename, "%s.sending", moderatefilename);
                /* Rename it to avoid mail being sent twice */
                if(rename(moderatefilename, sendfilename) < 0) {
                        log_error(LOG_ARGS, "Could not rename to .sending");
                        exit(EXIT_FAILURE);
                }
 
-               omitfilename = concatstr(2, moderatefilename, ".omit");
+               xasprintf(&omitfilename, "%s.omit", moderatefilename);
                if(stat(omitfilename, &stbuf) == 0) {
                        tmpfd = open(omitfilename, O_RDONLY);
                        if(tmpfd < 0) {
@@ -709,7 +709,7 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
 
        /* listname+reject-COOKIE@domain.tld */
        case CTRL_REJECT:
-               moderatefilename = concatstr(3, list->dir, "/moderation/", param);
+               xasprintf(&moderatefilename, "%s/moderation/%s", list->dir, param);
                if(stat(moderatefilename, &stbuf) < 0) {
                        free(moderatefilename);
                        /* no mail to moderate */
@@ -734,8 +734,8 @@ int listcontrol(struct email_container *fromemails, struct mlmmj_list *list,
        /* listname+permit-COOKIE@domain.tld */
        case CTRL_PERMIT:
 permit:
-               gatekeepfilename = concatstr(3, list->dir,
-                               "/moderation/subscribe", param);
+               xasprintf(&gatekeepfilename, "%s/moderation/subscribe%s",
+                   list->dir, param);
                if(stat(gatekeepfilename, &stbuf) < 0) {
                        free(gatekeepfilename);
                        /* no mail to moderate */
@@ -758,8 +758,8 @@ permit:
 
        /* listname+obstruct-COOKIE@domain.tld */
        case CTRL_OBSTRUCT:
-               gatekeepfilename = concatstr(3, list->dir,
-                               "/moderation/subscribe", param);
+               xasprintf(&gatekeepfilename, "%s/moderation/subscribe%s",
+                   list->dir, param);
                if(stat(gatekeepfilename, &stbuf) < 0) {
                        free(gatekeepfilename);
                        /* no mail to moderate */
@@ -853,8 +853,7 @@ permit:
                                return -1;
                        }
                }
-               archivefilename = concatstr(3, list->dir, "/archive/",
-                                               param);
+               xasprintf(&archivefilename, "%s/archive/%s", list->dir, param);
                if(stat(archivefilename, &stbuf) < 0) {
                        log_error(LOG_ARGS, "Unable to open archive file");
                        exit(EXIT_FAILURE);
index c800fd33413c29b6cad95aa10d3cabc948458ca2..887645be03b0de4f789c8a62463828d0b190d5dd 100644 (file)
 #include <stdlib.h>
 #include <stdarg.h>
 
+#include "xmalloc.h"
 #include "mlmmj.h"
 #include "log_error.h"
 #include "log_oper.h"
 #include "strgen.h"
 #include "wrappers.h"
-#include "xmalloc.h"
 
 int log_oper(const char *prefix, const char *basename, const char *fmt, ...)
 {
        int fd, statres;
-       char ct[26], *logstr, *logfilename, *tmp, log_msg[256];
+       char ct[26], *logfilename, *tmp, log_msg[256];
        struct stat st;
        time_t t;
        va_list ap;
        size_t i;
 
-       logfilename = concatstr(3, prefix, "/", basename);
+       xasprintf(&logfilename, "%s/%s", prefix, basename);
        statres = lstat(logfilename, &st);
        if(statres < 0 && errno != ENOENT) {
                log_error(LOG_ARGS, "Could not stat logfile %s", logfilename);
@@ -57,7 +57,7 @@ int log_oper(const char *prefix, const char *basename, const char *fmt, ...)
        }
        
        if(statres >= 0 && st.st_size > (off_t)OPLOGSIZE) {
-               tmp = concatstr(2, logfilename, ".rotated");
+               xasprintf(&tmp, "%s.rotated", logfilename);
                if(rename(logfilename, tmp) < 0) {
                        log_error(LOG_ARGS, "Could not rename %s,%s",
                                        logfilename, tmp);
@@ -89,13 +89,11 @@ int log_oper(const char *prefix, const char *basename, const char *fmt, ...)
 
        va_end(ap);
 
-       logstr = concatstr(4, ct, " ", log_msg, "\n");
-       if(dprintf(fd, "%s", logstr) < 0)
+       if(dprintf(fd, "%s %s\n", ct, log_msg) < 0)
                log_error(LOG_ARGS, "Could not write to %s", logfilename);
        
        close(fd);
        free(logfilename);
-       free(logstr);
        
        return 0;
 }
index 63cb7599756c29e45f31a2a9ab816b2931ad140f..b0f8e52e1582c8aae674bcfa51327f97fc73866b 100644 (file)
@@ -58,8 +58,8 @@ static void do_probe(struct mlmmj_list *list, const char *mlmmjsend, const char
 
        myaddr = xstrdup(addr);
 
-       from = concatstr(6, list->name, list->delim, "bounces-probe-", myaddr, "@",
-                        list->fqdn);
+       xasprintf(&from, "%s%sbounces-probe-%s@%s", list->name, list->delim,
+           myaddr, list->fqdn);
        a = strrchr(myaddr, '=');
        if (!a) {
                free(myaddr);
@@ -82,7 +82,7 @@ static void do_probe(struct mlmmj_list *list, const char *mlmmjsend, const char
 
        finish_file_lines(fls);
 
-       probefile = concatstr(4, list->dir, "/bounce/", addr, "-probe");
+       xasprintf(&probefile, "%s/bounce/%s-probe", list->dir, addr);
        MY_ASSERT(probefile);
        t = time(NULL);
        a = xmalloc(32);
@@ -191,7 +191,7 @@ int main(int argc, char **argv)
        CHECKFULLPATH(argv[0]);
 
        bindir = mydirname(argv[0]);
-       mlmmjsend = concatstr(2, bindir, "/mlmmj-send");
+       xasprintf(&mlmmjsend, "%s/mlmmj-send", bindir);
        free(bindir);
 
        while ((opt = getopt(argc, argv, "hdVL:a:n:m:p")) != -1) {
@@ -291,7 +291,7 @@ int main(int argc, char **argv)
         * construction of the sub/unsub confirmation From header.
         */
        if(strcmp(number, "confsub") == 0) {
-               a = concatstr(3, list.dir, "/subconf/", address);
+               xasprintf(&a, "%s/subconf/%s", list.dir, address);
                unlink(a);
                free(a);
                if(mailname)
@@ -299,7 +299,7 @@ int main(int argc, char **argv)
                exit(EXIT_SUCCESS);
        }
        if(strcmp(number, "confunsub") == 0) {
-               a = concatstr(3, list.dir, "/unsubconf/", address);
+               xasprintf(&a, "%s/unsubconf/%s", list.dir, address);
                unlink(a);
                free(a);
                if(mailname)
@@ -311,7 +311,7 @@ int main(int argc, char **argv)
         * have horrible names, but please bear with me.
         */
        if(strcmp(number, "probe") == 0) {
-               a = concatstr(4, list.dir, "/bounce/", address, "-probe");
+               xasprintf(&a, "%s/bounce/%s-probe", list.dir, address);
                unlink(a);
                unlink(mailname);
                free(a);
@@ -319,7 +319,7 @@ int main(int argc, char **argv)
        }
 
        /* save the filename with '=' before replacing it with '@' */
-       bfilename = concatstr(3, list.dir, "/bounce/", address);
+       xasprintf(&bfilename, "%s/bounce/%s", address);
 
        a = strrchr(address, '=');
        if (!a) {
@@ -373,7 +373,7 @@ int main(int argc, char **argv)
        close(fd);
 
        if(mailname) {
-               savename = concatstr(2, bfilename, ".lastmsg");
+               xasprintf(&savename, "%s.lastmsg", bfilename);
                rename(mailname, savename);
                free(savename);
        }
index f9af0d9cf45af25eb134d5b183118181066e431c..68e8f7a9b59558e6557c1060c6fcdd1855d5e9e4 100644 (file)
@@ -108,7 +108,7 @@ static int is_moderator(struct mlmmj_list *list, const char *address,
                }
                if (moderators) {
                        tmp = *moderators;
-                       *moderators = concatstr(3, *moderators, buf, "\n");
+                       xasprintf(moderators, "%s\n", buf);
                        free(tmp);
                }
                free(buf);
@@ -131,7 +131,8 @@ static void newmoderated(struct mlmmj_list *list, const char *mailfilename,
        memory_lines_state *mls;
        char *queuefilename = NULL;
        const char *efromismod = NULL;
-       const char *mailbasename = mybasename(mailfilename), *to, *reject;
+       const char *mailbasename = mybasename(mailfilename);
+       char *to, *reject;
        int notifymod = 0, status, queuefd;
        pid_t childpid, pid;
 #if 0
@@ -149,13 +150,13 @@ static void newmoderated(struct mlmmj_list *list, const char *mailfilename,
 
        free(moderators);
 
-       replyto = concatstr(6, list->name, list->delim, "release-", mailbasename,
-                           "@", list->fqdn);
-       reject = concatstr(6, list->name, list->delim, "reject-", mailbasename,
-                           "@", list->fqdn);
+       xasprintf(&replyto, "%s%srelease-%s@%s", list->name, list->delim,
+           mailbasename, list->fqdn);
+       xasprintf(&reject, "%s%sreject-%s@%s", list->name, list->delim,
+           mailbasename, list->fqdn);
 
-       from = concatstr(4, list->name, list->delim, "owner@", list->fqdn);
-       to = concatstr(3, list->name, "-moderators@", list->fqdn); /* FIXME JFA: Should this be converted? Why, why not? */
+       xasprintf(&from, "%s%sowner@%s", list->name, list->delim, list->fqdn);
+       xasprintf(&to, "%s-moderators@%s", list->name, list->fqdn); /* FIXME JFA: Should this be converted? Why, why not? */
 
        txt = open_text(list, "moderate", "post",
                        modreason_strs[modreason], NULL, "moderation");
@@ -444,7 +445,7 @@ send_denymail(struct mlmmj_list *list, const char *cause, const char *subcause,
        struct mail_headers mh;
        int queuefd;
 
-       fromaddr = concatstr(4, list->name, list->delim, "bounces-help@", list->fqdn);
+       xasprintf(&fromaddr, "%s%sbounces-help@%s", list->name, list->delim, list->fqdn);
        txt = open_text(list, "deny", "post", cause, NULL, subcause);
        MY_ASSERT(txt);
        register_unformatted(txt, "subject", subject);
@@ -477,8 +478,7 @@ int main(int argc, char **argv)
        int maxmailsize = 0;
        int notmetoo = 0;
        int subonlypost = 0, modonlypost = 0, modnonsubposts = 0, foundaddr = 0;
-       char *mailfile = NULL, *headerfilename = NULL;
-       char *footerfilename = NULL, *donemailname = NULL;
+       char *mailfile = NULL, *donemailname = NULL;
        char *randomstr = NULL, *mqueuename, *omitfilename;
        char *mlmmjsend, *mlmmjsub, *mlmmjunsub, *mlmmjbounce;
        char *bindir, *subjectprefix, *discardname;
@@ -514,10 +514,10 @@ int main(int argc, char **argv)
        log_set_name(argv[0]);
 
        bindir = mydirname(argv[0]);
-       mlmmjsend = concatstr(2, bindir, "/mlmmj-send");
-       mlmmjsub = concatstr(2, bindir, "/mlmmj-sub");
-       mlmmjunsub = concatstr(2, bindir, "/mlmmj-unsub");
-       mlmmjbounce = concatstr(2, bindir, "/mlmmj-bounce");
+       xasprintf(&mlmmjsend, "%s/mlmmj-send", bindir);
+       xasprintf(&mlmmjsub, "%s/mlmmj-sub", bindir);
+       xasprintf(&mlmmjunsub, "%s/mlmmj-unsub", bindir);
+       xasprintf(&mlmmjbounce, "%s/mlmmj-bounce", bindir);
        free(bindir);
 
        while ((opt = getopt(argc, argv, "hVPm:L:")) != -1) {
@@ -569,7 +569,7 @@ int main(int argc, char **argv)
                 free(donemailname);
                 free(randomstr);
                 randomstr = random_str();
-                donemailname = concatstr(3, list.dir, "/queue/", randomstr);
+               xasprintf(&donemailname, "%s/queue/%s", list.dir, randomstr);
 
                 donemailfd = open(donemailname, O_RDWR|O_CREAT|O_EXCL,
                                                S_IRUSR|S_IWUSR);
@@ -593,14 +593,10 @@ int main(int argc, char **argv)
 
        /* hdrfd is checked in do_all_the_voodoo_here(), because the
         * customheaders file might not exist */
-       headerfilename = concatstr(2, list.dir, "/control/customheaders");
-       hdrfd = open(headerfilename, O_RDONLY);
-       free(headerfilename);
+       hdrfd = openat(list.fd, "control/customheaders", O_RDONLY);
 
        /* footfd is checked in do_all_the_voodoo_here(), see above */
-       footerfilename = concatstr(2, list.dir, "/control/footer");
-       footfd = open(footerfilename, O_RDONLY);
-       free(footerfilename);
+       footfd = openat(list.fd, "control/footer", O_RDONLY);
 
        delheaders = ctrlvalues(&list, "delheaders");
        if(delheaders == NULL) {
@@ -721,8 +717,8 @@ int main(int argc, char **argv)
                for(i = 0; i < fromemails.emailcount; i++)
                        printf("fromemails.emaillist[%d] = %s\n",
                                        i, fromemails.emaillist[i]);
-               discardname = concatstr(3, list.dir,
-                               "/queue/discarded/", randomstr);
+               xasprintf(&discardname, "%s/queue/discarded/%s", list.dir,
+                   randomstr);
                log_error(LOG_ARGS, "Discarding %s due to invalid From:",
                                mailfile);
                for(i = 0; i < fromemails.emailcount; i++)
@@ -764,7 +760,7 @@ int main(int argc, char **argv)
        if (!subject) subject = xstrdup("");
 
        if(recipextra) {
-               owner = concatstr(2, list.dir, "/control/owner");
+               xasprintf(&owner, "%s/control/owner", list.dir);
                if(owner && strcmp(recipextra, "owner") == 0) {
                        /* Why is this here, and not in listcontrol() ?
                         * -- mortenp 20060409 */
@@ -856,9 +852,8 @@ int main(int argc, char **argv)
 
        if(strcmp(efrom, "") == 0) { /* don't send mails with <> in From
                                             to the list */
-               discardname = concatstr(3, list.dir,
-                               "/queue/discarded/",
-                               randomstr);
+               xasprintf(&discardname, "%s/queue/discarded/%s", list.dir,
+                   randomstr);
                errno = 0;
                log_error(LOG_ARGS, "Discarding %s due to missing envelope"
                                " from address", mailfile);
@@ -918,8 +913,8 @@ int main(int argc, char **argv)
                        moderated = 1;
                        modreason = ACCESS;
                } else if (accret == DISCARD) {
-                       discardname = concatstr(3, list.dir,
-                                "/queue/discarded/", randomstr);
+                       xasprintf(&discardname, "%s/queue/discarded/%s",
+                           list.dir, randomstr);
                        free(randomstr);
                        if(rename(donemailname, discardname) < 0) {
                                log_error(LOG_ARGS, "could not rename(%s,%s)",
@@ -1004,8 +999,7 @@ int main(int argc, char **argv)
        notmetoo = statctrl(&list, "notmetoo");
 
        if(moderated) {
-               mqueuename = concatstr(3, list.dir, "/moderation/",
-                                      randomstr);
+               xasprintf(&mqueuename, "%s/moderation/%s", list.dir, randomstr);
                free(randomstr);
                if(rename(donemailname, mqueuename) < 0) {
                        log_error(LOG_ARGS, "could not rename(%s,%s)",
@@ -1016,7 +1010,7 @@ int main(int argc, char **argv)
                }
                free(donemailname);
                if (notmetoo) {
-                       omitfilename = concatstr(2, mqueuename, ".omit");
+                       xasprintf(&omitfilename, "%s.omit", mqueuename);
                        omitfd = open(omitfilename, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
                        if (omitfd < 0) {
                                log_error(LOG_ARGS, "could not open %s",
index ba0b32a93b217b4dd004289cef0d3ebe6d887f59..b5cb19425b0b1131f19cdbe520d1721d516ff793 100644 (file)
 #include <fcntl.h>
 #include <libgen.h>
 
+#include "xmalloc.h"
 #include "mlmmj.h"
 #include "wrappers.h"
 #include "mygetline.h"
 #include "strgen.h"
 #include "log_error.h"
-#include "xmalloc.h"
 
 extern char *optarg;
 
@@ -69,7 +69,7 @@ int main(int argc, char **argv)
        log_set_name(argv[0]);
 
        bindir = mydirname(argv[0]);
-       mlmmjprocess = concatstr(2, bindir, "/mlmmj-process");
+       xasprintf(&mlmmjprocess, "%s/mlmmj-process", bindir);
        free(bindir);
        
        while ((opt = getopt(argc, argv, "hPVL:s:e:F")) != -1) {
@@ -123,14 +123,14 @@ int main(int argc, char **argv)
                        exit(EXIT_FAILURE);
                }
        }
-       
-       infilename = concatstr(3, listdir, "/incoming/", randomstr);
+
+       xasprintf(&infilename, "%s/incoming/%s", listdir, randomstr);
        free(randomstr);
        fd = open(infilename, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
        while(fd < 0 && errno == EEXIST) {
                free(infilename);
                randomstr = random_str();
-               infilename = concatstr(3, listdir, "/incoming/", randomstr);
+               xasprintf(&infilename, "%s/incoming/%s", listdir, randomstr);
                free(randomstr);
                fd = open(infilename, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
        }
index 6a6b4fdf1b5b610b3cb9f2b37e618a4d65d4338b..fd4a12abd3d1388699cf7147e5ab9d73bc2d6707 100644 (file)
@@ -499,7 +499,7 @@ int main(int argc, char **argv)
        log_set_name(argv[0]);
 
        bindir = mydirname(argv[0]);
-       mlmmjbounce = concatstr(2, bindir, "/mlmmj-bounce");
+       xasprintf(&mlmmjbounce, "%s/mlmmj-bounce", bindir);
        free(bindir);
        
        /* install signal handler for SIGTERM */
@@ -754,7 +754,7 @@ int main(int argc, char **argv)
                        deletewhensent = 0;
                        /* dump data we want when resending first check
                         * if it already exists. In that case continue */
-                       tmpstr = concatstr(2, mailfilename, ".mailfrom");
+                       xasprintf(&tmpstr, "%s.mailfrom", mailfilename);
                        if(stat(tmpstr, &st) == 0) {
                                free(tmpstr);
                                break;
@@ -767,7 +767,7 @@ int main(int argc, char **argv)
                                fsync(tmpfd);
                        }
                        close(tmpfd);
-                       tmpstr = concatstr(2, mailfilename, ".reciptto");
+                       xasprintf(&tmpstr, "%s.reciptto", mailfilename);
                        if(stat(tmpstr, &st) == 0) {
                                free(tmpstr);
                                break;
@@ -781,8 +781,8 @@ int main(int argc, char **argv)
                        }
                        close(tmpfd);
                        if(replyto) {
-                               tmpstr = concatstr(2, mailfilename,
-                                                     ".reply-to");
+                               xasprintf(&tmpstr, "%s.reply-to",
+                                   mailfilename);
                                if(stat(tmpstr, &st) == 0) {
                                        free(tmpstr);
                                        break;
@@ -847,8 +847,8 @@ int main(int argc, char **argv)
                        a = strchr(tmpstr, '@');
                        MY_ASSERT(a);
                        *a = '=';
-                       probefile = concatstr(4, list.dir, "/bounce/", tmpstr,
-                                       "-probe");
+                       xasprintf(&probefile, "%s/bounce/%s-probe", list.dir,
+                           tmpstr);
                        unlink(probefile);
                        free(probefile);
                        free(tmpstr);
@@ -875,8 +875,8 @@ int main(int argc, char **argv)
                        exit(EXIT_FAILURE);
                }
 
-               verpfrom = concatstr(6, list.name, list.delim, "bounces-",
-                               strindex, "@", list.fqdn);
+               xasprintf(&verpfrom, "%s%sbounces-%s@%s", list.name, list.delim,
+                   strindex, list.fqdn);
 
                if(digest)
                        verp = NULL;
index 077e00a424bcedca42c456729b24f2d8cfc47e31..74360bf615e40e348fdb3bc675c670a3cbb31d95 100644 (file)
@@ -137,7 +137,7 @@ static void moderate_sub(struct mlmmj_list *list, const char *subaddr,
        for(i = 0; i < submods->count; i++) {
                printf("%s", submods->strs[i]);
                str = moderators;
-               moderators = concatstr(3, moderators, submods->strs[i], "\n");
+               xasprintf(&moderators, "%s%s\n", moderators, submods->strs[i]);
                free(str);
        }
        mls = init_memory_lines(moderators);
index 0ced91845d8c29d5603e60327fc4593295fec1f0..a898b4271fc791c41c7f65f6b80223238fbf5d43 100644 (file)
@@ -412,7 +412,7 @@ static void substitute_one(char **line_p, char **pos_p, int *width_p,
        }
 
        if (value != NULL) {
-               line = concatstr(3, line, value, endpos + 1);
+               xasprintf(&line, "%s%s%s", line, value, endpos + 1);
                *pos_p = line + (*pos_p - *line_p);
                if (strcmp(value, "$") == 0) {
                        (*pos_p)++;
@@ -530,8 +530,8 @@ text *open_text(struct mlmmj_list *list, const char *purpose, const char *action
        char *filename;
        text *txt;
 
-       filename = concatstr(7,purpose,"-",action,"-",reason,"-",type);
-       filenamelen = strlen(filename);
+       filenamelen = xasprintf(&filename, "%s-%s-%s-%s", purpose, action,
+           reason, type);
        do {
                if ((txt = open_text_file(list, filename)) != NULL) break;
                len = type ? strlen(type) : 0;
@@ -657,7 +657,7 @@ static void begin_new_source_file(text *txt, char **line_p, char **pos_p,
                free(tmp);
                tmp = esc;
        }
-       line = concatstr(2, line, tmp);
+       xasprintf(&line, "%s%s", line, tmp);
        *pos_p = line + (*pos_p - *line_p);
        free(*line_p);
        *line_p = line;
@@ -713,7 +713,7 @@ static void begin_new_formatted_source(text *txt, char **line_p, char **pos_p,
                return;
        }
        if (!transparent) str = unistr_escaped_to_utf8(str);
-       line = concatstr(2, line, str);
+       xasprintf(&line, "%s%s", line, str);
        /* The suffix will be added back in get_processed_text_line() */
        *pos_p = line + strlen(*line_p);
        free(*line_p);
@@ -811,7 +811,7 @@ static int handle_conditional(text *txt, char **line_p, char **pos_p,
        if (*skipwhite_p) {
                while (*pos == ' ' || *pos == '\t') pos++;
        }
-       line = concatstr(2, line, pos);
+       xasprintf(&line, "%s%s", line, pos);
        *pos_p = line + (*pos_p - *line_p);
        free(*line_p);
        *line_p = line;
@@ -889,7 +889,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
                                while (*endpos == ' ' || *endpos == '\t')
                                                endpos++;
                        }
-                       line = concatstr(2, line, endpos);
+                       xasprintf(&line, "%s%s", line, endpos);
                        *pos_p = line + (*pos_p - *line_p);
                        free(*line_p);
                        *line_p = line;
@@ -907,7 +907,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
                                while (*endpos == ' ' || *endpos == '\t')
                                                endpos++;
                        }
-                       line = concatstr(2, line, endpos);
+                       xasprintf(&line, "%s%s", line, endpos);
                        *pos_p = line + (*pos_p - *line_p);
                        free(*line_p);
                        *line_p = line;
@@ -934,7 +934,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
        *skipwhite_p = 0;
 
        if(strcmp(token, "") == 0) {
-               line = concatstr(3, line, "%", endpos + 1);
+               xasprintf(&line, "%s%%%s", line, endpos + 1);
                *pos_p = line + (*pos_p - *line_p) + 1;
                (*width_p)++;
                free(*line_p);
@@ -943,7 +943,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
        } else if(strcmp(token, "^") == 0) {
                if (txt->src->prefixlen != 0) {
                        line[txt->src->prefixlen] = '\0';
-                       line = concatstr(2, line, endpos + 1);
+                       xasprintf(&line, "%s%s", line, endpos + 1);
                        *width_p = txt->src->prefixwidth;
                } else {
                        line = xstrdup(endpos + 1);
@@ -956,7 +956,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
        } else if(strcmp(token, "comment") == 0 || strcmp(token, "$") == 0 ) {
                pos = endpos + 1;
                while (*pos != '\0' && *pos != '\r' && *pos != '\n') pos++;
-               line = concatstr(2, line, pos);
+               xasprintf(&line, "%s%s", line, pos);
                *pos_p = line + (*pos_p - *line_p);
                free(*line_p);
                *line_p = line;
@@ -973,7 +973,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
                if (limit != 0) {
                        txt->wrapindent = *width_p;
                        txt->wrapwidth = limit;
-                       line = concatstr(2, line, endpos + 1);
+                       xasprintf(&line, "%s%s", line, endpos + 1);
                        *pos_p = line + (*pos_p - *line_p);
                        free(*line_p);
                        *line_p = line;
@@ -981,7 +981,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
                }
        } else if(strcmp(token, "nowrap") == 0) {
                txt->wrapwidth = 0;
-               line = concatstr(2, line, endpos + 1);
+               xasprintf(&line, "%s%s", line, endpos + 1);
                *pos_p = line + (*pos_p - *line_p);
                free(*line_p);
                *line_p = line;
@@ -995,21 +995,21 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
                if (*token == 'w') txt->wrapmode = WRAP_WORD;
                if (*token == 'c') txt->wrapmode = WRAP_CHAR;
                if (*token == 'u') txt->wrapmode = WRAP_USER;
-               line = concatstr(2, line, endpos + 1);
+               xasprintf(&line, "%s%s", line, endpos + 1);
                *pos_p = line + (*pos_p - *line_p);
                free(*line_p);
                *line_p = line;
                return 0;
        } else if(strcmp(token, "thin") == 0) {
                txt->widthreckoning = WIDTH_THIN;
-               line = concatstr(2, line, endpos + 1);
+               xasprintf(&line, "%s%s", line, endpos + 1);
                *pos_p = line + (*pos_p - *line_p);
                free(*line_p);
                *line_p = line;
                return 0;
        } else if(strcmp(token, "wide") == 0) {
                txt->widthreckoning = WIDTH_WIDE;
-               line = concatstr(2, line, endpos + 1);
+               xasprintf(&line, "%s%s", line, endpos + 1);
                *pos_p = line + (*pos_p - *line_p);
                free(*line_p);
                *line_p = line;
@@ -1018,7 +1018,7 @@ static int handle_directive(text *txt, char **line_p, char **pos_p,
                token += 5;
                if (txt->zerowidth != NULL) free(txt->zerowidth);
                txt->zerowidth = xstrdup(token);
-               line = concatstr(2, line, endpos + 1);
+               xasprintf(&line, "%s%s", line, endpos + 1);
                *pos_p = line + (*pos_p - *line_p);
                free(*line_p);
                *line_p = line;
@@ -1239,11 +1239,13 @@ char *get_processed_text_line(text *txt, int headers, struct mlmmj_list *list)
                                } else {
                                        if (txt->wrapmode == WRAP_WORD &&
                                                        len > wrapindentlen) {
-                                           tmp = concatstr(3, prev, " ", pos);
-                                           len++;
-                                           width++;
+                                               xasprintf(&tmp, "%s %s", prev,
+                                                   pos);
+                                               len++;
+                                               width++;
                                        } else {
-                                           tmp = concatstr(2, prev, pos);
+                                               xasprintf(&tmp, "%s %s", prev,
+                                                   pos);
                                        }
                                }
                                free(line);
@@ -1340,7 +1342,7 @@ char *get_processed_text_line(text *txt, int headers, struct mlmmj_list *list)
                                        else inhibitbreak = 0;
                                }
                                *pos = '\0';
-                               tmp = concatstr(2, line, tmp);
+                               xasprintf(&tmp, "%s %s", line, tmp);
                                pos = tmp + len;
                                free(line);
                                line = tmp;
@@ -1378,7 +1380,8 @@ char *get_processed_text_line(text *txt, int headers, struct mlmmj_list *list)
                                            /* Time to cut */
                                            if (pos - line != incision) {
                                                line[incision] = '\0';
-                                               tmp = concatstr(2, line, pos);
+                                               xasprintf(&tmp, "%s%s", line,
+                                                  pos);
                                                pos = tmp + incision;
                                                free(line);
                                                line = tmp;
@@ -1481,8 +1484,9 @@ char *get_processed_text_line(text *txt, int headers, struct mlmmj_list *list)
                                    /* If something's coming up, it's because
                                     * it was a new line. */
                                    if (*(line + linebreak) != '\0') {
-                                       tmp = concatstr(3, line + linebreak,
-                                               "\n", txt->src->upcoming);
+                                       xasprintf(&tmp, "%s\n%s",
+                                               line + linebreak,
+                                               txt->src->upcoming);
                                        free(txt->src->upcoming);
                                    } else {
                                        tmp = txt->src->upcoming;
@@ -1525,9 +1529,8 @@ char *get_processed_text_line(text *txt, int headers, struct mlmmj_list *list)
                                        txt->src->processedwidth = width;
                                } else {
                                        tmp = txt->src->upcoming;
-                                       txt->src->upcoming = concatstr(3,
-                                                       line, "\n",
-                                                       txt->src->upcoming);
+                                       xasprintf(&txt->src->upcoming, "%s\n%s",
+                                           line, txt->src->upcoming);
                                        txt->src->processedlen = len;
                                        txt->src->processedwidth = width;
                                        free(line);
@@ -1538,7 +1541,7 @@ char *get_processed_text_line(text *txt, int headers, struct mlmmj_list *list)
                }
 
                if (txt->src->suffix != NULL) {
-                       tmp = concatstr(2, line, txt->src->suffix);
+                       xasprintf(&tmp, "%s%s", line, txt->src->suffix);
                        free(line);
                        return tmp;
                } else {
@@ -1624,10 +1627,10 @@ char *prepstdreply(text *txt, struct mlmmj_list *list,
        }
 
        tmp = substitute(from, list, txt);
-       headers[0] = concatstr(2, "From: ", tmp);
+       xasprintf(&headers[0], "From: %s", tmp);
        free(tmp);
        tmp = substitute(to, list, txt);
-       headers[1] = concatstr(2, "To: ", tmp);
+       xasprintf(&headers[1], "To: %s", tmp);
        free(tmp);
        headers[2] = genmsgid(list->fqdn);
        chomp(headers[2]);
@@ -1640,7 +1643,7 @@ char *prepstdreply(text *txt, struct mlmmj_list *list,
 
        if(replyto) {
                tmp = substitute(replyto, list, txt);
-               headers[8] = concatstr(2, "Reply-To: ", tmp);
+               xasprintf(&headers[8], "Reply-To: %s", tmp);
                free(tmp);
        }
 
@@ -1694,7 +1697,7 @@ char *prepstdreply(text *txt, struct mlmmj_list *list,
                        if (strncasecmp(line, "Subject:", len) == 0) {
                                tmp = unistr_utf8_to_header(tmp);
                                free(line);
-                               line = concatstr(2, "Subject: ", tmp);
+                               xasprintf(&line, "Subject: %s", tmp);
                                free(tmp);
                        }
                        if(dprintf(outfd, "%s\n", line) < 0) {