]> git.ipfire.org Git - thirdparty/mlmmj.git/commitdiff
mybasename: test and optimise
authorBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 16 Dec 2021 10:44:14 +0000 (11:44 +0100)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Thu, 16 Dec 2021 10:44:14 +0000 (11:44 +0100)
Eliminate the need for memory alloation for this function

include/strgen.h
src/mlmmj-process.c
src/strgen.c
tests/mlmmj.c

index 4a648c90141f51554183c8d8b745dcef9acd6f08..5e0439387d7743ecaf6af105cd01ac2397fa0ca4 100644 (file)
@@ -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);
index d11d923e379347d9dc846a0da891c273a5fc7fba..d13edb85645a9536e20b95ce3667afe2566a6d57 100644 (file)
@@ -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
index 246f8d7cdd4349409d190d193b5e25b220edd778..a8c7ea6e6c232b96f4c6f1fa98eaa3b541768c09 100644 (file)
@@ -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)
index 477fb32306e5608be6c30bbe32bbd5404960e326..028a71c4bc0c76445ccc0f90630417937c8bc5dd 100644 (file)
@@ -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());
 }