]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - common.c
move two #defined to quakedef.h, and always include quakedef.h first before any other...
[xonotic/darkplaces.git] / common.c
index cfeda8912e415047ba861a3e5a4b05446c8491e2..42511e494bff671e8d094886b3ae8d5e640b2217 100644 (file)
--- a/common.c
+++ b/common.c
@@ -19,14 +19,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 // common.c -- misc functions used in client and server
 
+#include "quakedef.h"
+
 #include <stdlib.h>
 #include <fcntl.h>
 #ifndef WIN32
 #include <unistd.h>
 #endif
 
-#include "quakedef.h"
-
 cvar_t registered = {0, "registered","0", "indicates if this is running registered quake (whether gfx/pop.lmp was found)"};
 cvar_t cmdline = {0, "cmdline","0", "contains commandline the engine was launched with"};
 
@@ -334,7 +334,7 @@ void MSG_WriteCoord32f (sizebuf_t *sb, float f)
 
 void MSG_WriteCoord (sizebuf_t *sb, float f, protocolversion_t protocol)
 {
-       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_QUAKEWORLD)
+       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_NEHAHRABJP || protocol == PROTOCOL_NEHAHRABJP2 || protocol == PROTOCOL_NEHAHRABJP3 || protocol == PROTOCOL_QUAKEWORLD)
                MSG_WriteCoord13i (sb, f);
        else if (protocol == PROTOCOL_DARKPLACES1)
                MSG_WriteCoord32f (sb, f);
@@ -375,7 +375,7 @@ void MSG_WriteAngle32f (sizebuf_t *sb, float f)
 
 void MSG_WriteAngle (sizebuf_t *sb, float f, protocolversion_t protocol)
 {
-       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_DARKPLACES1 || protocol == PROTOCOL_DARKPLACES2 || protocol == PROTOCOL_DARKPLACES3 || protocol == PROTOCOL_DARKPLACES4 || protocol == PROTOCOL_QUAKEWORLD)
+       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_NEHAHRABJP || protocol == PROTOCOL_NEHAHRABJP2 || protocol == PROTOCOL_NEHAHRABJP3 || protocol == PROTOCOL_DARKPLACES1 || protocol == PROTOCOL_DARKPLACES2 || protocol == PROTOCOL_DARKPLACES3 || protocol == PROTOCOL_DARKPLACES4 || protocol == PROTOCOL_QUAKEWORLD)
                MSG_WriteAngle8i (sb, f);
        else
                MSG_WriteAngle16i (sb, f);
@@ -506,7 +506,7 @@ float MSG_ReadCoord32f (void)
 
 float MSG_ReadCoord (protocolversion_t protocol)
 {
-       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_QUAKEWORLD)
+       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_NEHAHRABJP || protocol == PROTOCOL_NEHAHRABJP2 || protocol == PROTOCOL_NEHAHRABJP3 || protocol == PROTOCOL_QUAKEWORLD)
                return MSG_ReadCoord13i();
        else if (protocol == PROTOCOL_DARKPLACES1)
                return MSG_ReadCoord32f();
@@ -541,7 +541,7 @@ float MSG_ReadAngle32f (void)
 
 float MSG_ReadAngle (protocolversion_t protocol)
 {
-       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_DARKPLACES1 || protocol == PROTOCOL_DARKPLACES2 || protocol == PROTOCOL_DARKPLACES3 || protocol == PROTOCOL_DARKPLACES4 || protocol == PROTOCOL_QUAKEWORLD)
+       if (protocol == PROTOCOL_QUAKE || protocol == PROTOCOL_QUAKEDP || protocol == PROTOCOL_NEHAHRAMOVIE || protocol == PROTOCOL_NEHAHRABJP || protocol == PROTOCOL_NEHAHRABJP2 || protocol == PROTOCOL_NEHAHRABJP3 || protocol == PROTOCOL_DARKPLACES1 || protocol == PROTOCOL_DARKPLACES2 || protocol == PROTOCOL_DARKPLACES3 || protocol == PROTOCOL_DARKPLACES4 || protocol == PROTOCOL_QUAKEWORLD)
                return MSG_ReadAngle8i ();
        else
                return MSG_ReadAngle16i ();
@@ -670,7 +670,7 @@ COM_ParseToken_Simple
 Parse a token out of a string
 ==============
 */
-int COM_ParseToken_Simple(const char **datapointer, int returnnewline)
+int COM_ParseToken_Simple(const char **datapointer, qboolean returnnewline, qboolean parsebackslash)
 {
        int len;
        int c;
@@ -727,16 +727,10 @@ skipwhite:
        else if (*data == '\"')
        {
                // quoted string
-               for (data++;*data != '\"';data++)
+               for (data++;*data && *data != '\"';data++)
                {
-                       if (!*data || len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
                        c = *data;
-                       if (*data == '\\')
+                       if (*data == '\\' && parsebackslash)
                        {
                                data++;
                                c = *data;
@@ -745,10 +739,13 @@ skipwhite:
                                else if (c == 't')
                                        c = '\t';
                        }
-                       com_token[len++] = c;
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = c;
                }
                com_token[len] = 0;
-               *datapointer = data+1;
+               if (*data == '\"')
+                       data++;
+               *datapointer = data;
                return true;
        }
        else if (*data == '\r')
@@ -771,15 +768,8 @@ skipwhite:
        {
                // regular word
                for (;*data > ' ';data++)
-               {
-                       if (len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
-                       com_token[len++] = *data;
-               }
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = *data;
                com_token[len] = 0;
                *datapointer = data;
                return true;
@@ -793,7 +783,7 @@ COM_ParseToken_QuakeC
 Parse a token out of a string
 ==============
 */
-int COM_ParseToken_QuakeC(const char **datapointer, int returnnewline)
+int COM_ParseToken_QuakeC(const char **datapointer, qboolean returnnewline)
 {
        int len;
        int c;
@@ -851,14 +841,8 @@ skipwhite:
        {
                // quoted string
                char quote = *data;
-               for (data++;*data != quote;data++)
+               for (data++;*data && *data != quote;data++)
                {
-                       if (!*data || len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
                        c = *data;
                        if (*data == '\\')
                        {
@@ -869,10 +853,13 @@ skipwhite:
                                else if (c == 't')
                                        c = '\t';
                        }
-                       com_token[len++] = c;
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = c;
                }
                com_token[len] = 0;
-               *datapointer = data+1;
+               if (*data == quote)
+                       data++;
+               *datapointer = data;
                return true;
        }
        else if (*data == '\r')
@@ -895,15 +882,8 @@ skipwhite:
        {
                // regular word
                for (;*data > ' ' && *data != '{' && *data != '}' && *data != ')' && *data != '(' && *data != ']' && *data != '[' && *data != ':' && *data != ',' && *data != ';';data++)
-               {
-                       if (len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
-                       com_token[len++] = *data;
-               }
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = *data;
                com_token[len] = 0;
                *datapointer = data;
                return true;
@@ -917,7 +897,7 @@ COM_ParseToken_VM_Tokenize
 Parse a token out of a string
 ==============
 */
-int COM_ParseToken_VM_Tokenize(const char **datapointer, int returnnewline)
+int COM_ParseToken_VM_Tokenize(const char **datapointer, qboolean returnnewline)
 {
        int len;
        int c;
@@ -975,14 +955,8 @@ skipwhite:
        {
                char quote = *data;
                // quoted string
-               for (data++;*data != quote;data++)
+               for (data++;*data && *data != quote;data++)
                {
-                       if (!*data || len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
                        c = *data;
                        if (*data == '\\')
                        {
@@ -993,10 +967,13 @@ skipwhite:
                                else if (c == 't')
                                        c = '\t';
                        }
-                       com_token[len++] = c;
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = c;
                }
                com_token[len] = 0;
-               *datapointer = data+1;
+               if (*data == quote)
+                       data++;
+               *datapointer = data;
                return true;
        }
        else if (*data == '\r')
@@ -1007,7 +984,7 @@ skipwhite:
                *datapointer = data;
                return true;
        }
-       else if (*data == '\n' || *data == ',' || *data == ';')
+       else if (*data == '\n' || *data == '{' || *data == '}' || *data == ')' || *data == '(' || *data == ']' || *data == '[' || *data == ':' || *data == ',' || *data == ';')
        {
                // single character
                com_token[len++] = *data++;
@@ -1018,16 +995,9 @@ skipwhite:
        else
        {
                // regular word
-               for (;*data > ' ' && *data != ',' && *data != ';';data++)
-               {
-                       if (len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
-                       com_token[len++] = *data;
-               }
+               for (;*data > ' ' && *data != ',' && *data != ';' && *data != '{' && *data != '}' && *data != ')' && *data != '(' && *data != ']' && *data != '[' && *data != ':' && *data != ',' && *data != ';';data++)
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = *data;
                com_token[len] = 0;
                *datapointer = data;
                return true;
@@ -1077,35 +1047,25 @@ skipwhite:
        else if (*data == '\"')
        {
                // quoted string
-               for (data++;*data != '\"';data++)
+               for (data++;*data && *data != '\"';data++)
                {
-                       if (!*data || len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
-                       // allow escaped " case
-                       if (*data == '\\' && data[1] == '\"')
+                       // allow escaped " and \ case
+                       if (*data == '\\' && (data[1] == '\"' || data[1] == '\\'))
                                data++;
-                       com_token[len++] = *data;
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = *data;
                }
                com_token[len] = 0;
-               *datapointer = data+1;
+               if (*data == '\"')
+                       data++;
+               *datapointer = data;
        }
        else
        {
                // regular word
                for (;*data > ' ';data++)
-               {
-                       if (len >= (int)sizeof(com_token) - 1)
-                       {
-                               com_token[0] = 0;
-                               *datapointer = NULL;
-                               return false;
-                       }
-                       com_token[len++] = *data;
-               }
+                       if (len < (int)sizeof(com_token) - 1)
+                               com_token[len++] = *data;
                com_token[len] = 0;
                *datapointer = data;
        }