Add myargmalloc boolean to detect whether we allocated myargv ourselves or not, so we don't free myargv if we didn't

This commit is contained in:
Monster Iestyn 2018-11-23 19:12:48 +00:00
parent fe43deacec
commit 08af33c51f
5 changed files with 12 additions and 3 deletions

View File

@ -25,6 +25,10 @@ INT32 myargc;
*/
char **myargv;
/** \brief did we alloc myargv ourselves?
*/
boolean myargmalloc = false;
/** \brief founded the parm
*/
static INT32 found;
@ -176,6 +180,7 @@ void M_FindResponseFile(void)
free(file);
I_Error("Not enough memory to read response file");
}
myargmalloc = true; // mark as having been allocated by us
memset(myargv, 0, sizeof (char *) * MAXARGVS);
myargv[0] = firstargv;

View File

@ -19,6 +19,7 @@
//
extern INT32 myargc;
extern char **myargv;
extern boolean myargmalloc;
// Returns the position of the given parameter in the arg list (0 if not found).
INT32 M_CheckParm(const char *check);

View File

@ -2139,7 +2139,8 @@ void I_Quit(void)
printf("\r");
ShowEndTxt();
}
free(myargv); // Deallocate allocated memory
if (myargmalloc)
free(myargv); // Deallocate allocated memory
death:
W_Shutdown();
exit(0);

View File

@ -2301,7 +2301,8 @@ void I_Quit(void)
printf("\r");
ShowEndTxt();
}
free(myargv); // Deallocate allocated memory
if (myargmalloc)
free(myargv); // Deallocate allocated memory
death:
W_Shutdown();
#ifdef GP2X

View File

@ -771,7 +771,8 @@ void I_Quit(void)
ShowEndTxt(co);
}
fflush(stderr);
free(myargv); // Deallocate allocated memory
if (myargmalloc)
free(myargv); // Deallocate allocated memory
W_Shutdown();
exit(0);
}