From: Baptiste Daroussin Date: Thu, 16 Dec 2021 10:44:14 +0000 (+0100) Subject: mybasename: test and optimise X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c923d4fd55f13625c3ebe3ea7abf9381cf4522ff;p=thirdparty%2Fmlmmj.git mybasename: test and optimise Eliminate the need for memory alloation for this function --- diff --git a/include/strgen.h b/include/strgen.h index 4a648c90..5e043938 100644 --- a/include/strgen.h +++ b/include/strgen.h @@ -33,7 +33,7 @@ char *genlistfqdn(const char *listaddr); char *concatstr(int count, ...); char *hostnamestr(void); char *mydirname(const char *path); -char *mybasename(const char *path); +const char *mybasename(const char *path); char *cleanquotedp(const char *qpstr); char *genmsgid(const char *fqdn); char *gendatestr(void); diff --git a/src/mlmmj-process.c b/src/mlmmj-process.c index d11d923e..d13edb85 100644 --- a/src/mlmmj-process.c +++ b/src/mlmmj-process.c @@ -134,7 +134,7 @@ static void newmoderated(struct mlmmj_list *list, const char *mailfilename, memory_lines_state *mls; char *queuefilename = NULL; const char *efromismod = NULL; - char *mailbasename = mybasename(mailfilename), *to, *reject; + const char *mailbasename = mybasename(mailfilename), *to, *reject; int notifymod = 0, status, queuefd; pid_t childpid, pid; #if 0 diff --git a/src/strgen.c b/src/strgen.c index 246f8d7c..a8c7ea6e 100644 --- a/src/strgen.c +++ b/src/strgen.c @@ -180,19 +180,14 @@ char *mydirname(const char *path) return ret; } -char *mybasename(const char *path) +const char *mybasename(const char *path) { - char *mypath, *bname, *ret; + const char *r; - mypath = mystrdup(path); - bname = basename(mypath); - ret = mystrdup(bname); - - /* We don't free mypath until we have strdup()'ed bname, because - * basename() returns a pointer into mypath -- mortenp 20040527 */ - myfree(mypath); - - return ret; + r = strrchr(path, '/'); + if (r == NULL) + return (path); + return (++r); } char *cleanquotedp(const char *qpstr) diff --git a/tests/mlmmj.c b/tests/mlmmj.c index 477fb323..028a71c4 100644 --- a/tests/mlmmj.c +++ b/tests/mlmmj.c @@ -43,6 +43,7 @@ ATF_TC(mlmmj_list); ATF_TC(open_text); ATF_TC(chomp); ATF_TC(mydirname); +ATF_TC(mybasename); ATF_TC_HEAD(random_int, tc) { } ATF_TC_HEAD(statctrl, tc) { } @@ -50,6 +51,7 @@ ATF_TC_HEAD(mlmmj_list, tc) { } ATF_TC_HEAD(open_text, tc) {} ATF_TC_HEAD(chomp, tc) {} ATF_TC_HEAD(mydirname, tc) {} +ATF_TC_HEAD(mybasename, tc) {} #ifndef NELEM #define NELEM(array) (sizeof(array) / sizeof((array)[0])) @@ -251,7 +253,15 @@ ATF_TC_BODY(mydirname, tc) char plop[] = "/path/to/a/file"; ATF_REQUIRE_STREQ(mydirname(plop), "/path/to/a"); +} + +ATF_TC_BODY(mybasename, tc) +{ + char plop[] = "/path/to/a/file"; + char plop1[] = "file"; + ATF_REQUIRE_STREQ(mybasename(plop), "file"); + ATF_REQUIRE_STREQ(mybasename(plop1), "file"); } ATF_TP_ADD_TCS(tp) @@ -262,6 +272,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, open_text); ATF_TP_ADD_TC(tp, chomp); ATF_TP_ADD_TC(tp, mydirname); + ATF_TP_ADD_TC(tp, mybasename); return (atf_no_error()); }