]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cmd.c
fix rtlights cubemapname load/save
[xonotic/darkplaces.git] / cmd.c
diff --git a/cmd.c b/cmd.c
index 79f9137b340fca094f46741a66d385141a76726e..47a4692848f7363e2c4c3c89c6a697013a5d2c14 100644 (file)
--- a/cmd.c
+++ b/cmd.c
@@ -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);
 }
@@ -552,7 +552,7 @@ static void Cmd_TokenizeString (const char *text)
                if (cmd_argc == 1)
                         cmd_args = text;
 
-               if (!COM_ParseToken(&text, false))
+               if (!COM_ParseTokenConsole(&text))
                        return;
 
                if (cmd_argc < MAX_ARGS)
@@ -809,30 +809,36 @@ 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 ())
+// check cvars (always)
+       if (!Cvar_Command () && host_initialized)
                Con_Printf ("Unknown command \"%s\"\n", Cmd_Argv(0));
 
        cmd_tokenizebufferpos = oldpos;
@@ -848,6 +854,7 @@ Sends the entire command line over to the server
 */
 void Cmd_ForwardToServer (void)
 {
+       char *s;
        if (cls.state != ca_connected)
        {
                Con_Printf ("Can't \"%s\", not connected\n", Cmd_Argv(0));
@@ -857,16 +864,15 @@ void Cmd_ForwardToServer (void)
        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 = va("%s", Cmd_Argc() > 1 ? Cmd_Args() : "\n");
+       MSG_WriteByte(&cls.message, clc_stringcmd);
+       SZ_Write(&cls.message, s, strlen(s) + 1);
 }