]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_parse.c
Options menu has a width of 320, not 640
[xonotic/darkplaces.git] / cl_parse.c
index 38de3397371a68e4c877cb6478c2139ced42c77c..9095337523c72768012e9046beb604c2653a9e2f 100644 (file)
@@ -230,14 +230,14 @@ void CL_ParseEntityLump(char *entdata)
                if (com_token[0] == '}')
                        break; // end of worldspawn
                if (com_token[0] == '_')
-                       strcpy(key, com_token + 1);
+                       strlcpy (key, com_token + 1, sizeof (key));
                else
-                       strcpy(key, com_token);
+                       strlcpy (key, com_token, sizeof (key));
                while (key[strlen(key)-1] == ' ') // remove trailing spaces
                        key[strlen(key)-1] = 0;
                if (!COM_ParseToken(&data, false))
                        return; // error
-               strcpy(value, com_token);
+               strlcpy (value, com_token, sizeof (value));
                if (!strcmp("sky", key))
                        R_SetSkyBox(value);
                else if (!strcmp("skyname", key)) // non-standard, introduced by QuakeForge... sigh.
@@ -354,7 +354,7 @@ void CL_ParseServerInfo (void)
 
 // parse signon message
        str = MSG_ReadString ();
-       strncpy (cl.levelname, str, sizeof(cl.levelname)-1);
+       strlcpy (cl.levelname, str, sizeof(cl.levelname));
 
 // seperate the printfs so the server message can have a color
        if (cl.protocol != PROTOCOL_NEHAHRAMOVIE) // no messages when playing the Nehahra movie
@@ -382,7 +382,7 @@ void CL_ParseServerInfo (void)
                        Host_Error ("Server sent too many model precaches\n");
                if (strlen(str) >= MAX_QPATH)
                        Host_Error ("Server sent a precache name of %i characters (max %i)", strlen(str), MAX_QPATH - 1);
-               strcpy(parse_model_precache[nummodels], str);
+               strlcpy (parse_model_precache[nummodels], str, sizeof (parse_model_precache[nummodels]));
        }
        // parse sound precache list
        for (numsounds=1 ; ; numsounds++)
@@ -394,7 +394,7 @@ void CL_ParseServerInfo (void)
                        Host_Error("Server sent too many sound precaches\n");
                if (strlen(str) >= MAX_QPATH)
                        Host_Error("Server sent a precache name of %i characters (max %i)", strlen(str), MAX_QPATH - 1);
-               strcpy(parse_sound_precache[numsounds], str);
+               strlcpy (parse_sound_precache[numsounds], str, sizeof (parse_sound_precache[numsounds]));
        }
 
        // touch all of the precached models that are still loaded so we can free
@@ -809,9 +809,13 @@ void CL_ParseClientdata (int bits)
        i = MSG_ReadByte ();
 
        if (gamemode == GAME_HIPNOTIC || gamemode == GAME_ROGUE)
-               cl.stats[STAT_ACTIVEWEAPON] = (1<<i);
-       else
-               cl.stats[STAT_ACTIVEWEAPON] = i;
+               i = (1<<i);
+       // GAME_NEXUIZ hud needs weapon change time
+       // GAME_NEXUIZ uses a bit number as it's STAT_ACTIVEWEAPON, not a bitfield
+       // like other modes
+       if (cl.stats[STAT_ACTIVEWEAPON] != i)
+               cl.weapontime = cl.time;
+       cl.stats[STAT_ACTIVEWEAPON] = i;
 
        cl.viewzoomold = cl.viewzoomnew; // for interpolation
        if (bits & SU_VIEWZOOM)
@@ -1454,7 +1458,7 @@ void CL_ParseServerMessage(void)
                        {
                                char description[32*64], temp[64];
                                int count;
-                               strcpy(description, "packet dump: ");
+                               strcpy (description, "packet dump: ");
                                i = cmdcount - 32;
                                if (i < 0)
                                        i = 0;
@@ -1462,8 +1466,8 @@ void CL_ParseServerMessage(void)
                                i &= 31;
                                while(count > 0)
                                {
-                                       sprintf(temp, "%3i:%s ", cmdlog[i], cmdlogname[i]);
-                                       strcat(description, temp);
+                                       snprintf (temp, sizeof (temp), "%3i:%s ", cmdlog[i], cmdlogname[i]);
+                                       strlcat (description, temp, sizeof (description));
                                        count--;
                                        i++;
                                        i &= 31;
@@ -1547,7 +1551,7 @@ void CL_ParseServerMessage(void)
                        i = MSG_ReadByte ();
                        if (i >= MAX_LIGHTSTYLES)
                                Host_Error ("svc_lightstyle >= MAX_LIGHTSTYLES");
-                       strncpy (cl_lightstyle[i].map,  MSG_ReadString(), MAX_STYLESTRING - 1);
+                       strlcpy (cl_lightstyle[i].map,  MSG_ReadString(), sizeof (cl_lightstyle[i].map));
                        cl_lightstyle[i].map[MAX_STYLESTRING - 1] = 0;
                        cl_lightstyle[i].length = strlen(cl_lightstyle[i].map);
                        break;
@@ -1569,7 +1573,7 @@ void CL_ParseServerMessage(void)
                        i = MSG_ReadByte ();
                        if (i >= cl.maxclients)
                                Host_Error ("CL_ParseServerMessage: svc_updatename >= cl.maxclients");
-                       strcpy (cl.scores[i].name, MSG_ReadString ());
+                       strlcpy (cl.scores[i].name, MSG_ReadString (), sizeof (cl.scores[i].name));
                        break;
 
                case svc_updatefrags: