On Fri, May 08, 2026 at 06:08:37AM +0200, Rene Kita wrote:
On Thu, May 07, 2026 at 12:02:08PM -0400, Derek Martin wrote:Updated patch attached. I think I addressed everything you mentioned. Tests still pass.
Yes, it did, thank you for your work, Derek.
A little nitpicking below.
[...](In defense of Derek's commenting, I was the one who encouraged more verboseness and examples)
If we don't care about adding empty strings we could just do (untested):
#v+
void mutt_buffer_concat_path(BUFFER *d, const char *dir, const char *fname)
{
mutt_buffer_clear(d);
mutt_buffer_addstr(d, dir);
if (*dir && dir[strlen(dir)-1 != '/')
mutt_buffer_addch(d, '/');
while (*fname && *fname == '/') fname++;
mutt_buffer_addstr(d, fname);
}
#v-
I like this version (subject to testing).However, the last, simplest version that Alex posted also bears note. I'm adding more context lines (breaking the patch) to make the whole thing clearer:
diff --git i/muttlib.c w/muttlib.c
index 59a48378..a9fe8779 100644
--- i/muttlib.c
+++ w/muttlib.c
@@ -1394,6 +1394,8 @@ void mutt_buffer_concat_path(BUFFER *d, const char*dir,
const char *fname)
{
const char *fmt = "%s/%s";
if (!*fname || (*dir && dir[strlen(dir)-1] == '/'))
fmt = "%s%s";
+ fname += strspn(fname, "/");
+
mutt_buffer_printf(d, fmt, dir, fname);
}
I think this is basically equivalent to what you posted, Rene.
The only tests that were failing in Derek's list where those in which
fname started with '/'. So it clearly fixes that bug.
Fortunately I don't have to choose. I had forgotten that there is another version of the function in lib.c: mutt_concat_path(). It's not called, but it should be fixed too. And Alex's one-line fix applies easily there.
So I'd like to apply Rene's version to the buffer version, swapping in the "fname += strspn(fname, "/");" in place of the while loop. And Alex's version to the mutt_concat_path() (non-buffer) version.
Does that sound good to everyone? -- Kevin J. McCarthy GPG Fingerprint: 8975 A9B3 3AA3 7910 385C 5308 ADEF 7684 8031 6BDA
signature.asc
Description: PGP signature
