git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@2959
d7cf8633-e32d-0410-b094-
e92efae38249
static mempool_t *cmd_mempool;
static mempool_t *cmd_mempool;
+#define CMD_TOKENIZELENGTH 4096
+static char cmd_tokenizebuffer[CMD_TOKENIZELENGTH];
+static int cmd_tokenizebufferpos = 0;
+
//=============================================================================
/*
//=============================================================================
/*
char line[1024];
int quotes;
char line[1024];
int quotes;
+ // LordHavoc: making sure the tokenizebuffer doesn't get filled up by repeated crashes
+ cmd_tokenizebufferpos = 0;
+
while (cmd_text.cursize)
{
// find a \n or ; line break
while (cmd_text.cursize)
{
// find a \n or ; line break
-#define CMD_TOKENIZELENGTH 4096
-char cmd_tokenizebuffer[CMD_TOKENIZELENGTH];
-
/*
============
Cmd_TokenizeString
/*
============
Cmd_TokenizeString
static void Cmd_TokenizeString (const char *text)
{
int l;
static void Cmd_TokenizeString (const char *text)
{
int l;
cmd_argc = 0;
cmd_args = NULL;
while (1)
{
cmd_argc = 0;
cmd_args = NULL;
while (1)
{
-// skip whitespace up to a /n
+ // skip whitespace up to a /n
while (*text && *text <= ' ' && *text != '\n')
while (*text && *text <= ' ' && *text != '\n')
- { // a newline seperates commands in the buffer
+ {
+ // a newline seperates commands in the buffer
if (cmd_argc < MAX_ARGS)
{
l = strlen(com_token) + 1;
if (cmd_argc < MAX_ARGS)
{
l = strlen(com_token) + 1;
- if (pos + l > CMD_TOKENIZELENGTH)
+ if (cmd_tokenizebufferpos + l > CMD_TOKENIZELENGTH)
Sys_Error("Cmd_TokenizeString: ran out of %i character buffer space for command arguements\n", CMD_TOKENIZELENGTH);
Sys_Error("Cmd_TokenizeString: ran out of %i character buffer space for command arguements\n", CMD_TOKENIZELENGTH);
- strcpy (cmd_tokenizebuffer + pos, com_token);
- cmd_argv[cmd_argc] = cmd_tokenizebuffer + pos;
- pos += l;
+ strcpy (cmd_tokenizebuffer + cmd_tokenizebufferpos, com_token);
+ cmd_argv[cmd_argc] = cmd_tokenizebuffer + cmd_tokenizebufferpos;
+ cmd_tokenizebufferpos += l;
*/
void Cmd_ExecuteString (const char *text, cmd_source_t src)
{
*/
void Cmd_ExecuteString (const char *text, cmd_source_t src)
{
cmd_function_t *cmd;
cmdalias_t *a;
cmd_function_t *cmd;
cmdalias_t *a;
+ oldpos = cmd_tokenizebufferpos;
cmd_source = src;
Cmd_TokenizeString (text);
// execute the command line
if (!Cmd_Argc())
cmd_source = src;
Cmd_TokenizeString (text);
// execute the command line
if (!Cmd_Argc())
+ {
+ cmd_tokenizebufferpos = oldpos;
// check functions
for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
// check functions
for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
if (!strcasecmp (cmd_argv[0],cmd->name))
{
cmd->function ();
if (!strcasecmp (cmd_argv[0],cmd->name))
{
cmd->function ();
+ cmd_tokenizebufferpos = oldpos;
if (!strcasecmp (cmd_argv[0], a->name))
{
Cbuf_InsertText (a->value);
if (!strcasecmp (cmd_argv[0], a->name))
{
Cbuf_InsertText (a->value);
+ cmd_tokenizebufferpos = oldpos;
// check cvars
if (!Cvar_Command ())
Con_Printf ("Unknown command \"%s\"\n", Cmd_Argv(0));
// check cvars
if (!Cvar_Command ())
Con_Printf ("Unknown command \"%s\"\n", Cmd_Argv(0));
+
+ cmd_tokenizebufferpos = oldpos;