Improve the tempname position-keeping behaviour significantly, hammering out a potential crash bug too.
This commit is contained in:
parent
f3baf608a2
commit
247f3e9b03
|
@ -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,18 +574,22 @@ 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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue