Fix menuitem memory leaks
This commit is contained in:
parent
b7bdd2ff6f
commit
83cfe66219
3 changed files with 20 additions and 22 deletions
|
|
@ -1977,14 +1977,20 @@ static void readmenuitem(MYFILE *f, menuitem_t *menuitem)
|
|||
}
|
||||
else if (fastcmp(word, "TEXT"))
|
||||
{
|
||||
if (menuitem->text)
|
||||
Z_Free(menuitem->text);
|
||||
menuitem->text = Z_StrDup(word2);
|
||||
}
|
||||
else if (fastcmp(word, "PATCH"))
|
||||
{
|
||||
if (menuitem->patch)
|
||||
Z_Free(menuitem->patch);
|
||||
menuitem->patch = Z_StrDup(word2);
|
||||
}
|
||||
else if (fastcmp(word, "TOOLTIP"))
|
||||
{
|
||||
if (menuitem->tooltip)
|
||||
Z_Free(menuitem->tooltip);
|
||||
menuitem->tooltip = Z_StrDup(word2);
|
||||
}
|
||||
else if (fastcmp(word, "STYLE"))
|
||||
|
|
@ -2271,6 +2277,8 @@ void readmenu(MYFILE *f, INT32 num)
|
|||
// MENUDEF STARTS HERE
|
||||
else if (fastcmp(word, "HEADERPIC"))
|
||||
{
|
||||
if (menudef->headerpic)
|
||||
Z_Free(menudef->headerpic);
|
||||
menudef->headerpic = Z_StrDup(word2);
|
||||
}
|
||||
else if (fastcmp(word, "DRAWROUTINE"))
|
||||
|
|
|
|||
32
src/m_menu.c
32
src/m_menu.c
|
|
@ -266,7 +266,6 @@ static INT16 M_GetMenuIndex(menutype_t type, const char *name)
|
|||
#define M_SetItemArgument(t, n, v) (M_GetMenuItem(t, n)->argument = v)
|
||||
#define M_SetItemX(t, n, v) (M_GetMenuItem(t, n)->x = v)
|
||||
#define M_SetItemY(t, n, v) (M_GetMenuItem(t, n)->y = v)
|
||||
#define M_SetItemText(t, n, s) (M_GetMenuItem(t, n)->text = s)
|
||||
#define M_GetItemX(t, n) (M_GetMenuItem(t, n)->x)
|
||||
#define M_GetItemY(t, n) (M_GetMenuItem(t, n)->y)
|
||||
|
||||
|
|
@ -278,6 +277,14 @@ static void M_ChangeItemStatus(menutype_t type, const char *name, menuitemflags_
|
|||
M_GetMenuItem(type, name)->status &= ~flag;
|
||||
}
|
||||
|
||||
static void M_SetItemText(menutype_t type, const char *name, const char *string)
|
||||
{
|
||||
menuitem_t *item = M_GetMenuItem(type, name);
|
||||
if (item->text)
|
||||
Z_Free(item->text);
|
||||
item->text = Z_StrDup(string);
|
||||
}
|
||||
|
||||
#define M_SetItemVisible(t, n, c) M_ChangeItemStatus(t, n, IT_HIDDEN, !(c))
|
||||
#define M_SetItemDisabled(t, n, c) M_ChangeItemStatus(t, n, IT_GRAYEDOUT, c)
|
||||
#define M_SetItemSecret(t, n, c) M_ChangeItemStatus(t, n, IT_SECRET, c)
|
||||
|
|
@ -8000,10 +8007,6 @@ INT32 MR_HandleMonitorToggles(INT32 choice)
|
|||
return true;
|
||||
}
|
||||
|
||||
static char *serveraddon = NULL;
|
||||
static char *serverping = NULL;
|
||||
static char *servergametype = NULL;
|
||||
|
||||
INT32 MR_EnterViewServer(INT32 choice)
|
||||
{
|
||||
(void)choice;
|
||||
|
|
@ -8013,16 +8016,6 @@ INT32 MR_EnterViewServer(INT32 choice)
|
|||
UINT32 ping = serverlist[joinnode].info.time;
|
||||
UINT8 kartvars = serverlist[joinnode].info.kartvars;
|
||||
|
||||
if (serveraddon)
|
||||
Z_Free(serveraddon);
|
||||
if (serverping)
|
||||
Z_Free(serverping);
|
||||
if (servergametype)
|
||||
Z_Free(servergametype);
|
||||
|
||||
serveraddon = zva(PU_STATIC, NULL, "\x82%d Addon%s", fileneedednum, fileneedednum > 1 ? "s" : "");
|
||||
serverping = zva(PU_STATIC, NULL, "Ping: %c%ums", (ping < 128 ? '\x83' : (ping < 256 ? '\x82' : '\x85')), ping);
|
||||
|
||||
switch (kartvars & SV_SPEEDMASK)
|
||||
{
|
||||
case KARTSPEED_EASY:
|
||||
|
|
@ -8036,18 +8029,15 @@ INT32 MR_EnterViewServer(INT32 choice)
|
|||
break;
|
||||
}
|
||||
|
||||
servergametype = zva(PU_STATIC, NULL, "%s: %s", serverlist[joinnode].info.gametypename, speedstring);
|
||||
|
||||
|
||||
M_SetItemArgument(MN_VIEWSERVER, "THUMBNAIL", G_LevelTitleToMapNum(serverlist[joinnode].info.maptitle));
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERNAME", servername);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERPING", serverping);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERPING", va("Ping: %c%ums", ping < 128 ? '\x83' : ping < 256 ? '\x82' : '\x85', ping));
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERMAP", servermap);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERGAMETYPE", servergametype);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERGAMETYPE", va("%s: %s", serverlist[joinnode].info.gametypename, speedstring));
|
||||
|
||||
if (fileneedednum > 0)
|
||||
{
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERADDON", serveraddon);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERADDON", va("\x82%d Addon%s", fileneedednum, fileneedednum > 1 ? "s" : ""));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -187,7 +187,7 @@ struct menuitem_t
|
|||
struct menu_t
|
||||
{
|
||||
dehinfo_t info;
|
||||
const char *headerpic;
|
||||
char *headerpic;
|
||||
INT16 numitems; // # of menu items
|
||||
menuitem_t *menuitems; // menu items
|
||||
menudrawer_f *drawroutine; // draw routine
|
||||
|
|
|
|||
Loading…
Reference in a new issue