From: Baptiste Daroussin Date: Tue, 4 Jan 2022 22:17:01 +0000 (+0100) Subject: cleanup: eliminate most of the concatsdtr use case X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f290a55fab6b143b21cf50952c8a974bd04a94fd;p=thirdparty%2Fmlmmj.git cleanup: eliminate most of the concatsdtr use case --- diff --git a/src/gethdrline.c b/src/gethdrline.c index 1a2a87b3..dc0a8d40 100644 --- a/src/gethdrline.c +++ b/src/gethdrline.c @@ -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); diff --git a/src/listcontrol.c b/src/listcontrol.c index 0c1c891c..63456583 100644 --- a/src/listcontrol.c +++ b/src/listcontrol.c @@ -32,6 +32,7 @@ #include #include +#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); diff --git a/src/log_oper.c b/src/log_oper.c index c800fd33..887645be 100644 --- a/src/log_oper.c +++ b/src/log_oper.c @@ -32,23 +32,23 @@ #include #include +#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; } diff --git a/src/mlmmj-bounce.c b/src/mlmmj-bounce.c index 63cb7599..b0f8e52e 100644 --- a/src/mlmmj-bounce.c +++ b/src/mlmmj-bounce.c @@ -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); } diff --git a/src/mlmmj-process.c b/src/mlmmj-process.c index f9af0d9c..68e8f7a9 100644 --- a/src/mlmmj-process.c +++ b/src/mlmmj-process.c @@ -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", diff --git a/src/mlmmj-receive.c b/src/mlmmj-receive.c index ba0b32a9..b5cb1942 100644 --- a/src/mlmmj-receive.c +++ b/src/mlmmj-receive.c @@ -31,12 +31,12 @@ #include #include +#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); } diff --git a/src/mlmmj-send.c b/src/mlmmj-send.c index 6a6b4fdf..fd4a12ab 100644 --- a/src/mlmmj-send.c +++ b/src/mlmmj-send.c @@ -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; diff --git a/src/mlmmj-sub.c b/src/mlmmj-sub.c index 077e00a4..74360bf6 100644 --- a/src/mlmmj-sub.c +++ b/src/mlmmj-sub.c @@ -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); diff --git a/src/prepstdreply.c b/src/prepstdreply.c index 0ced9184..a898b427 100644 --- a/src/prepstdreply.c +++ b/src/prepstdreply.c @@ -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) {