Merge branch '712-trying-to-load-a-folder-as-an-addon-causes-a-bad-cycle-error-everytime' into 'next'

Resolve "[2.2.10 prerelease] Trying to load a folder as an addon causes a "bad cycle" error every time"

Closes #712

See merge request STJr/SRB2!2412
This commit is contained in:
Lactozilla 2024-06-03 03:38:06 +00:00
commit c65acbcca8
2 changed files with 20 additions and 4 deletions

View file

@ -1842,17 +1842,21 @@ static boolean check_top_dir(const char **path, const char *top)
return true; return true;
} }
static int cmp_strlen_desc(const void *a, const void *b) static int cmp_strlen_desc(const void *A, const void *B)
{ {
return ((int)strlen(*(const char*const*)b) - (int)strlen(*(const char*const*)a)); const char *pA = A;
const char *pB = B;
size_t As = strlen(pA);
size_t Bs = strlen(pB);
return ((int)Bs - (int)As);
} }
boolean D_IsPathAllowed(const char *path) boolean D_IsPathAllowed(const char *path)
{ {
const char *paths[] = { char *paths[] = {
srb2home, srb2home,
srb2path, srb2path,
cv_addons_folder.string cv_addons_folder.zstring
}; };
const size_t n_paths = sizeof paths / sizeof *paths; const size_t n_paths = sizeof paths / sizeof *paths;

View file

@ -699,6 +699,15 @@ static void initdirpath(char *dirpath, size_t *dirpathindex, int depthleft)
dirpathindex[depthleft]--; dirpathindex[depthleft]--;
} }
//sortdir by name?
static int lumpnamecompare(const void *A, const void *B)
{
const lumpinfo_t *pA = A;
const lumpinfo_t *pB = B;
return strcmp((pA->fullname), (pB->fullname));
}
lumpinfo_t *getdirectoryfiles(const char *path, UINT16 *nlmp, UINT16 *nfolders) lumpinfo_t *getdirectoryfiles(const char *path, UINT16 *nlmp, UINT16 *nfolders)
{ {
DIR **dirhandle; DIR **dirhandle;
@ -889,6 +898,9 @@ lumpinfo_t *getdirectoryfiles(const char *path, UINT16 *nlmp, UINT16 *nfolders)
free(dirpathindex); free(dirpathindex);
free(dirhandle); free(dirhandle);
//sort files and directories
qsort (lumpinfo, numlumps, sizeof(lumpinfo_t), lumpnamecompare);
(*nlmp) = numlumps; (*nlmp) = numlumps;
return lumpinfo; return lumpinfo;
} }