diff --git a/src/sbbs3/filedat.c b/src/sbbs3/filedat.c index 9b2086885aabd7cf2b48463d66c0186624f53ee7..920d3d9382c30d44327b156e62abb86a74b805e0 100644 --- a/src/sbbs3/filedat.c +++ b/src/sbbs3/filedat.c @@ -189,6 +189,22 @@ str_list_t loadfilenames(smb_t* smb, const char* filespec, time_t t, enum file_s // Load and optionally-sort files from an open filebase into a dynamically-allocated list of "objects" file_t* loadfiles(smb_t* smb, const char* filespec, time_t t, enum file_detail detail, enum file_sort order, size_t* count) { + // Liberal filespec matching when filespec does not contain wildcards and is at least 12 chars in length + char newfilespec[SMB_FILEIDX_NAMELEN + 1] = ""; + if(filespec != NULL) { + size_t len = strlen(filespec); + if(len >= 12 && strcspn(filespec, "*?") == len) { + SAFECOPY(newfilespec, filespec); + char* ext = getfext(newfilespec); + if(ext != NULL) { + *ext = 0; + SAFECAT(newfilespec, "*"); + SAFECAT(newfilespec, getfext(filespec)); + } else + SAFECAT(newfilespec, "*"); + filespec = newfilespec; + } + } *count = 0; long start = 0;