]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - common.c
now loads each cubemap only once, no matter how many lights use it
[xonotic/darkplaces.git] / common.c
index 95043325e40be71f476bcb99c8220018dee5c347..8af5518b1ef3e0ac9baff0a141ad3706d294cd2d 100644 (file)
--- a/common.c
+++ b/common.c
@@ -500,7 +500,6 @@ Parse a token out of a string
 */
 int COM_ParseToken(const char **datapointer, int returnnewline)
 {
-       int c;
        int len;
        const char *data = *datapointer;
 
@@ -515,79 +514,74 @@ int COM_ParseToken(const char **datapointer, int returnnewline)
 
 // skip whitespace
 skipwhite:
-       while ((c = *data) <= ' ' && (c != '\n' || !returnnewline))
+       for (;*data <= ' ' && (*data != '\n' || !returnnewline);data++)
        {
-               if (c == 0)
+               if (*data == 0)
                {
                        // end of file
                        *datapointer = NULL;
                        return false;
                }
-               data++;
        }
 
-       // check if it's a comment
-       if (c == '/')
+       if (data[0] == '/' && data[1] == '/')
        {
-               // skip // comments
-               if (data[1] == '/')
-               {
-                       while (*data && *data != '\n')
-                               data++;
-                       goto skipwhite;
-               }
-               // skip /* comments
-               if (data[1] == '*')
-               {
-                       while (*data && (*data != '*' || data[1] != '/'))
-                               data++;
-                       data+=2;
-                       goto skipwhite;
-               }
+               // comment
+               while (*data && *data != '\n')
+                       data++;
+               goto skipwhite;
        }
-
-// handle quoted strings specially
-       if (c == '\"')
+       else if (data[0] == '/' && data[1] == '*')
        {
+               // comment
                data++;
-               while (1)
+               while (*data && (data[0] != '*' || data[1] != '/'))
+                       data++;
+               data += 2;
+               goto skipwhite;
+       }
+       else if (*data == '\"')
+       {
+               // quoted string
+               for (data++;*data != '\"';data++)
                {
-                       c = *data++;
-                       if (c == '\"' || !c)
+                       if (!*data || len >= (int)sizeof(com_token) - 1)
                        {
-                               com_token[len] = 0;
-                               *datapointer = data;
-                               return true;
+                               com_token[0] = 0;
+                               *datapointer = NULL;
+                               return false;
                        }
-                       com_token[len] = c;
-                       len++;
+                       com_token[len++] = *data;
                }
+               com_token[len] = 0;
+               *datapointer = data+1;
+               return true;
        }
-
-// parse single characters
-       if (c == '{' || c == '}' || c == ')' || c == '(' || c == ']' || c == '[' || c == '\'' || c == ':' || c == ',' || c == ';' || c == '\n')
+       else if (*data == '\n' || *data == '{' || *data == '}' || *data == ')' || *data == '(' || *data == ']' || *data == '[' || *data == '\'' || *data == ':' || *data == ',' || *data == ';')
        {
-               com_token[len] = c;
-               len++;
+               // single character
+               com_token[len++] = *data++;
                com_token[len] = 0;
-               *datapointer = data+1;
+               *datapointer = data;
                return true;
        }
-
-// parse a regular word
-       do
+       else
        {
-               com_token[len] = c;
-               data++;
-               len++;
-               c = *data;
-               if (c == '{' || c == '}' || c == ')' || c == '(' || c == ']' || c == '[' || c == '\'' || c == ':' || c == ',' || c == ';')
-                       break;
-       } while (c>32);
-
-       com_token[len] = 0;
-       *datapointer = data;
-       return true;
+               // regular word
+               for (;*data > ' ' && *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;
+               }
+               com_token[len] = 0;
+               *datapointer = data;
+               return true;
+       }
 }
 
 /*
@@ -599,7 +593,6 @@ Parse a token out of a string, behaving like the qwcl console
 */
 int COM_ParseTokenConsole(const char **datapointer)
 {
-       int c;
        int len;
        const char *data = *datapointer;
 
@@ -614,55 +607,57 @@ int COM_ParseTokenConsole(const char **datapointer)
 
 // skip whitespace
 skipwhite:
-       while ((c = *data) <= ' ')
+       for (;*data <= ' ';data++)
        {
-               if (c == 0)
+               if (*data == 0)
                {
                        // end of file
                        *datapointer = NULL;
                        return false;
                }
-               data++;
        }
 
-       // skip // comments
-       if (c == '/' && data[1] == '/')
+       if (*data == '/' && data[1] == '/')
        {
+               // comment
                while (*data && *data != '\n')
                        data++;
                goto skipwhite;
        }
-
-// handle quoted strings specially
-       if (c == '\"')
+       else if (*data == '\"')
        {
-               data++;
-               while (1)
+               // quoted string
+               for (data++;*data != '\"';data++)
                {
-                       c = *data++;
-                       if (c == '\"' || !c)
+                       if (!*data || len >= (int)sizeof(com_token) - 1)
                        {
-                               com_token[len] = 0;
-                               *datapointer = data;
-                               return true;
+                               com_token[0] = 0;
+                               *datapointer = NULL;
+                               return false;
                        }
-                       com_token[len] = c;
-                       len++;
+                       com_token[len++] = *data;
                }
+               com_token[len] = 0;
+               *datapointer = data+1;
+               return true;
        }
-
-// parse a regular word
-       do
+       else
        {
-               com_token[len] = c;
-               data++;
-               len++;
-               c = *data;
-       } while (c>32);
-
-       com_token[len] = 0;
-       *datapointer = data;
-       return true;
+               // regular word
+               for (;*data > ' ';data++)
+               {
+                       if (len >= (int)sizeof(com_token) - 1)
+                       {
+                               com_token[0] = 0;
+                               *datapointer = NULL;
+                               return false;
+                       }
+                       com_token[len++] = *data;
+               }
+               com_token[len] = 0;
+               *datapointer = data;
+               return true;
+       }
 }
 
 
@@ -824,7 +819,7 @@ void COM_InitGameType (void)
                break;
        case GAME_TRANSFUSION:
                gamename = "Transfusion";
-               gamedirname = "transfusion";
+               gamedirname = "basetf";
                break;
        case GAME_GOODVSBAD2:
                gamename = "GoodVs.Bad2";
@@ -1120,9 +1115,7 @@ char *SearchInfostring(const char *infostring, const char *key)
 /*     $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $     */
 
 
-// Most (all?) BSDs already have them
-#if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__) && !(defined(__APPLE__) && defined(__MACH__))
-
+#ifndef HAVE_STRLCAT
 size_t
 strlcat(char *dst, const char *src, size_t siz)
 {
@@ -1150,7 +1143,10 @@ strlcat(char *dst, const char *src, size_t siz)
 
        return(dlen + (s - src));       /* count does not include NUL */
 }
+#endif  // #ifndef HAVE_STRLCAT
+
 
+#ifndef HAVE_STRLCPY
 size_t
 strlcpy(char *dst, const char *src, size_t siz)
 {
@@ -1177,4 +1173,4 @@ strlcpy(char *dst, const char *src, size_t siz)
        return(s - src - 1);    /* count does not include NUL */
 }
 
-#endif  // #if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__)
+#endif  // #ifndef HAVE_STRLCPY