Added a mempool parameter to FS_LoadFile
[xonotic/darkplaces.git] / cmd.c
diff --git a/cmd.c b/cmd.c
index 169f9ef..acba139 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -93,7 +93,7 @@ void Cbuf_AddText (const char *text)
 
        if (cmd_text.cursize + l >= cmd_text.maxsize)
        {
-               Con_Print("Cbuf_AddText: overflow\n");
+               Con_Print("Cbuf_AddText: overflow\n");
                return;
        }
 
@@ -164,7 +164,7 @@ void Cbuf_Execute (void)
                                quotes++;
                        if ( !(quotes&1) &&  text[i] == ';')
                                break;  // don't break if inside a quoted string
-                       if (text[i] == '\n')
+                       if (text[i] == '\r' || text[i] == '\n')
                                break;
                }
 
@@ -181,7 +181,7 @@ void Cbuf_Execute (void)
                {
                        i++;
                        cmd_text.cursize -= i;
-                       memcpy (text, text+i, cmd_text.cursize);
+                       memcpy (cmd_text.data, text+i, cmd_text.cursize);
                }
 
 // execute the command line
@@ -222,7 +222,7 @@ void Cmd_StuffCmds_f (void)
 
        if (Cmd_Argc () != 1)
        {
-               Con_Print("stuffcmds : execute command line parameters\n");
+               Con_Print("stuffcmds : execute command line parameters\n");
                return;
        }
 
@@ -290,17 +290,17 @@ static void Cmd_Exec_f (void)
 
        if (Cmd_Argc () != 2)
        {
-               Con_Print("exec <filename> : execute a script file\n");
+               Con_Print("exec <filename> : execute a script file\n");
                return;
        }
 
-       f = (char *)FS_LoadFile (Cmd_Argv(1), false);
+       f = (char *)FS_LoadFile (Cmd_Argv(1), tempmempool, false);
        if (!f)
        {
-               Con_Printf ("couldn't exec %s\n",Cmd_Argv(1));
+               Con_Printf("couldn't exec %s\n",Cmd_Argv(1));
                return;
        }
-       Con_DPrintf ("execing %s\n",Cmd_Argv(1));
+       Con_DPrintf("execing %s\n",Cmd_Argv(1));
 
        Cbuf_InsertText (f);
        Mem_Free(f);
@@ -319,8 +319,8 @@ static void Cmd_Echo_f (void)
        int             i;
 
        for (i=1 ; i<Cmd_Argc() ; i++)
-               Con_Printf ("%s ",Cmd_Argv(i));
-       Con_Print("\n");
+               Con_Printf("%s ",Cmd_Argv(i));
+       Con_Print("\n");
 }
 
 /*
@@ -348,16 +348,16 @@ static void Cmd_Alias_f (void)
 
        if (Cmd_Argc() == 1)
        {
-               Con_Print("Current alias commands:\n");
+               Con_Print("Current alias commands:\n");
                for (a = cmd_alias ; a ; a=a->next)
-                       Con_Printf ("%s : %s\n", a->name, a->value);
+                       Con_Printf("%s : %s\n", a->name, a->value);
                return;
        }
 
        s = Cmd_Argv(1);
        if (strlen(s) >= MAX_ALIAS_NAME)
        {
-               Con_Print("Alias name is too long\n");
+               Con_Print("Alias name is too long\n");
                return;
        }
 
@@ -377,18 +377,18 @@ static void Cmd_Alias_f (void)
                a->next = cmd_alias;
                cmd_alias = a;
        }
-       strcpy (a->name, s);
+       strlcpy (a->name, s, sizeof (a->name));
 
 // copy the rest of the command line
        cmd[0] = 0;             // start out with a null string
        c = Cmd_Argc();
        for (i=2 ; i< c ; i++)
        {
-               strcat (cmd, Cmd_Argv(i));
+               strlcat (cmd, Cmd_Argv(i), sizeof (cmd));
                if (i != c)
-                       strcat (cmd, " ");
+                       strlcat (cmd, " ", sizeof (cmd));
        }
-       strcat (cmd, "\n");
+       strlcat (cmd, "\n", sizeof (cmd));
 
        a->value = CopyString (cmd);
 }
@@ -452,15 +452,15 @@ static void Cmd_List_f (void)
        {
                if (partial && strncmp(partial, cmd->name, len))
                        continue;
-               Con_Printf ("%s\n", cmd->name);
+               Con_Printf("%s\n", cmd->name);
                count++;
        }
 
-       Con_Printf ("%i Command%s", count, (count > 1) ? "s" : "");
+       Con_Printf("%i Command%s", count, (count > 1) ? "s" : "");
        if (partial)
                Con_Printf(" beginning with \"%s\"", partial);
 
-       Con_Print("\n\n");
+       Con_Print("\n\n");
 }
 
 /*
@@ -552,7 +552,7 @@ static void Cmd_TokenizeString (const char *text)
                if (cmd_argc == 1)
                         cmd_args = text;
 
-               if (!COM_ParseToken (&text))
+               if (!COM_ParseTokenConsole(&text))
                        return;
 
                if (cmd_argc < MAX_ARGS)
@@ -582,7 +582,7 @@ void Cmd_AddCommand (const char *cmd_name, xcommand_t function)
 // fail if the command is a variable name
        if (Cvar_VariableString(cmd_name)[0])
        {
-               Con_Printf ("Cmd_AddCommand: %s already defined as a var\n", cmd_name);
+               Con_Printf("Cmd_AddCommand: %s already defined as a var\n", cmd_name);
                return;
        }
 
@@ -591,7 +591,7 @@ void Cmd_AddCommand (const char *cmd_name, xcommand_t function)
        {
                if (!strcmp (cmd_name, cmd->name))
                {
-                       Con_Printf ("Cmd_AddCommand: %s already defined\n", cmd_name);
+                       Con_Printf("Cmd_AddCommand: %s already defined\n", cmd_name);
                        return;
                }
        }
@@ -809,31 +809,37 @@ void Cmd_ExecuteString (const char *text, cmd_source_t src)
                return;         // no tokens
        }
 
-// check functions
-       for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
+// check functions (only after host_initialized)
+       if (host_initialized || !strcasecmp(cmd_argv[0], "exec"))
        {
-               if (!strcasecmp (cmd_argv[0],cmd->name))
+               for (cmd=cmd_functions ; cmd ; cmd=cmd->next)
                {
-                       cmd->function ();
-                       cmd_tokenizebufferpos = oldpos;
-                       return;
+                       if (!strcasecmp (cmd_argv[0],cmd->name))
+                       {
+                               cmd->function ();
+                               cmd_tokenizebufferpos = oldpos;
+                               return;
+                       }
                }
        }
 
-// check alias
-       for (a=cmd_alias ; a ; a=a->next)
+// check alias (only after host_initialized)
+       if (host_initialized)
        {
-               if (!strcasecmp (cmd_argv[0], a->name))
+               for (a=cmd_alias ; a ; a=a->next)
                {
-                       Cbuf_InsertText (a->value);
-                       cmd_tokenizebufferpos = oldpos;
-                       return;
+                       if (!strcasecmp (cmd_argv[0], a->name))
+                       {
+                               Cbuf_InsertText (a->value);
+                               cmd_tokenizebufferpos = oldpos;
+                               return;
+                       }
                }
        }
 
-// check cvars
-       if (!Cvar_Command ())
-               Con_Printf ("Unknown command \"%s\"\n", Cmd_Argv(0));
+// check cvars (always)
+       if (!Cvar_Command () && host_initialized)
+               Con_Printf("Unknown command \"%s\"\n", Cmd_Argv(0));
 
        cmd_tokenizebufferpos = oldpos;
 }
@@ -848,25 +854,25 @@ Sends the entire command line over to the server
 */
 void Cmd_ForwardToServer (void)
 {
+       const char *s;
        if (cls.state != ca_connected)
        {
-               Con_Printf ("Can't \"%s\", not connected\n", Cmd_Argv(0));
+               Con_Printf("Can't \"%s\", not connected\n", Cmd_Argv(0));
                return;
        }
 
        if (cls.demoplayback)
                return;         // not really connected
 
-       MSG_WriteByte (&cls.message, clc_stringcmd);
+       // LordHavoc: thanks to Fuh for bringing the pure evil of SZ_Print to my
+       // attention, it has been eradicated from here, its only (former) use in
+       // all of darkplaces.
        if (strcasecmp(Cmd_Argv(0), "cmd") != 0)
-       {
-               SZ_Print (&cls.message, Cmd_Argv(0));
-               SZ_Print (&cls.message, " ");
-       }
-       if (Cmd_Argc() > 1)
-               SZ_Print (&cls.message, Cmd_Args());
+               s = va("%s %s", Cmd_Argv(0), Cmd_Argc() > 1 ? Cmd_Args() : "\n");
        else
-               SZ_Print (&cls.message, "\n");
+               s = Cmd_Argc() > 1 ? Cmd_Args() : "\n";
+       MSG_WriteByte(&cls.message, clc_stringcmd);
+       SZ_Write(&cls.message, s, strlen(s) + 1);
 }