Improve the tempname position-keeping behaviour significantly, hammering out a potential crash bug too.

This commit is contained in:
toaster 2018-06-18 11:22:57 +01:00
parent f3baf608a2
commit 247f3e9b03
1 changed files with 28 additions and 7 deletions

View File

@ -514,14 +514,32 @@ void searchfilemenu(char *tempname)
dirmenu = NULL; dirmenu = NULL;
} }
first = (((UINT8)(coredirmenu[0][DIR_TYPE]) == EXT_UP) ? 1 : 0); // skip UP...
if (!menusearch[0]) if (!menusearch[0])
{ {
if (dirmenu) if (dirmenu)
Z_Free(dirmenu); Z_Free(dirmenu);
dirmenu = coredirmenu; dirmenu = coredirmenu;
sizedirmenu = sizecoredirmenu; sizedirmenu = sizecoredirmenu;
if (tempname) if (tempname)
{
for (i = first; i < sizedirmenu; i++)
{
if (!strcmp(dirmenu[i]+DIR_STRING, tempname))
{
dir_on[menudepthleft] = i;
break;
}
}
if (i == sizedirmenu)
dir_on[menudepthleft] = first;
Z_Free(tempname); Z_Free(tempname);
}
return; return;
} }
@ -529,8 +547,6 @@ void searchfilemenu(char *tempname)
if (!cv_addons_search_case.value) if (!cv_addons_search_case.value)
strupr(localmenusearch); strupr(localmenusearch);
first = (((UINT8)(coredirmenu[0][DIR_TYPE]) == EXT_UP) ? 1 : 0); // skip UP...
sizedirmenu = 0; sizedirmenu = 0;
for (i = first; i < sizecoredirmenu; i++) for (i = first; i < sizecoredirmenu; i++)
{ {
@ -544,6 +560,7 @@ void searchfilemenu(char *tempname)
|| !(dirmenu[0] = Z_StrDup(va("%c\13No results...", EXT_NORESULTS)))) || !(dirmenu[0] = Z_StrDup(va("%c\13No results...", EXT_NORESULTS))))
I_Error("Ran out of memory whilst preparing add-ons menu"); I_Error("Ran out of memory whilst preparing add-ons menu");
sizedirmenu = 1; sizedirmenu = 1;
dir_on[menudepthleft] = 0;
if (tempname) if (tempname)
Z_Free(tempname); Z_Free(tempname);
return; return;
@ -557,17 +574,21 @@ void searchfilemenu(char *tempname)
{ {
if (filemenucmp(coredirmenu[i]+DIR_STRING, localmenusearch)) if (filemenucmp(coredirmenu[i]+DIR_STRING, localmenusearch))
{ {
dirmenu[sizedirmenu++] = coredirmenu[i]; // pointer reuse
if (tempname && !strcmp(coredirmenu[i]+DIR_STRING, tempname)) if (tempname && !strcmp(coredirmenu[i]+DIR_STRING, tempname))
dir_on[menudepthleft] = i; {
dir_on[menudepthleft] = sizedirmenu;
Z_Free(tempname);
tempname = NULL;
}
dirmenu[sizedirmenu++] = coredirmenu[i]; // pointer reuse
} }
} }
if (dir_on[menudepthleft] >= sizedirmenu)
dir_on[menudepthleft] = sizedirmenu-1;
if (tempname) if (tempname)
{
dir_on[menudepthleft] = first;
Z_Free(tempname); Z_Free(tempname);
}
} }
boolean preparefilemenu(boolean samedepth) boolean preparefilemenu(boolean samedepth)