Mercurial > hg > mlmmj
changeset 117:9a39dff171fa
added mydirname() and mybasename() which doesn't mess with their argument, and
returns newly allocated strings
author | mortenp |
---|---|
date | Thu, 27 May 2004 23:04:29 +1000 |
parents | f619b85b02d1 |
children | a634575fd7d5 |
files | include/strgen.h src/mlmmj-process.c src/mlmmj-recieve.c src/mlmmj-send.c src/mlmmj-sub.c src/mlmmj-unsub.c src/strgen.c |
diffstat | 7 files changed, 55 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/include/strgen.h Thu May 27 17:16:50 2004 +1000 +++ b/include/strgen.h Thu May 27 23:04:29 2004 +1000 @@ -16,5 +16,7 @@ char *genlistfqdn(const char *listaddr); char *concatstr(int count, ...); char *hostnamestr(void); +char *mydirname(const char *path); +char *mybasename(const char *path); #endif /* STRGEN_H */
--- a/src/mlmmj-process.c Thu May 27 17:16:50 2004 +1000 +++ b/src/mlmmj-process.c Thu May 27 23:04:29 2004 +1000 @@ -35,7 +35,7 @@ char *to, *from, *subject, *fqdn, *listname, *replyto; char *buf, *moderatorfilename, *listaddr = getlistaddr(listdir); char *queuefilename, *moderatorsfilename, *randomstr = random_str(); - char *mailbasename = basename(strdup(mailfilename)); + char *mailbasename = mybasename(mailfilename); FILE *moderatorfile, *queuefile, *moderatorsfile, *mailfile; size_t count = 0; @@ -155,7 +155,7 @@ char *footerfilename = NULL, *donemailname = NULL; char *randomstr = random_str(), *basename, *mqueuename; char *mlmmjsend, *mlmmjsub, *mlmmjunsub, *mlmmjbounce; - char *argv0 = strdup(argv[0]), *subjectprefix; + char *bindir, *subjectprefix; FILE *headerfile, *footerfile, *rawmailfile, *donemailfile; struct email_container toemails = { 0, NULL }; const char *badheaders[] = { "From ", "Return-Path:", NULL }; @@ -168,17 +168,12 @@ log_set_name(argv[0]); - mlmmjsend = concatstr(2, dirname(argv0), "/mlmmj-send"); - free(argv0); - argv0 = strdup(argv[0]); - mlmmjsub = concatstr(2, dirname(argv0), "/mlmmj-sub"); - free(argv0); - argv0 = strdup(argv[0]); - mlmmjunsub = concatstr(2, dirname(argv0), "/mlmmj-unsub"); - free(argv0); - argv0 = strdup(argv[0]); - mlmmjbounce = concatstr(2, dirname(argv0), "/mlmmj-bounce"); - free(argv0); + 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"); + free(bindir); while ((opt = getopt(argc, argv, "hVPm:L:")) != -1) { switch(opt) {
--- a/src/mlmmj-recieve.c Thu May 27 17:16:50 2004 +1000 +++ b/src/mlmmj-recieve.c Thu May 27 23:04:29 2004 +1000 @@ -39,14 +39,15 @@ { char *infilename = NULL, *listdir = NULL, *line = NULL; char *randomstr = random_str(); - char *mlmmjprocess, *argv0 = strdup(argv[0]); + char *mlmmjprocess, *bindir; int fd, opt, noprocess = 0, nofork = 0; pid_t childpid; log_set_name(argv[0]); - mlmmjprocess = concatstr(2, dirname(argv0), "/mlmmj-process"); - free(argv0); + bindir = mydirname(argv[0]); + mlmmjprocess = concatstr(2, bindir, "/mlmmj-process"); + free(bindir); while ((opt = getopt(argc, argv, "hPVL:F")) != -1) { switch(opt) {
--- a/src/mlmmj-send.c Thu May 27 17:16:50 2004 +1000 +++ b/src/mlmmj-send.c Thu May 27 23:04:29 2004 +1000 @@ -286,7 +286,6 @@ { int sendres = 0; char *bounceaddr, *addr, *index, *dirname, *addrfilename; - char *myarchivefilename = strdup(archivefilename); FILE *addrfile; while((addr = myfgetline(subfile))) { @@ -303,8 +302,7 @@ } if(sendres && listaddr && archivefilename) { /* we failed, so save the addresses and bail */ - index = basename(myarchivefilename); - free(myarchivefilename); + index = mybasename(archivefilename); dirname = concatstr(3, listdir, "/requeue/", index); free(index); if(mkdir(dirname, 0750) < 0) { @@ -402,7 +400,7 @@ switch(opt) { case 'a': archive = 0; - break + break; case 'D': deletewhensent = 0; break; @@ -545,6 +543,7 @@ log_error(LOG_ARGS, "Could not opendir(%s)", subddirname); free(subddirname); + exit(EXIT_FAILURE); } free(subddirname);
--- a/src/mlmmj-sub.c Thu May 27 17:16:50 2004 +1000 +++ b/src/mlmmj-sub.c Thu May 27 23:04:29 2004 +1000 @@ -207,13 +207,14 @@ int main(int argc, char **argv) { char *listaddr, *listdir = NULL, *address = NULL, *subfilename = NULL; - char *mlmmjsend, *argv0 = strdup(argv[0]), chstr[2]; + char *mlmmjsend, *bindir, chstr[2]; int subconfirm = 0, confirmsub = 0, opt, subfilefd, lock; size_t len; off_t suboff; - mlmmjsend = concatstr(2, dirname(argv0), "/mlmmj-send"); - free(argv0); + bindir = mydirname(argv[0]); + mlmmjsend = concatstr(2, bindir, "/mlmmj-send"); + free(bindir); log_set_name(argv[0]);
--- a/src/mlmmj-unsub.c Thu May 27 17:16:50 2004 +1000 +++ b/src/mlmmj-unsub.c Thu May 27 23:04:29 2004 +1000 @@ -245,14 +245,15 @@ int subread, subwrite, rlock, wlock, opt, unsubres; int confirmunsub = 0, unsubconfirm = 0; char *listaddr, *listdir = NULL, *address = NULL, *subreadname = NULL; - char *subwritename, *mlmmjsend, *argv0 = strdup(argv[0]); + char *subwritename, *mlmmjsend, *bindir; char *subddirname; off_t suboff; DIR *subddir; struct dirent *dp; - mlmmjsend = concatstr(2, dirname(argv0), "/mlmmj-send"); - free(argv0); + bindir = mydirname(argv[0]); + mlmmjsend = concatstr(2, bindir, "/mlmmj-send"); + free(bindir); log_set_name(argv[0]);
--- a/src/strgen.c Thu May 27 17:16:50 2004 +1000 +++ b/src/strgen.c Thu May 27 23:04:29 2004 +1000 @@ -12,6 +12,7 @@ #include <stdarg.h> #include <unistd.h> #include <netdb.h> +#include <libgen.h> #include "strgen.h" #include "wrappers.h" @@ -129,3 +130,32 @@ return strdup(hostlookup->h_name); } +char *mydirname(const char *path) +{ + char *mypath, *dname, *ret; + + mypath = strdup(path); + dname = dirname(mypath); + ret = strdup(dname); + + /* We don't free mypath until we have strdup()'ed dname, because + * dirname() returns a pointer into mypath -- mortenp 20040527 */ + free(mypath); + + return ret; +} + +char *mybasename(const char *path) +{ + char *mypath, *bname, *ret; + + mypath = strdup(path); + bname = basename(mypath); + ret = strdup(bname); + + /* We don't free mypath until we have strdup()'ed bname, because + * basename() returns a pointer into mypath -- mortenp 20040527 */ + free(mypath); + + return ret; +}