From c567f75fdb9ee4dc3ad73cbfa2aeed135d109d7a Mon Sep 17 00:00:00 2001 From: Mario Fetka Date: Wed, 20 May 2026 08:16:28 +0200 Subject: [PATCH] next dos83 fixes namespace.c --- src/namspace.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/namspace.c b/src/namspace.c index b2c24e0..2194a95 100644 --- a/src/namspace.c +++ b/src/namspace.c @@ -1518,7 +1518,37 @@ static int search_match(struct dirent *dirbuff, XDPRINTF((8,0,"search_match, Name='%s' dname='%s'", name, dname)); if (!inode_search) { if (namespace == NAME_DOS) { - flag = (*name != '.' && fn_dos_match_old(dname, entry, vol_options)); + uint8 dosname[DOS83_NAME_MAX + 1]; + char saved_dir[1024]; + char *slash; + + if (*name == '.') { + flag = 0; + } else { + /* + * ds->unixname currently points to the full directory path used + * during scanning. Convert it to the containing directory string + * expected by namedos.c. + */ + strncpy(saved_dir, (char *)ds->unixname, sizeof(saved_dir) - 1); + saved_dir[sizeof(saved_dir) - 1] = '\0'; + + slash = strrchr(saved_dir, '/'); + if (slash) + *slash = '\0'; + else + strcpy(saved_dir, "."); + + flag = dos83_match_name_in_dir(saved_dir, + name, + entry, + vol_options, + dosname, + sizeof(dosname)); + + if (flag) + strmaxcpy(dname, (char *)dosname, size_dname - 1); + } } else if (namespace == NAME_OS2) { flag = (*name != '.' || (*(name+1) != '.' && *(name+1) != '\0' )) && fn_os2_match(dname, entry, vol_options);