]> git.rm.cloudns.org Git - xonotic/netradiant.git/commitdiff
q3map2 is now waring free
authorrpolzer <rpolzer@hagger.div0.qc.to>
Tue, 5 Oct 2010 08:57:07 +0000 (10:57 +0200)
committerrpolzer <rpolzer@hagger.div0.qc.to>
Tue, 5 Oct 2010 08:57:07 +0000 (10:57 +0200)
47 files changed:
libs/l_net/l_net.c
libs/l_net/l_net.h
libs/l_net/l_net_berkley.c
libs/l_net/l_net_wins.c
libs/mathlib/m4x4.c
libs/picomodel.h
libs/picomodel/lwo/envelope.c
libs/picomodel/lwo/lwio.c
libs/picomodel/lwo/lwo2.c
libs/picomodel/lwo/lwo2.h
libs/picomodel/lwo/lwob.c
libs/picomodel/picointernal.c
libs/picomodel/picointernal.h
libs/picomodel/picomodel.c
libs/picomodel/pm_3ds.c
libs/picomodel/pm_ase.c
libs/picomodel/pm_fm.c
libs/picomodel/pm_lwo.c
libs/picomodel/pm_md2.c
libs/picomodel/pm_md3.c
libs/picomodel/pm_mdc.c
libs/picomodel/pm_ms3d.c
libs/picomodel/pm_obj.c
libs/picomodel/pm_terrain.c
tools/quake3/common/cmdlib.c
tools/quake3/common/cmdlib.h
tools/quake3/common/imagelib.c
tools/quake3/common/inout.c
tools/quake3/common/unzip.c
tools/quake3/q3map2/bsp.c
tools/quake3/q3map2/game__null.h [new file with mode: 0644]
tools/quake3/q3map2/image.c
tools/quake3/q3map2/leakfile.c
tools/quake3/q3map2/light.c
tools/quake3/q3map2/light_bounce.c
tools/quake3/q3map2/light_trace.c
tools/quake3/q3map2/light_ydnar.c
tools/quake3/q3map2/lightmaps_ydnar.c
tools/quake3/q3map2/map.c
tools/quake3/q3map2/model.c
tools/quake3/q3map2/path_init.c
tools/quake3/q3map2/q3map2.h
tools/quake3/q3map2/surface.c
tools/quake3/q3map2/surface_extra.c
tools/quake3/q3map2/surface_meta.c
tools/quake3/q3map2/tjunction.c
tools/quake3/q3map2/vis.c

index 878e6a47ade6bfeb63bf25d437934954090b6354..ca730d03f22dcf5abb0d87705b8302f0c31b34a4 100644 (file)
@@ -43,7 +43,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #define qfalse 0
 
 #ifdef _DEBUG
-void WinPrint(char *str, ...)
+void WinPrint(const char *str, ...)
 {
        va_list argptr;
   char text[4096];
@@ -55,7 +55,7 @@ void WinPrint(char *str, ...)
   printf(text);
 }
 #else
-void WinPrint(char *str, ...)
+void WinPrint(const char *str, ...)
 {
 }
 #endif
@@ -323,7 +323,7 @@ void Net_Disconnect(socket_t *sock)
 // Returns:                                    -
 // Changes Globals:            -
 //===========================================================================
-void Net_StringToAddress(char *string, address_t *address)
+void Net_StringToAddress(const char *string, address_t *address)
 {
        strcpy(address->ip, string);
 } //end of the function Net_StringToAddress
@@ -620,7 +620,7 @@ char *NMSG_ReadString(netmessage_t *msg)
                if (c == 0) break;
                string[l] = c;
                l++;
-       } while (l < sizeof(string)-1);
+       } while ((size_t) l < sizeof(string)-1);
        string[l] = 0;
        return string;
 } //end of the function NMSG_ReadString
index 0009601375beedbf4d205746d548f4dc462c174b..6c548334df5baa29c99cb74ff7b928a3cbe05e87 100644 (file)
@@ -73,12 +73,14 @@ typedef struct socket_s
        struct socket_s *prev, *next;   //prev and next socket in a list
 } socket_t;
 
+void WinPrint(const char *format, ...);
+
 //compare addresses
 int Net_AddressCompare(address_t *addr1, address_t *addr2);
 //gives the address of a socket
 void Net_SocketToAddress(socket_t *sock, address_t *address);
 //converts a string to an address
-void Net_StringToAddress(char *string, address_t *address);
+void Net_StringToAddress(const char *string, address_t *address);
 //set the address ip port
 void Net_SetAddressPort(address_t *address, int port);
 //send a message to the given socket
@@ -118,7 +120,7 @@ float NMSG_ReadFloat(netmessage_t *msg);
 char *NMSG_ReadString(netmessage_t *msg);
 
 //++timo FIXME: the WINS_ things are not necessary, they can be made portable arther easily
-char *WINS_ErrorMessage(int error);
+const char *WINS_ErrorMessage(int error);
 
 #ifdef __cplusplus
 }
index 19d670b3eb982be2e24466bff9ce44ed921f823b..edc06fa145306cbfd6f6d5a1c96d399536a676ac 100644 (file)
@@ -41,8 +41,12 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include <sys/ioctl.h>
 #include <netinet/in.h>
 #include <netinet/tcp.h>
+#include <arpa/inet.h>
 #include <errno.h>
 #include <netdb.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <stdio.h>
 #define SOCKET_ERROR -1
 #define INVALID_SOCKET -1
 
@@ -112,7 +116,7 @@ ERROR_STRUCT errlist[] = {
 // Returns:                                    -
 // Changes Globals:            -
 //===========================================================================
-char *WINS_ErrorMessage(int error)
+const char *WINS_ErrorMessage(int error)
 {
     int search = 0;
 
@@ -121,7 +125,7 @@ char *WINS_ErrorMessage(int error)
         for (search = 0; errlist[search].errstr; search++)
         {
                if (error == errlist[search].errnum)
-                               return (char *)errlist[search].errstr;
+                               return errlist[search].errstr;
         } //end for
 
     return "Unknown error";
@@ -139,7 +143,6 @@ int WINS_Init(void)
        char    buff[MAXHOSTNAMELEN];
        struct sockaddr_s addr;
        char    *p;
-       int             r;
 /* 
  linux doesn't have anything to initialize for the net
  "Windows .. built for the internet .. the internet .. built with unix" 
@@ -365,7 +368,7 @@ int WINS_Listen(int socket)
 //===========================================================================
 int WINS_Accept(int socket, struct sockaddr_s *addr)
 {
-       int addrlen = sizeof (struct sockaddr_s);
+       socklen_t addrlen = sizeof (struct sockaddr_s);
        int newsocket;
        qboolean _true = 1;
 
@@ -496,7 +499,7 @@ int WINS_CheckNewConnections(void)
 //===========================================================================
 int WINS_Read(int socket, byte *buf, int len, struct sockaddr_s *addr)
 {
-       int addrlen = sizeof (struct sockaddr_s);
+       socklen_t addrlen = sizeof (struct sockaddr_s);
        int ret;
 
        if (addr)
@@ -583,6 +586,7 @@ int WINS_Broadcast (int socket, byte *buf, int len)
 int WINS_Write(int socket, byte *buf, int len, struct sockaddr_s *addr)
 {
        int ret, written;
+       ret = 0;
 
        if (addr)
        {
@@ -670,7 +674,7 @@ int WINS_StringToAddr(char *string, struct sockaddr_s *addr)
 //===========================================================================
 int WINS_GetSocketAddr(int socket, struct sockaddr_s *addr)
 {
-       int addrlen = sizeof(struct sockaddr_s);
+       socklen_t addrlen = sizeof(struct sockaddr_s);
        unsigned int a;
 
        memset(addr, 0, sizeof(struct sockaddr_s));
index faf7d88ca9e4c004dcd43b5c2083b8c57335df5c..1b365da062369e266af6da76595bc450554e1a02 100644 (file)
@@ -136,19 +136,13 @@ ERROR_STRUCT errlist[] = {
     {-1,                 NULL}
 };
 
-#ifdef _DEBUG
-void WinPrint(char *str, ...);
-#else
-void WinPrint(char *str, ...);
-#endif
-
 //===========================================================================
 //
 // Parameter:                          -
 // Returns:                                    -
 // Changes Globals:            -
 //===========================================================================
-char *WINS_ErrorMessage(int error)
+const char *WINS_ErrorMessage(int error)
 {
     int search = 0;
 
index b2c2db715490f07080078709bcf3851556dea6a4..3b11461015c5413f39462e135228cc9e4e3fd2d0 100644 (file)
@@ -1626,20 +1626,21 @@ void m4_submat( m4x4_t mr, m3x3_t mb, int i, int j )
   {
     if ( ti < i )
       idst = ti;
+    else if ( ti > i )
+      idst = ti-1;
     else
-      if ( ti > i )
-        idst = ti-1;
+      continue;
       
       for ( tj = 0; tj < 4; tj++ )
       {
         if ( tj < j )
           jdst = tj;
+        else if ( tj > j )
+          jdst = tj-1;
         else
-          if ( tj > j )
-            jdst = tj-1;
+          continue;
           
-          if ( ti != i && tj != j )
-            mb[idst*3 + jdst] = mr[ti*4 + tj ];
+        mb[idst*3 + jdst] = mr[ti*4 + tj ];
       }
   }
 }
index bb47be0aad8f95ff2e20cc9db20f19c3265d181d..1e6f8920d8807d7af3c4e31afbb0d54c51e5d9be 100644 (file)
@@ -175,16 +175,16 @@ enum
 
 /* convenience (makes it easy to add new params to the callbacks) */
 #define PM_PARAMS_CANLOAD \
-       char *fileName, const void *buffer, int bufSize
+       const char *fileName, const void *buffer, int bufSize
 
 #define PM_PARAMS_LOAD \
-       char *fileName, int frameNum, const void *buffer, int bufSize
+       const char *fileName, int frameNum, const void *buffer, int bufSize
 
 #define PM_PARAMS_CANSAVE \
        void
 
 #define PM_PARAMS_SAVE \
-       char *fileName, picoModel_t *model
+       const char *fileName, picoModel_t *model
 
 /* pico file format module structure */
 struct picoModule_s
@@ -211,13 +211,13 @@ int                                                       PicoError( void );
 
 void                                           PicoSetMallocFunc( void *(*func)( size_t ) );
 void                                           PicoSetFreeFunc( void (*func)( void* ) );
-void                                           PicoSetLoadFileFunc( void (*func)( char*, unsigned char**, int* ) );
+void                                           PicoSetLoadFileFunc( void (*func)( const char*, unsigned char**, int* ) );
 void                                           PicoSetFreeFileFunc( void (*func)( void* ) );
 void                                           PicoSetPrintFunc( void (*func)( int, const char* ) );
 
 const picoModule_t                     **PicoModuleList( int *numModules );
 
-picoModel_t                                    *PicoLoadModel( char *name, int frameNum );
+picoModel_t                                    *PicoLoadModel( const char *name, int frameNum );
 
 typedef size_t (*PicoInputStreamReadFunc)(void* inputStream, unsigned char* buffer, size_t length);
 picoModel_t* PicoModuleLoadModelStream( const picoModule_t* module, void* inputStream, PicoInputStreamReadFunc inputStreamRead, size_t streamLength, int frameNum, const char *fileName );
@@ -242,8 +242,8 @@ int                                                 PicoAdjustSurface( picoSurface_t *surface, int numVertexes, int numSTA
 
 
 /* setter functions */
-void                                           PicoSetModelName( picoModel_t *model, char *name );
-void                                           PicoSetModelFileName( picoModel_t *model, char *fileName );
+void                                           PicoSetModelName( picoModel_t *model, const char *name );
+void                                           PicoSetModelFileName( picoModel_t *model, const char *fileName );
 void                                           PicoSetModelFrameNum( picoModel_t *model, int frameNum );
 void                                           PicoSetModelNumFrames( picoModel_t *model, int numFrames );
 void                                           PicoSetModelData( picoModel_t *model, void *data );
index 0b8ef4eab60d82099ab0f16437d4a901c54413cb..3720a8eb2d16281a9e79d01c2392cee9bb741119 100644 (file)
@@ -44,7 +44,7 @@ Read an ENVL chunk from an LWO2 file.
 lwEnvelope *lwGetEnvelope( picoMemStream_t *fp, int cksize )
 {
    lwEnvelope *env;
-   lwKey *key;
+   lwKey *key = NULL;
    lwPlugin *plug;
    unsigned int id;
    unsigned short sz;
index 9853c55a3db80a9ac7888ffad8deaa713d1a048a..63e9af76b567fa12de6c94d64eadcd6c48461b3a 100644 (file)
@@ -311,7 +311,7 @@ int sgetI1( unsigned char **bp )
    i = **bp;
    if ( i > 127 ) i -= 256;
    flen += 1;
-   *bp++;
+   (*bp)++;
    return i;
 }
 
@@ -349,7 +349,7 @@ unsigned char sgetU1( unsigned char **bp )
    if ( flen == FLEN_ERROR ) return 0;
    c = **bp;
    flen += 1;
-   *bp++;
+   (*bp)++;
    return c;
 }
 
@@ -422,7 +422,7 @@ char *sgetS0( unsigned char **bp )
 
    if ( flen == FLEN_ERROR ) return NULL;
 
-   len = strlen( buf ) + 1;
+   len = strlen( (const char *) buf ) + 1;
    if ( len == 1 ) {
       flen += 2;
       *bp += 2;
index ff83d5c22bbbfa955e516adf333c48c50cb7ba30..56c756c325d62302ea700d922999bf7ca05e28c9 100644 (file)
@@ -76,13 +76,13 @@ can be used to diagnose the cause.
 If you don't need this information, failID and failpos can be NULL.
 ====================================================================== */
 
-lwObject *lwGetObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
+lwObject *lwGetObject( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
 {
    lwObject *object;
    lwLayer *layer;
    lwNode *node;
-   unsigned int id, formsize, type, cksize;
-   int i, rlen;
+   unsigned int id, formsize, type;
+   int i, rlen, cksize;
 
    /* open the file */
 
@@ -233,7 +233,7 @@ lwObject *lwGetObject( char *filename, picoMemStream_t *fp, unsigned int *failID
 
       /* end of the file? */
 
-      if ( formsize <= _pico_memstream_tell( fp ) - 8 ) break;
+      if ( formsize <= (unsigned int) (_pico_memstream_tell( fp ) - 8) ) break;
 
       /* get the next chunk header */
 
@@ -270,7 +270,7 @@ Fail:
    return NULL;
 }
 
-int lwValidateObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
+int lwValidateObject( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
 {
    unsigned int id, formsize, type;
 
index 29724cce11f5948cb507ed3fd27eb19d149ab9d5..e5b961159dc2b74a9ac103f4552a8c4a87b2e8fc 100644 (file)
@@ -539,8 +539,8 @@ typedef struct st_lwObject {
 
 void lwFreeLayer( lwLayer *layer );
 void lwFreeObject( lwObject *object );
-lwObject *lwGetObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
-int lwValidateObject( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+lwObject *lwGetObject( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+int lwValidateObject( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
 
 /* pntspols.c */
 
@@ -600,8 +600,8 @@ lwSurface *lwDefaultSurface( void );
 
 lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj );
 int lwGetPolygons5( picoMemStream_t *fp, int cksize, lwPolygonList *plist, int ptoffset );
-lwObject *lwGetObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
-int lwValidateObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+lwObject *lwGetObject5( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
+int lwValidateObject5( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos );
 
 /* list.c */
 
index 0b7c372dc6116e83b263afb85681084c87f4b039..2d0522d5f873edfe7e5802802a00d549c8db9186 100644 (file)
@@ -70,7 +70,7 @@ static int add_clip( char *s, lwClip **clist, int *nclips )
    clip->saturation.val = 1.0f;
    clip->gamma.val = 1.0f;
 
-   if ( p = strstr( s, "(sequence)" )) {
+   if ((p = strstr( s, "(sequence)" ))) {
       p[ -1 ] = 0;
       clip->type = ID_ISEQ;
       clip->source.seq.prefix = s;
@@ -81,7 +81,7 @@ static int add_clip( char *s, lwClip **clist, int *nclips )
       clip->source.still.name = s;
    }
 
-   *nclips++;
+   (*nclips)++;
    clip->index = *nclips;
 
    lwListAdd( (void *) clist, clip );
@@ -188,8 +188,8 @@ Read an lwSurface from an LWOB file.
 lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj )
 {
    lwSurface *surf;
-   lwTexture *tex;
-   lwPlugin *shdr;
+   lwTexture *tex = NULL;
+   lwPlugin *shdr = NULL;
    char *s;
    float v[ 3 ];
    unsigned int id, flags;
@@ -352,11 +352,14 @@ lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj )
             break;
 
          case ID_TFLG:
+            if(!tex) goto Fail;
             flags = getU2( fp );
 
+            i = -1;
             if ( flags & 1 ) i = 0;
             if ( flags & 2 ) i = 1;
             if ( flags & 4 ) i = 2;
+            if(i < 0) goto Fail;
             tex->axis = i;
             if ( tex->type == ID_IMAP )
                tex->param.imap.axis = i;
@@ -373,21 +376,25 @@ lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj )
             break;
 
          case ID_TSIZ:
+            if(!tex) goto Fail;
             for ( i = 0; i < 3; i++ )
                tex->tmap.size.val[ i ] = getF4( fp );
             break;
 
          case ID_TCTR:
+            if(!tex) goto Fail;
             for ( i = 0; i < 3; i++ )
                tex->tmap.center.val[ i ] = getF4( fp );
             break;
 
          case ID_TFAL:
+            if(!tex) goto Fail;
             for ( i = 0; i < 3; i++ )
                tex->tmap.falloff.val[ i ] = getF4( fp );
             break;
 
          case ID_TVEL:
+            if(!tex) goto Fail;
             for ( i = 0; i < 3; i++ )
                v[ i ] = getF4( fp );
             tex->tmap.center.eindex = add_tvel( tex->tmap.center.val, v,
@@ -395,44 +402,53 @@ lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj )
             break;
 
          case ID_TCLR:
+            if(!tex) goto Fail;
             if ( tex->type == ID_PROC )
                for ( i = 0; i < 3; i++ )
                   tex->param.proc.value[ i ] = getU1( fp ) / 255.0f;
             break;
 
          case ID_TVAL:
+            if(!tex) goto Fail;
             tex->param.proc.value[ 0 ] = getI2( fp ) / 256.0f;
             break;
 
          case ID_TAMP:
+            if(!tex) goto Fail;
             if ( tex->type == ID_IMAP )
                tex->param.imap.amplitude.val = getF4( fp );
             break;
 
          case ID_TIMG:
+            if(!tex) goto Fail;
             s = getS0( fp );
             tex->param.imap.cindex = add_clip( s, &obj->clip, &obj->nclips );
             break;
 
          case ID_TAAS:
+            if(!tex) goto Fail;
             tex->param.imap.aa_strength = getF4( fp );
             tex->param.imap.aas_flags = 1;
             break;
 
          case ID_TREF:
+            if(!tex) goto Fail;
             tex->tmap.ref_object = getbytes( fp, sz );
             break;
 
          case ID_TOPC:
+            if(!tex) goto Fail;
             tex->opacity.val = getF4( fp );
             break;
 
          case ID_TFP0:
+            if(!tex) goto Fail;
             if ( tex->type == ID_IMAP )
                tex->param.imap.wrapw.val = getF4( fp );
             break;
 
          case ID_TFP1:
+            if(!tex) goto Fail;
             if ( tex->type == ID_IMAP )
                tex->param.imap.wraph.val = getF4( fp );
             break;
@@ -446,6 +462,7 @@ lwSurface *lwGetSurface5( picoMemStream_t *fp, int cksize, lwObject *obj )
             break;
 
          case ID_SDAT:
+            if(!shdr) goto Fail;
             shdr->data = getbytes( fp, sz );
             break;
 
@@ -583,7 +600,7 @@ to diagnose the cause.
 If you don't need this information, failID and failpos can be NULL.
 ====================================================================== */
 
-lwObject *lwGetObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
+lwObject *lwGetObject5( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
 {
    lwObject *object;
    lwLayer *layer;
@@ -665,7 +682,7 @@ lwObject *lwGetObject5( char *filename, picoMemStream_t *fp, unsigned int *failI
 
       /* end of the file? */
 
-      if ( formsize <= _pico_memstream_tell( fp ) - 8 ) break;
+      if ( formsize <= (unsigned int) (_pico_memstream_tell( fp ) - 8) ) break;
 
       /* get the next chunk header */
 
@@ -693,7 +710,7 @@ Fail:
    return NULL;
 }
 
-int lwValidateObject5( char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
+int lwValidateObject5( const char *filename, picoMemStream_t *fp, unsigned int *failID, int *failpos )
 {
    unsigned int id, formsize, type;
 
index 22214923ffbf90d9fe289a80c7cafc1bae25c755..f08a9962705efaebfa721ee58480db45b6850bae 100644 (file)
@@ -52,7 +52,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 /* function pointers */
 void *(*_pico_ptr_malloc       )( size_t ) = malloc;
 void  (*_pico_ptr_free         )( void* ) = free;
-void  (*_pico_ptr_load_file    )( char*, unsigned char**, int* ) = NULL;
+void  (*_pico_ptr_load_file    )( const char*, unsigned char**, int* ) = NULL;
 void  (*_pico_ptr_free_file    )( void* ) = NULL;
 void  (*_pico_ptr_print                )( int, const char* ) = NULL;
 
@@ -193,7 +193,7 @@ void _pico_free( void *ptr )
 /* _pico_load_file:
  * wrapper around the loadfile function pointer
  */
-void _pico_load_file( char *name, unsigned char **buffer, int *bufSize )
+void _pico_load_file( const char *name, unsigned char **buffer, int *bufSize )
 {
        /* sanity checks */
        if( name == NULL )
@@ -266,7 +266,7 @@ void _pico_first_token( char *str )
        if( !str || !*str )
                return;
        while( *str && !isspace( *str ) )
-               *str++;
+               str++;
        *str = '\0';
 }
 
@@ -555,7 +555,7 @@ float _pico_big_float( float src )
 /* _pico_stristr:
  *  case-insensitive strstr. -sea
  */
-char *_pico_stristr( char *str, const char *substr )
+const char *_pico_stristr( const char *str, const char *substr )
 {
        const size_t sublen = strlen(substr);
        while (*str)
@@ -738,7 +738,7 @@ void _pico_parse_skip_white( picoParser_t *p, int *hasLFs )
 /* _pico_new_parser:
  *  allocates a new ascii parser object.
  */
-picoParser_t *_pico_new_parser( picoByte_t *buffer, int bufSize )
+picoParser_t *_pico_new_parser( const picoByte_t *buffer, int bufSize )
 {
        picoParser_t *p;
        
@@ -761,8 +761,8 @@ picoParser_t *_pico_new_parser( picoByte_t *buffer, int bufSize )
                return NULL;
        }
        /* setup */
-       p->buffer       = buffer;
-       p->cursor       = buffer;
+       p->buffer       = (const char *) buffer;
+       p->cursor       = (const char *) buffer;
        p->bufSize      = bufSize;
        p->max          = p->buffer + bufSize;
        p->curLine = 1; /* sea: new */
@@ -798,7 +798,7 @@ void _pico_free_parser( picoParser_t *p )
 int _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted )
 {
        int hasLFs = 0;
-       char *old;
+       const char *old;
 
        /* sanity checks */
        if( p == NULL || p->buffer == NULL ||
@@ -1218,7 +1218,7 @@ int _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def )
 /* _pico_new_memstream:
  *  allocates a new memorystream object.
  */
-picoMemStream_t *_pico_new_memstream( picoByte_t *buffer, int bufSize )
+picoMemStream_t *_pico_new_memstream( const picoByte_t *buffer, int bufSize )
 {
        picoMemStream_t *s;
        
index 6ede9f60c5240334cd1c98193093789ab221ae7b..10769e335a0981dc1755f4dc9e7b86b8d1690610 100644 (file)
@@ -78,22 +78,22 @@ extern "C"
 /* types */
 typedef struct picoParser_s
 {
-       char    *buffer;
+       const char      *buffer;
        int              bufSize;
        char    *token;
        int              tokenSize;
        int              tokenMax;
-       char    *cursor;
-       char    *max;
+       const char      *cursor;
+       const char      *max;
        int              curLine;
 }
 picoParser_t;
 
 typedef struct picoMemStream_s
 {
-       picoByte_t      *buffer;
+       const picoByte_t        *buffer;
        int                     bufSize;
-       picoByte_t      *curPos;
+       const picoByte_t        *curPos;
        int                     flag;
 }
 picoMemStream_t;
@@ -104,7 +104,7 @@ extern const picoModule_t   *picoModules[];
 
 extern void                                    *(*_pico_ptr_malloc)( size_t );
 extern void                                    (*_pico_ptr_free)( void* );
-extern void                                    (*_pico_ptr_load_file)( char*, unsigned char**, int* );
+extern void                                    (*_pico_ptr_load_file)( const char*, unsigned char**, int* );
 extern void                                    (*_pico_ptr_free_file)( void* );
 extern void                                    (*_pico_ptr_print)( int, const char* );
 
@@ -120,7 +120,7 @@ char                        *_pico_clone_alloc( const char *str );
 void                   _pico_free( void *ptr );
 
 /* files */
-void                   _pico_load_file( char *name, unsigned char **buffer, int *bufSize );
+void                   _pico_load_file( const char *name, unsigned char **buffer, int *bufSize );
 void                   _pico_free_file( void *buffer );
 
 /* strings */
@@ -129,7 +129,7 @@ char                        *_pico_strltrim( char *str );
 char                   *_pico_strrtrim( char *str );
 int                            _pico_strchcount( char *str, int ch );
 void                   _pico_printf( int level, const char *format, ... );
-char                   *_pico_stristr( char *str, const char *substr );
+const char             *_pico_stristr( const char *str, const char *substr );
 void                   _pico_unixify( char *path );
 int                            _pico_nofname( const char *path, char *dest, int destSize );
 const char *_pico_nopath( const char *path );
@@ -168,7 +168,7 @@ short                       _pico_little_short( short src );
 float                  _pico_little_float( float src );
 
 /* pico ascii parser */
-picoParser_t   *_pico_new_parser( picoByte_t *buffer, int bufSize );
+picoParser_t   *_pico_new_parser( const picoByte_t *buffer, int bufSize );
 void                   _pico_free_parser( picoParser_t *p );
 int                            _pico_parse_ex( picoParser_t *p, int allowLFs, int handleQuoted );
 char                   *_pico_parse_first( picoParser_t *p );
@@ -189,7 +189,7 @@ int                         _pico_parse_vec4( picoParser_t *p, picoVec4_t out);
 int                    _pico_parse_vec4_def( picoParser_t *p, picoVec4_t out, picoVec4_t def);
 
 /* pico memory stream */
-picoMemStream_t        *_pico_new_memstream( picoByte_t *buffer, int bufSize );
+picoMemStream_t        *_pico_new_memstream( const picoByte_t *buffer, int bufSize );
 void                   _pico_free_memstream( picoMemStream_t *s );
 int                            _pico_memstream_read( picoMemStream_t *s, void *buffer, int len );
 int                            _pico_memstream_getc( picoMemStream_t *s );
index 078dce306cbd97b438a5baf99a5697cb511c1f34..aed467cacd49edbe0005ff2852dbb8a3d8bf6a26 100644 (file)
@@ -114,7 +114,7 @@ PicoSetLoadFileFunc()
 sets the ptr to the file load function
 */
 
-void PicoSetLoadFileFunc( void (*func)( char*, unsigned char**, int* ) )
+void PicoSetLoadFileFunc( void (*func)( const char*, unsigned char**, int* ) )
 {
        if( func != NULL )
                _pico_ptr_load_file = func;
@@ -148,7 +148,7 @@ void PicoSetPrintFunc( void (*func)( int, const char* ) )
 
 
 
-picoModel_t    *PicoModuleLoadModel( const picoModule_t* pm, char* fileName, picoByte_t* buffer, int bufSize, int frameNum )
+picoModel_t    *PicoModuleLoadModel( const picoModule_t* pm, const char* fileName, picoByte_t* buffer, int bufSize, int frameNum )
 {
        char                            *modelFileName, *remapFileName;
 
@@ -199,7 +199,7 @@ PicoLoadModel()
 the meat and potatoes function
 */
 
-picoModel_t    *PicoLoadModel( char *fileName, int frameNum )
+picoModel_t    *PicoLoadModel( const char *fileName, int frameNum )
 {
        const picoModule_t      **modules, *pm;
        picoModel_t                     *model;
@@ -753,7 +753,7 @@ picoSurface_t *PicoFindSurface(
   PicoSet*() Setter Functions
 ----------------------------------------------------------------------------*/
 
-void PicoSetModelName( picoModel_t *model, char *name )
+void PicoSetModelName( picoModel_t *model, const char *name )
 {
        if( model == NULL || name == NULL )
                return;
@@ -765,7 +765,7 @@ void PicoSetModelName( picoModel_t *model, char *name )
 
 
 
-void PicoSetModelFileName( picoModel_t *model, char *fileName )
+void PicoSetModelFileName( picoModel_t *model, const char *fileName )
 {
        if( model == NULL || fileName == NULL )
                return;
index 49a05f13df44aa9a4866121860e029bdbcf24756..5ec21bf61555a5e982fe847f9df893e60cea4871 100644 (file)
@@ -166,20 +166,17 @@ T3dsChunk;
  */
 static int _3ds_canload( PM_PARAMS_CANLOAD )
 {
-       T3dsChunk *chunk;
-
-       /* to keep the compiler happy */
-       *fileName = *fileName;
+       const T3dsChunk *chunk;
 
        /* sanity check */
-       if (bufSize < sizeof(T3dsChunk))
+       if (bufSize < (int) sizeof(T3dsChunk))
                return PICO_PMV_ERROR_SIZE;
 
        /* get pointer to 3ds header chunk */
-       chunk = (T3dsChunk *)buffer;
+       chunk = (const T3dsChunk *)buffer;
 
        /* check data length */
-       if (bufSize < _pico_little_long(chunk->len))
+       if (bufSize < (int) _pico_little_long(chunk->len))
                return PICO_PMV_ERROR_SIZE;
 
        /* check 3ds magic */
@@ -736,7 +733,8 @@ static picoModel_t *_3ds_load( PM_PARAMS_LOAD )
 
        /* initialize persistant vars (formerly static) */
        pers.model    =  model;
-       pers.bufptr   = (picoByte_t *)buffer;
+       pers.bufptr   = (picoByte_t *)_pico_alloc(bufSize);
+       memcpy(pers.bufptr, buffer, bufSize);
        pers.basename = (char *)basename;
        pers.maxofs   =  bufSize;
        pers.cofs     =  0L;
index 985ea8a0fa0e2241191d6c144e78af2ebae79eca..31c448e68c0fb7e21d781c8106aa40f1c9575703 100644 (file)
@@ -221,11 +221,8 @@ static int _ase_canload( PM_PARAMS_CANLOAD )
        if( bufSize < 80 )
                return PICO_PMV_ERROR_SIZE;
        
-       /* keep the friggin compiler happy */
-       *fileName = *fileName;
-       
        /* create pico parser */
-       p = _pico_new_parser( (picoByte_t*) buffer, bufSize );
+       p = _pico_new_parser( (const picoByte_t*) buffer, bufSize );
        if( p == NULL )
                return PICO_PMV_ERROR_MEMORY;
        
@@ -552,7 +549,7 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD )
                return NULL; \
        }
        /* create a new pico parser */
-       p = _pico_new_parser( (picoByte_t *)buffer,bufSize );
+       p = _pico_new_parser( (const picoByte_t *)buffer,bufSize );
        if (p == NULL) return NULL;
 
        /* create a new pico model */
@@ -868,7 +865,7 @@ static picoModel_t *_ase_load( PM_PARAMS_LOAD )
                else if( !_pico_stricmp( p->token, "*material" ) )
                {
                        aseSubMaterial_t*       subMaterial = NULL;
-                       picoShader_t            *shader;
+                       picoShader_t            *shader = NULL;
                        int                                     level = 1, index;
                        char                            materialName[ 1024 ];
                        float                           transValue = 0.0f, shineValue = 1.0f;
index 4e64fe6d58a96faee89ba92c0ddc063f6489a687..1065160e64792f4bb15d37b768a24abc0b05e1c9 100644 (file)
@@ -66,10 +66,11 @@ typedef struct index_DUP_LUT_s
 static int _fm_canload( PM_PARAMS_CANLOAD )
 {
        fm_t            fm;
-       unsigned char   *bb;
+       unsigned char   *bb, *bb0;
        int             fm_file_pos;
 
-       bb = (unsigned char *) buffer;
+       bb0 = bb = (picoByte_t*) _pico_alloc(bufSize);
+       memcpy(bb, buffer, bufSize);
 
        // Header
        fm.fm_header_hdr = (fm_chunk_header_t *) bb;
@@ -82,6 +83,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Header Ident incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_IDENT;
        }
 
@@ -91,6 +93,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Header Version incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_VERSION;
        }
 
@@ -105,6 +108,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_IDENT;
        }
 
@@ -114,6 +118,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Skin Version incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_VERSION;
        }
 
@@ -128,6 +133,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM ST Ident incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_IDENT;
        }
 
@@ -137,6 +143,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM ST Version incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_VERSION;
        }
 
@@ -151,6 +158,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_IDENT;
        }
 
@@ -160,6 +168,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Tri Version incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_VERSION;
        }
 
@@ -174,6 +183,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_IDENT;
        }
 
@@ -183,6 +193,7 @@ static int _fm_canload( PM_PARAMS_CANLOAD )
 #ifdef FM_DBG
                _pico_printf( PICO_WARNING, "FM Frame Version incorrect\n");
 #endif
+               _pico_free(bb0);
                return PICO_PMV_ERROR_VERSION;
        }
 
@@ -211,7 +222,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        fm_xyz_st_t             *triangle;
        fm_frame_t              *frame;
 
-       picoByte_t      *bb;
+       picoByte_t      *bb, *bb0;
        picoModel_t     *picoModel;
        picoSurface_t   *picoSurface;
        picoShader_t    *picoShader;
@@ -220,7 +231,8 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        picoColor_t     color;
        
 
-       bb = (picoByte_t*) buffer;
+       bb0 = bb = (picoByte_t*) _pico_alloc(bufSize);
+       memcpy(bb, buffer, bufSize);
 
        // Header Header
        fm.fm_header_hdr = (fm_chunk_header_t *) bb;
@@ -228,12 +240,14 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        if( (strcmp(fm.fm_header_hdr->ident, FM_HEADERCHUNKNAME))  )
        {
                _pico_printf( PICO_WARNING, "FM Header Ident incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
        if( _pico_little_long( fm.fm_header_hdr->version ) != FM_HEADERCHUNKVER )
        {
                _pico_printf( PICO_WARNING, "FM Header Version incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -243,12 +257,14 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        if( (strcmp(fm.fm_skin_hdr->ident, FM_SKINCHUNKNAME)) )
        {
                _pico_printf( PICO_WARNING, "FM Skin Ident incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
        if( _pico_little_long( fm.fm_skin_hdr->version ) != FM_SKINCHUNKVER )
        {
                _pico_printf( PICO_WARNING, "FM Skin Version incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -258,12 +274,14 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        if( (strcmp(fm.fm_st_hdr->ident, FM_STCOORDCHUNKNAME)) )
        {
                _pico_printf( PICO_WARNING, "FM ST Ident incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
        if( _pico_little_long( fm.fm_st_hdr->version ) != FM_STCOORDCHUNKVER )
        {
                _pico_printf( PICO_WARNING, "FM ST Version incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -273,12 +291,14 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        if( (strcmp(fm.fm_tri_hdr->ident, FM_TRISCHUNKNAME)) )
        {
                _pico_printf( PICO_WARNING, "FM Tri Ident incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
        if( _pico_little_long( fm.fm_tri_hdr->version ) != FM_TRISCHUNKVER )
        {
                _pico_printf( PICO_WARNING, "FM Tri Version incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -288,12 +308,14 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        if( (strcmp(fm.fm_frame_hdr->ident, FM_FRAMESCHUNKNAME)) )
        {
                _pico_printf( PICO_WARNING, "FM Frame Ident incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
        if( _pico_little_long( fm.fm_frame_hdr->version ) != FM_FRAMESCHUNKVER )
        {
                _pico_printf( PICO_WARNING, "FM Frame Version incorrect\n");
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -325,12 +347,14 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        if( fm_head->numFrames < 1 )
        {
                _pico_printf( PICO_ERROR, "%s has 0 frames!", fileName );
+               _pico_free(bb0);
                return NULL;
        }
        
        if( frameNum < 0 || frameNum >= fm_head->numFrames )
        {
                _pico_printf( PICO_ERROR, "Invalid or out-of-range FM frame specified" );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -371,7 +395,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
                texCoord->t = _pico_little_short( texCoord[i].t );
        }
        // set Skin Name
-       strncpy(skinname, (unsigned char *) fm.fm_skin, FM_SKINPATHSIZE );
+       strncpy(skinname, (const char *) fm.fm_skin, FM_SKINPATHSIZE );
 
 #ifdef FM_VERBOSE_DBG
        // Print out md2 values
@@ -387,6 +411,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        if( picoModel == NULL )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model" );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -402,6 +427,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" );
                PicoFreeModel( picoModel );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -413,6 +439,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" );
                PicoFreeModel( picoModel );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -644,6 +671,7 @@ static picoModel_t *_fm_load( PM_PARAMS_LOAD )
        _pico_free(p_index_LUT_DUPS);
 
        /* return the new pico model */
+       _pico_free(bb0);
        return picoModel;
 
 }
index e36bb6f2a4a1752f0d3e1d529fb53f450364916e..09cdde9c5f85b948bbea980cf247181158be52ba 100644 (file)
@@ -79,7 +79,7 @@ static int _lwo_canload( PM_PARAMS_CANLOAD )
        int ret;
 
        /* create a new pico memorystream */
-       s = _pico_new_memstream( (picoByte_t *)buffer, bufSize );
+       s = _pico_new_memstream( (const picoByte_t *)buffer, bufSize );
        if (s == NULL)
        {
                return PICO_PMV_ERROR_MEMORY;
@@ -139,7 +139,7 @@ static picoModel_t *_lwo_load( PM_PARAMS_LOAD )
        }
 
        /* create a new pico memorystream */
-       s = _pico_new_memstream( (picoByte_t *)buffer, bufSize );
+       s = _pico_new_memstream( (const picoByte_t *)buffer, bufSize );
        if (s == NULL)
        {
                return NULL;
index bf78a99bfad8a7ea283e8583c8c9f59d9e95808b..d53f70295467081d1296d15a2b40b23cd33bf946 100644 (file)
@@ -300,20 +300,17 @@ float     md2_normals[ MD2_NUMVERTEXNORMALS ][ 3 ] =
 
 static int _md2_canload( PM_PARAMS_CANLOAD )
 {
-       md2_t   *md2;
-
-       /* to keep the compiler happy */
-       *fileName = *fileName;
+       const md2_t     *md2;
 
        /* sanity check */
-       if( bufSize < ( sizeof( *md2 ) * 2) )
+       if( (size_t) bufSize < ( sizeof( *md2 ) * 2) )
                return PICO_PMV_ERROR_SIZE;
        
        /* set as md2 */
-       md2 = (md2_t*) buffer;
+       md2 = (const md2_t*) buffer;
        
        /* check md2 magic */
-       if( *((int*) md2->magic) != *((int*) MD2_MAGIC) ) 
+       if( *((const int*) md2->magic) != *((const int*) MD2_MAGIC) ) 
                return PICO_PMV_ERROR_IDENT;
        
        /* check md2 version */
@@ -344,7 +341,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        md2Triangle_t   *triangle;
        md2XyzNormal_t  *vertex;
 
-       picoByte_t      *bb;
+       picoByte_t      *bb, *bb0;
        picoModel_t             *picoModel;
        picoSurface_t   *picoSurface;
        picoShader_t    *picoShader;
@@ -354,14 +351,16 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        
 
        /* set as md2 */
-       bb = (picoByte_t*) buffer;
-       md2     = (md2_t*) buffer;
+       bb0 = bb = (picoByte_t*) _pico_alloc(bufSize);
+       memcpy(bb, buffer, bufSize);
+       md2     = (md2_t*) bb;
 
        /* check ident and version */
-       if( *((int*) md2->magic) != *((int*) MD2_MAGIC) || _pico_little_long( md2->version ) != MD2_VERSION )
+       if( *((const int*) md2->magic) != *((const int*) MD2_MAGIC) || _pico_little_long( md2->version ) != MD2_VERSION )
        {
                /* not an md2 file (todo: set error) */
                _pico_printf( PICO_ERROR, "%s is not an MD2 File!", fileName );
+               _pico_free(bb0);
                return NULL;
        }
        
@@ -390,12 +389,14 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        if( md2->numFrames < 1 )
        {
                _pico_printf( PICO_ERROR, "%s has 0 frames!", fileName );
+               _pico_free(bb0);
                return NULL;
        }
        
        if( frameNum < 0 || frameNum >= md2->numFrames )
        {
                _pico_printf( PICO_ERROR, "Invalid or out-of-range MD2 frame specified" );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -429,7 +430,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        }
 
        // set Skin Name
-       strncpy(skinname, (bb + md2->ofsSkins), MD2_MAX_SKINNAME );
+       strncpy(skinname, (const char *) (bb + md2->ofsSkins), MD2_MAX_SKINNAME );
 
        // Print out md2 values
        _pico_printf(PICO_VERBOSE,"Skins: %d  Verts: %d  STs: %d  Triangles: %d  Frames: %d\nSkin Name \"%s\"\n", md2->numSkins, md2->numXYZ, md2->numST, md2->numTris, md2->numFrames, &skinname );
@@ -443,6 +444,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        if( picoModel == NULL )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model" );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -458,6 +460,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" );
                PicoFreeModel( picoModel );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -469,6 +472,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" );
                PicoFreeModel( picoModel );
+               _pico_free(bb0);
                return NULL;
        }
 
@@ -644,6 +648,7 @@ static picoModel_t *_md2_load( PM_PARAMS_LOAD )
        _pico_free(p_index_LUT_DUPS);
 
        /* return the new pico model */
+       _pico_free(bb0);
        return picoModel;
 
 }
index 55022b287030b3ea47feb6d895a8934c7b7a76f9..b22704dace85b32592d28997e712ca7a34d00970 100644 (file)
@@ -145,21 +145,18 @@ by one structure only.
 
 static int _md3_canload( PM_PARAMS_CANLOAD )
 {
-       md3_t   *md3;
+       const md3_t     *md3;
        
 
-       /* to keep the compiler happy */
-       *fileName = *fileName;
-       
        /* sanity check */
-       if( bufSize < ( sizeof( *md3 ) * 2) )
+       if( (size_t) bufSize < ( sizeof( *md3 ) * 2) )
                return PICO_PMV_ERROR_SIZE;
        
        /* set as md3 */
-       md3     = (md3_t*) buffer;
+       md3     = (const md3_t*) buffer;
        
        /* check md3 magic */
-       if( *((int*) md3->magic) != *((int*) MD3_MAGIC) ) 
+       if( *((const int*) md3->magic) != *((const int*) MD3_MAGIC) ) 
                return PICO_PMV_ERROR_IDENT;
        
        /* check md3 version */
@@ -180,7 +177,7 @@ loads a quake3 arena md3 model file.
 static picoModel_t *_md3_load( PM_PARAMS_LOAD )
 {
        int                             i, j;
-       picoByte_t              *bb;
+       picoByte_t              *bb, *bb0;
        md3_t                   *md3;
        md3Surface_t    *surface;
        md3Shader_t             *shader;
@@ -204,13 +201,15 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD )
 
 
        /* set as md3 */
-       bb = (picoByte_t*) buffer;
-       md3     = (md3_t*) buffer;
+       bb0 = bb = (picoByte_t*) _pico_alloc(bufSize);
+       memcpy(bb, buffer, bufSize);
+       md3     = (md3_t*) bb;
        
        /* check ident and version */
        if( *((int*) md3->magic) != *((int*) MD3_MAGIC) || _pico_little_long( md3->version ) != MD3_VERSION )
        {
                /* not an md3 file (todo: set error) */
+               _pico_free(bb0);
                return NULL;
        }
        
@@ -229,12 +228,14 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD )
        if( md3->numFrames < 1 )
        {
                _pico_printf( PICO_ERROR, "MD3 with 0 frames" );
+               _pico_free(bb0);
                return NULL;
        }
        
        if( frameNum < 0 || frameNum >= md3->numFrames )
        {
                _pico_printf( PICO_ERROR, "Invalid or out-of-range MD3 frame specified" );
+               _pico_free(bb0);
                return NULL;
        }
        
@@ -308,6 +309,7 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD )
        if( picoModel == NULL )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model" );
+               _pico_free(bb0);
                return NULL;
        }
        
@@ -329,6 +331,7 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD )
                {
                        _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" );
                        PicoFreeModel( picoModel ); /* sea */
+                       _pico_free(bb0);
                        return NULL;
                }
                
@@ -344,6 +347,7 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD )
                {
                        _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" );
                        PicoFreeModel( picoModel );
+                       _pico_free(bb0);
                        return NULL;
                }
                
@@ -403,6 +407,7 @@ static picoModel_t *_md3_load( PM_PARAMS_LOAD )
        }
        
        /* return the new pico model */
+       _pico_free(bb0);
        return picoModel;
 }
 
index 27e612e8312c3ffafde5ead50cc52944b8aec518..d1243b2ca5449068acfcd87af66fe2685cc647c1 100644 (file)
@@ -417,21 +417,18 @@ by one structure only.
 
 static int _mdc_canload( PM_PARAMS_CANLOAD )
 {
-       mdc_t   *mdc;
+       const mdc_t     *mdc;
        
-
-       /* to keep the compiler happy */
-       *fileName = *fileName;
        
        /* sanity check */
-       if( bufSize < ( sizeof( *mdc ) * 2) )
+       if( (size_t) bufSize < ( sizeof( *mdc ) * 2) )
                return PICO_PMV_ERROR_SIZE;
        
        /* set as mdc */
-       mdc     = (mdc_t*) buffer;
+       mdc     = (const mdc_t*) buffer;
        
        /* check mdc magic */
-       if( *((int*) mdc->magic) != *((int*) MDC_MAGIC) ) 
+       if( *((const int*) mdc->magic) != *((const int*) MDC_MAGIC) ) 
                return PICO_PMV_ERROR_IDENT;
        
        /* check mdc version */
@@ -452,7 +449,7 @@ loads a Return to Castle Wolfenstein mdc model file.
 static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
 {
        int                                     i, j;
-       picoByte_t                      *bb;
+       picoByte_t                      *bb, *bb0;
        mdc_t                           *mdc;
        mdcSurface_t            *surface;
        mdcShader_t                     *shader;
@@ -460,8 +457,8 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
        mdcFrame_t                      *frame;
        mdcTriangle_t           *triangle;
        mdcVertex_t                     *vertex;
-       mdcXyzCompressed_t      *vertexComp;
-       short                           *mdcShort, *mdcCompVert;
+       mdcXyzCompressed_t      *vertexComp = NULL;
+       short                           *mdcShort, *mdcCompVert = NULL;
        double                          lat, lng;
        
        picoModel_t                     *picoModel;
@@ -478,13 +475,15 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
 
 
        /* set as mdc */
-       bb = (picoByte_t*) buffer;
-       mdc     = (mdc_t*) buffer;
+       bb0 = bb = (picoByte_t*) _pico_alloc(bufSize);
+       memcpy(bb, buffer, bufSize);
+       mdc     = (mdc_t*) bb;
        
        /* check ident and version */
        if( *((int*) mdc->magic) != *((int*) MDC_MAGIC) || _pico_little_long( mdc->version ) != MDC_VERSION )
        {
                /* not an mdc file (todo: set error) */
+               _pico_free(bb0);
                return NULL;
        }
        
@@ -504,12 +503,14 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
        if( mdc->numFrames < 1 )
        {
                _pico_printf( PICO_ERROR, "MDC with 0 frames" );
+               _pico_free(bb0);
                return NULL;
        }
        
        if( frameNum < 0 || frameNum >= mdc->numFrames )
        {
                _pico_printf( PICO_ERROR, "Invalid or out-of-range MDC frame specified" );
+               _pico_free(bb0);
                return NULL;
        }
        
@@ -608,6 +609,7 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
        if( picoModel == NULL )
        {
                _pico_printf( PICO_ERROR, "Unable to allocate a new model" );
+               _pico_free(bb0);
                return NULL;
        }
        
@@ -629,6 +631,7 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
                {
                        _pico_printf( PICO_ERROR, "Unable to allocate a new model surface" );
                        PicoFreeModel( picoModel ); /* sea */
+                       _pico_free(bb0);
                        return NULL;
                }
                
@@ -644,6 +647,7 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
                {
                        _pico_printf( PICO_ERROR, "Unable to allocate a new model shader" );
                        PicoFreeModel( picoModel );
+                       _pico_free(bb0);
                        return NULL;
                }
                
@@ -728,6 +732,7 @@ static picoModel_t *_mdc_load( PM_PARAMS_LOAD )
        }
        
        /* return the new pico model */
+       _pico_free(bb0);
        return picoModel;
 }
 
index cf411eedf8a82a7cbdcf3cdf37706c5195110639..8626beedddf407976c1fe9df9752abba2d8a26a3 100644 (file)
@@ -165,18 +165,15 @@ TMsKeyframe;
  */
 static int _ms3d_canload( PM_PARAMS_CANLOAD )
 {
-       TMsHeader *hdr;
+       const TMsHeader *hdr;
        
        
-       /* to keep the compiler happy */
-       *fileName = *fileName;
-
        /* sanity check */
-       if (bufSize < sizeof(TMsHeader))
+       if ((size_t) bufSize < sizeof(TMsHeader))
                return PICO_PMV_ERROR_SIZE;
 
        /* get ms3d header */
-       hdr = (TMsHeader *)buffer;
+       hdr = (const TMsHeader *)buffer;
 
        /* check ms3d magic */
        if (strncmp(hdr->magic,"MS3D000000",10) != 0)
@@ -206,7 +203,7 @@ static unsigned char *GetWord( unsigned char *bufptr, int *out )
 static picoModel_t *_ms3d_load( PM_PARAMS_LOAD )
 {
        picoModel_t        *model;
-       unsigned char  *bufptr;
+       unsigned char  *bufptr, *bufptr0;
        int                             shaderRefs[ MS3D_MAX_GROUPS ];
        int                             numGroups;
        int                             numMaterials;
@@ -226,8 +223,10 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD )
        PicoSetModelName( model, fileName );
        PicoSetModelFileName( model, fileName );
 
+       bufptr0 = bufptr = (picoByte_t*) _pico_alloc(bufSize);
+       memcpy(bufptr, buffer, bufSize);
        /* skip header */
-       bufptr = (unsigned char *)buffer + sizeof(TMsHeader);
+       bufptr += sizeof(TMsHeader);
 
        /* get number of vertices */
        bufptr = GetWord( bufptr,&numVerts );
@@ -288,6 +287,7 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD )
                        {
                                _pico_printf( PICO_ERROR,"Vertex %d index %d out of range (%d, max %d)",i,k,triangle->vertexIndices[k],numVerts-1);
                                PicoFreeModel( model );
+                               _pico_free(bufptr0);
                                return NULL; /* yuck */
                        }
                }
@@ -322,6 +322,7 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD )
                if (surface == NULL)
                {
                        PicoFreeModel( model );
+                       _pico_free(bufptr0);
                        return NULL;
                }
                /* do surface setup */
@@ -415,6 +416,7 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD )
                if (shader == NULL)
                {
                        PicoFreeModel( model );
+                       _pico_free(bufptr0);
                        return NULL;
                }
                /* scale shader colors */
@@ -473,6 +475,7 @@ static picoModel_t *_ms3d_load( PM_PARAMS_LOAD )
 #endif
        }
        /* return allocated pico model */
+       _pico_free(bufptr0);
        return model;
 //     return NULL;
 }
index d5b15003d8bb10a61dc12caa47d091087de8fcea..7f269faa009b1a23063041ad7e2cf166014c9d8a 100644 (file)
@@ -87,7 +87,7 @@ static int _obj_canload( PM_PARAMS_CANLOAD )
        /* appearing at the beginning of wavefront objects */
 
        /* alllocate a new pico parser */
-       p = _pico_new_parser( (picoByte_t *)buffer,bufSize );
+       p = _pico_new_parser( (const picoByte_t *)buffer,bufSize );
        if (p == NULL)
                return PICO_PMV_ERROR_MEMORY;
 
@@ -535,7 +535,7 @@ static picoModel_t *_obj_load( PM_PARAMS_LOAD )
                return NULL; \
        }
        /* alllocate a new pico parser */
-       p = _pico_new_parser( (picoByte_t *)buffer,bufSize );
+       p = _pico_new_parser( (const picoByte_t *)buffer,bufSize );
        if (p == NULL) return NULL;
 
        /* create a new pico model */
@@ -688,8 +688,8 @@ static picoModel_t *_obj_load( PM_PARAMS_LOAD )
                        int ivt[ 4 ], has_vt = 0;
                        int ivn[ 4 ], has_vn = 0;
                        int have_quad = 0;
-                       int slashcount;
-                       int doubleslash;
+                       int slashcount = 0;
+                       int doubleslash = 0;
                        int i;
 
                        if(curSurface == NULL)
index a54a834867110cf76d136a20649998293180a2d6..b31671193f60ee059087ae3c3d7c74c813e5de95 100644 (file)
@@ -302,11 +302,8 @@ static int _terrain_canload( PM_PARAMS_CANLOAD )
        picoParser_t    *p;
        
        
-       /* keep the friggin compiler happy */
-       *fileName = *fileName;
-       
        /* create pico parser */
-       p = _pico_new_parser( (picoByte_t*) buffer, bufSize );
+       p = _pico_new_parser( (const picoByte_t*) buffer, bufSize );
        if( p == NULL )
                return PICO_PMV_ERROR_MEMORY;
        
@@ -355,11 +352,8 @@ static picoModel_t *_terrain_load( PM_PARAMS_LOAD )
        picoColor_t             color;
        
        
-       /* keep the friggin compiler happy */
-       *fileName = *fileName;
-       
        /* create pico parser */
-       p = _pico_new_parser( (picoByte_t*) buffer, bufSize );
+       p = _pico_new_parser( (const picoByte_t*) buffer, bufSize );
        if( p == NULL )
                return NULL;
        
index 4eb9592c8bcc8aa5dad81fd3dd34ec341e4693e9..4e84b207df19381a28c585155e019e92c994827d 100644 (file)
@@ -193,7 +193,7 @@ void SetQdirFromPath( const char *path )
       }
                        strncpy (qdir, path, c+len+count-path);
                        Sys_Printf ("qdir: %s\n", qdir);
-                       for ( i = 0; i < strlen( qdir ); i++ )
+                       for ( i = 0; i < (int) strlen( qdir ); i++ )
                        {
                                if ( qdir[i] == '\\' ) 
                                        qdir[i] = '/';
@@ -206,7 +206,7 @@ void SetQdirFromPath( const char *path )
                                {
                                        strncpy (gamedir, path, c+1-path);
 
-                                       for ( i = 0; i < strlen( gamedir ); i++ )
+                                       for ( i = 0; i < (int) strlen( gamedir ); i++ )
                                        {
                                                if ( gamedir[i] == '\\' ) 
                                                        gamedir[i] = '/';
@@ -250,7 +250,7 @@ char *ExpandArg (const char *path)
 char *ExpandPath (const char *path)
 {
        static char full[1024];
-       if (!qdir)
+       if (!*qdir)
                Error ("ExpandPath called without qdir set");
        if (path[0] == '/' || path[0] == '\\' || path[1] == ':') {
                strcpy( full, path );
@@ -263,7 +263,7 @@ char *ExpandPath (const char *path)
 char *ExpandGamePath (const char *path)
 {
        static char full[1024];
-       if (!qdir)
+       if (!*qdir)
                Error ("ExpandGamePath called without qdir set");
        if (path[0] == '/' || path[0] == '\\' || path[1] == ':') {
                strcpy( full, path );
index 5fc38cf58706107d090404c3c8780deef47b3146..37890b46a05b31adf964273b82ac9e316d16ddad 100644 (file)
@@ -99,7 +99,11 @@ void ExpandWildcards( int *argc, char ***argv );
 
 double I_FloatTime( void );
 
-void   Error( const char *error, ... );
+void   Error( const char *error, ... )
+#ifdef __GNUC__
+__attribute__((noreturn))
+#endif
+;
 int            CheckParm( const char *check );
 
 FILE   *SafeOpenWrite( const char *filename );
index 9e52f1ed1a74dbe24efa1ad9234b1a6e2ec371c3..31e31850bdfb9b141a6f0f943bb0104566058472 100644 (file)
@@ -527,6 +527,7 @@ void LoadPCX( const char *filename, byte **pic, byte **palette, int *width, int
        for( y = 0; y <= pcx->ymax; y++, pix += pcx->xmax + 1 )
        {
                /* do a scanline */
+               runLength = 0;
                for( x=0; x <= pcx->xmax; )
                {
                        /* RR2DO2 */
@@ -1133,7 +1134,7 @@ void LoadTGA (const char *name, byte **pixels, int *width, int *height)
        //
        // load the file
        //
-       nLen = vfsLoadFile ( ( char * ) name, (void **)&buffer, 0);
+       nLen = vfsLoadFile ( name, (void **)&buffer, 0);
        if (nLen == -1)
        {
                Error ("Couldn't read %s", name);
@@ -1183,8 +1184,6 @@ void WriteTGA (const char *filename, byte *data, int width, int height) {
 
 void WriteTGAGray (const char *filename, byte *data, int width, int height) {
        byte    buffer[18];
-       int             i;
-       int             c;
        FILE    *f;
 
        memset (buffer, 0, 18);
index c56a9f5436d2619bddbcede0ab621852ec46f969..9f7005ad92b303c8352c66554ae3b8889ae1fd27 100644 (file)
@@ -71,8 +71,8 @@ xmlNodePtr xml_NodeForVec( vec3_t v )
   char buf[1024];
   
   sprintf (buf, "%f %f %f", v[0], v[1], v[2]);
-  ret = xmlNewNode (NULL, "point");
-  xmlNodeSetContent (ret, buf);
+  ret = xmlNewNode (NULL, (xmlChar*)"point");
+  xmlNodeSetContent (ret, (xmlChar*)buf);
   return ret;
 }
 
@@ -96,7 +96,7 @@ void xml_SendNode (xmlNodePtr node)
     // l_net library defines an upper limit of MAX_NETMESSAGE
     // there are some size check errors, so we use MAX_NETMESSAGE-10 to be safe
     // if the size of the buffer exceeds MAX_NETMESSAGE-10 we'll send in several network messages
-    while (pos < xml_buf->use)
+    while (pos < (int)xml_buf->use)
     {
       // what size are we gonna send now?
       (xml_buf->use - pos < MAX_NETMESSAGE - 10) ? (size = xml_buf->use - pos) : (size = MAX_NETMESSAGE - 10);
@@ -152,15 +152,15 @@ void xml_Select (char *msg, int entitynum, int brushnum, qboolean bError)
 
   // now build a proper "select" XML node
   sprintf (buf, "Entity %i, Brush %i: %s", entitynum, brushnum, msg);
-  node = xmlNewNode (NULL, "select");
-  xmlNodeSetContent (node, buf);
+  node = xmlNewNode (NULL, (xmlChar*)"select");
+  xmlNodeSetContent (node, (xmlChar*)buf);
   level[0] = (int)'0' + (bError ? SYS_ERR : SYS_WRN)  ;
   level[1] = 0;
-  xmlSetProp (node, "level", (char *)&level);
+  xmlSetProp (node, (xmlChar*)"level", (xmlChar *)&level);
   // a 'select' information
   sprintf (buf, "%i %i", entitynum, brushnum);
-  select = xmlNewNode (NULL, "brush");
-  xmlNodeSetContent (select, buf);
+  select = xmlNewNode (NULL, (xmlChar*)"brush");
+  xmlNodeSetContent (select, (xmlChar*)buf);
   xmlAddChild (node, select);
   xml_SendNode (node);
 
@@ -178,15 +178,15 @@ void xml_Point (char *msg, vec3_t pt)
   char buf[1024];
   char level[2];
 
-  node = xmlNewNode (NULL, "pointmsg");
-  xmlNodeSetContent (node, msg);
+  node = xmlNewNode (NULL, (xmlChar*)"pointmsg");
+  xmlNodeSetContent (node, (xmlChar*)msg);
   level[0] = (int)'0' + SYS_ERR;
   level[1] = 0;
-  xmlSetProp (node, "level", (char *)&level);
+  xmlSetProp (node, (xmlChar*)"level", (xmlChar *)&level);
   // a 'point' node
   sprintf (buf, "%g %g %g", pt[0], pt[1], pt[2]);
-  point = xmlNewNode (NULL, "point");
-  xmlNodeSetContent (point, buf);
+  point = xmlNewNode (NULL, (xmlChar*)"point");
+  xmlNodeSetContent (point, (xmlChar*)buf);
   xmlAddChild (node, point);
   xml_SendNode (node);
 
@@ -203,11 +203,11 @@ void xml_Winding (char *msg, vec3_t p[], int numpoints, qboolean die)
   char level[2];
   int i;
 
-  node = xmlNewNode (NULL, "windingmsg");
-  xmlNodeSetContent (node, msg);
+  node = xmlNewNode (NULL, (xmlChar*)"windingmsg");
+  xmlNodeSetContent (node, (xmlChar*)msg);
   level[0] = (int)'0' + SYS_ERR;
   level[1] = 0;
-  xmlSetProp (node, "level", (char *)&level);
+  xmlSetProp (node, (xmlChar*)"level", (xmlChar *)&level);
   // a 'winding' node
   sprintf( buf, "%i ", numpoints);
   for(i = 0; i < numpoints; i++)
@@ -219,8 +219,8 @@ void xml_Winding (char *msg, vec3_t p[], int numpoints, qboolean die)
          strcat( buf, smlbuf);
   }
 
-  winding = xmlNewNode (NULL, "winding");
-  xmlNodeSetContent (winding, buf);
+  winding = xmlNewNode (NULL, (xmlChar*)"winding");
+  xmlNodeSetContent (winding, (xmlChar*)buf);
   xmlAddChild (node, winding);
   xml_SendNode (node);
 
@@ -242,7 +242,7 @@ void Broadcast_Setup( const char *dest )
   char sMsg[1024];
 
        Net_Setup();
-       Net_StringToAddress((char *)dest, &address);
+       Net_StringToAddress(dest, &address);
   brdcst_socket = Net_Connect(&address, 0);
   if (brdcst_socket)
   {
@@ -288,19 +288,19 @@ void FPrintf (int flag, char *buf)
   if (!bGotXML)
   {
     // initialize
-    doc = xmlNewDoc("1.0");
-    doc->children = xmlNewDocRawNode(doc, NULL, "q3map_feedback", NULL);
+    doc = xmlNewDoc((xmlChar*)"1.0");
+    doc->children = xmlNewDocRawNode(doc, NULL, (xmlChar*)"q3map_feedback", NULL);
     bGotXML = qtrue;
   }
-  node = xmlNewNode (NULL, "message");
+  node = xmlNewNode (NULL, (xmlChar*)"message");
   {
     gchar* utf8 = g_locale_to_utf8(buf, -1, NULL, NULL, NULL); 
-    xmlNodeSetContent(node, utf8);
+    xmlNodeSetContent(node, (xmlChar*)utf8);
     g_free(utf8);
   }
   level[0] = (int)'0' + flag;
   level[1] = 0;
-  xmlSetProp (node, "level", (char *)&level );
+  xmlSetProp (node, (xmlChar*)"level", (xmlChar *)&level );
   
   xml_SendNode (node);
 }
index 63878e6a534c3b69375d19d0adf64fbcc0669a50..41b09cb33b52a7b1c370fccf0f6af7a8982a3560 100644 (file)
@@ -1635,10 +1635,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
 
        /* we check the magic */
        if (err==UNZ_OK)
+       {
                if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
                        err=UNZ_ERRNO;
                else if (uMagic!=0x02014b50)
                        err=UNZ_BADZIPFILE;
+       }
 
        if (unzlocal_getShort(s->file,&file_info.version) != UNZ_OK)
                err=UNZ_ERRNO;
@@ -1715,10 +1717,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
                        uSizeRead = extraFieldBufferSize;
 
                if (lSeek!=0)
+               {
                        if (fseek(s->file,lSeek,SEEK_CUR)==0)
                                lSeek=0;
                        else
                                err=UNZ_ERRNO;
+               }
                if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
                        if (fread(extraField,(uInt)uSizeRead,1,s->file)!=1)
                                err=UNZ_ERRNO;
@@ -1740,10 +1744,12 @@ static int unzlocal_GetCurrentFileInfoInternal (unzFile file,
                        uSizeRead = commentBufferSize;
 
                if (lSeek!=0)
+               {
                        if (fseek(s->file,lSeek,SEEK_CUR)==0)
                                lSeek=0;
                        else
                                err=UNZ_ERRNO;
+               }
                if ((file_info.size_file_comment>0) && (commentBufferSize>0))
                        if (fread(szComment,(uInt)uSizeRead,1,s->file)!=1)
                                err=UNZ_ERRNO;
@@ -1906,10 +1912,12 @@ static int unzlocal_CheckCurrentFileCoherencyHeader (unz_s* s, uInt* piSizeVar,
 
 
        if (err==UNZ_OK)
+       {
                if (unzlocal_getLong(s->file,&uMagic) != UNZ_OK)
                        err=UNZ_ERRNO;
                else if (uMagic!=0x04034b50)
                        err=UNZ_BADZIPFILE;
+       }
 
        if (unzlocal_getShort(s->file,&uData) != UNZ_OK)
                err=UNZ_ERRNO;
@@ -3407,7 +3415,7 @@ static int huft_build(uInt *b, uInt n, uInt s, const uInt *d, const uInt *e, inf
 
         /* compute minimum size table less than or equal to l bits */
         z = g - w;
-        z = z > (uInt)l ? l : z;        /* table size upper limit */
+        z = z > (uInt)l ? (uInt)l : z;        /* table size upper limit */
         if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
         {                       /* too few codes for k-w bit table */
           f -= a + 1;           /* deduct codes from patterns left */
@@ -3445,7 +3453,10 @@ static int huft_build(uInt *b, uInt n, uInt s, const uInt *d, const uInt *e, inf
       /* set up table entry in r */
       r.bits = (Byte)(k - w);
       if (p >= v + n)
+      {
         r.exop = 128 + 64;      /* out of values--invalid code */
+        r.base = 0;
+      }
       else if (*p < s)
       {
         r.exop = (Byte)(*p < 256 ? 0 : 32 + 64);     /* 256 is end-of-block */
index 37ff876abf34738ac7b40cdc729254bbbb6cc7d8..214f62f084ca0ee0ff9ade690c31320ce613657f 100644 (file)
@@ -340,12 +340,12 @@ void ProcessWorldModel( void )
                Sys_FPrintf( SYS_NOXML, "******* leaked *******\n" );
                Sys_FPrintf( SYS_NOXML, "**********************\n" );
                polyline = LeakFile( tree );
-               leaknode = xmlNewNode( NULL, "message" );
-               xmlNodeSetContent( leaknode, "MAP LEAKED\n" );
+               leaknode = xmlNewNode( NULL, (xmlChar*)"message" );
+               xmlNodeSetContent( leaknode, (xmlChar*)"MAP LEAKED\n" );
                xmlAddChild( leaknode, polyline );
                level[0] = (int) '0' + SYS_ERR;
                level[1] = 0;
-               xmlSetProp( leaknode, "level", (char*) &level );
+               xmlSetProp( leaknode, (xmlChar*)"level", (xmlChar*) &level );
                xml_SendNode( leaknode );
                if( leaktest )
                {
@@ -458,7 +458,7 @@ void ProcessWorldModel( void )
                                        VectorSet( normal, 0, 0, -1 );
                                
                                /* create the flare surface (note shader defaults automatically) */
-                               DrawSurfaceForFlare( mapEntityNum, origin, normal, color, (char*) flareShader, lightStyle );
+                               DrawSurfaceForFlare( mapEntityNum, origin, normal, color, flareShader, lightStyle );
                        }
                }
        }
diff --git a/tools/quake3/q3map2/game__null.h b/tools/quake3/q3map2/game__null.h
new file mode 100644 (file)
index 0000000..c2f2484
--- /dev/null
@@ -0,0 +1,98 @@
+/* -------------------------------------------------------------------------------
+
+Copyright (C) 1999-2007 id Software, Inc. and contributors.
+For a list of contributors, see the accompanying CONTRIBUTORS file.
+
+This file is part of GtkRadiant.
+
+GtkRadiant is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+GtkRadiant is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GtkRadiant; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+----------------------------------------------------------------------------------
+
+This code has been altered significantly from its original form, to support
+several games based on the Quake III Arena engine, in the form of "Q3Map2."
+
+------------------------------------------------------------------------------- */
+
+
+
+/* marker */
+#ifndef GAME__NULL_H
+#define GAME__NULL_H
+
+
+
+/* -------------------------------------------------------------------------------
+
+content and surface flags
+are in game_quake3.h
+
+------------------------------------------------------------------------------- */
+
+
+
+/* -------------------------------------------------------------------------------
+
+game_t struct
+
+------------------------------------------------------------------------------- */
+
+{
+       NULL,                   /* -game x */
+       NULL,                   /* default base game data dir */
+       NULL,                   /* unix home sub-dir */
+       NULL,                   /* magic path word */
+       NULL,                   /* shader directory */
+       0,                      /* max lightmapped surface verts */
+       0,                      /* max surface verts */
+       0,                      /* max surface indexes */
+       qfalse,                 /* flares */
+       NULL,                   /* default flare shader */
+       qfalse,                 /* wolf lighting model? */
+       0,                      /* lightmap width/height */
+       0,                      /* lightmap gamma */
+       0,                      /* lightmap exposure */
+       0,                      /* lightmap compensate */
+       0,                      /* lightgrid scale */
+       0,                      /* lightgrid ambient scale */
+       qfalse,                 /* light angle attenuation uses half-lambert curve */
+       qfalse,                 /* disable shader lightstyles hack */
+       qfalse,                 /* keep light entities on bsp */
+       0,                      /* default patchMeta subdivisions tolerance */
+       qfalse,                 /* patch casting enabled */
+       qfalse,                 /* compile deluxemaps */
+       0,                      /* deluxemaps default mode */
+       0,                      /* minimap size */
+       0,                      /* minimap sharpener */
+       0,                      /* minimap border */
+       qfalse,                 /* minimap keep aspect */
+       MINIMAP_MODE_GRAY,      /* minimap mode */
+       NULL,                   /* minimap name format */
+       NULL,                   /* bsp file prefix */
+       0,                      /* bsp file version */
+       qfalse,                 /* cod-style lump len/ofs order */
+       NULL,                   /* bsp load function */
+       NULL,                   /* bsp write function */
+
+       {
+               { NULL, 0, 0, 0, 0, 0, 0 }
+       }
+}
+
+
+
+/* end marker */
+#endif
+
index 0ddcaf86bc59e556fa7d3e2cb5127a95dfdf1b00..0289e77c826bf662c45d95ec4b12e0952515e0f1 100644 (file)
@@ -99,7 +99,7 @@ note: this function is a total hack, as it reads/writes the png struct directly!
 typedef struct pngBuffer_s
 {
        byte    *buffer;
-       int             size, offset;
+       png_size_t              size, offset;
 }
 pngBuffer_t;
 
@@ -127,8 +127,8 @@ static void LoadPNGBuffer( byte *buffer, int size, byte **pixels, int *width, in
        png_struct      *png;
        png_info        *info, *end;
        pngBuffer_t     pb;
-       int                     i, bitDepth, colorType, channels;
-       png_uint_32     w, h;
+       int                     bitDepth, colorType, channels;
+       png_uint_32     w, h, i;
        byte            **rowPointers;
        
        
index 51fda30021cea41edcbe2bad23bcd87ee88a3898..fc5a3191fb38ce206fba405d98450bd414e15952 100644 (file)
@@ -81,15 +81,15 @@ xmlNodePtr LeakFile (tree_t *tree)
        if (!linefile)
                Error ("Couldn't open %s\n", filename);
 
-  xml_node = xmlNewNode (NULL, "polyline");
+  xml_node = xmlNewNode (NULL, (xmlChar*)"polyline");
 
        count = 0;
        node = &tree->outside_node;
        while (node->occupied > 1)
        {
                int                     next;
-               portal_t        *p, *nextportal;
-               node_t          *nextnode;
+               portal_t        *p, *nextportal = NULL;
+               node_t          *nextnode = NULL;
                int                     s;
 
                // find the best portal exit
index 41bc1dc6e121b2617eda95c72f1c1df1867230a8..3af7ddbf93d3a670d78dfc064aea3c893bd82f6c 100644 (file)
@@ -1116,6 +1116,8 @@ int LightContributionToSample( trace_t *trace )
                /* return to sender */
                return 1;
        }
+       else
+               Error("Light of undefined type!");
 
        /* VorteX: set noShadow color */
        VectorScale(light->color, add, trace->colorNoShadow);
@@ -1830,7 +1832,7 @@ void LightWorld( void )
        vec3_t          color;
        float           f;
        int                     b, bt;
-       qboolean        minVertex, minGrid, ps;
+       qboolean        minVertex, minGrid;
        const char      *value;
        
 
index 6d7c54fc6d49aee5f525b47bbf7c989c7c5267d8..7db00613b6fae9ea28530bb5b610335a3df922a3 100644 (file)
@@ -414,7 +414,7 @@ subdivides a radiosity winding until it is smaller than subdivide, then generate
 static void RadSubdivideDiffuseLight( int lightmapNum, bspDrawSurface_t *ds, rawLightmap_t *lm, shaderInfo_t *si,
        float scale, float subdivide, qboolean original, radWinding_t *rw, clipWork_t *cw )
 {
-       int                             i, style;
+       int                             i, style = 0;
        float                   dist, area, value;
        vec3_t                  mins, maxs, normal, d1, d2, cross, color, gradient;
        light_t                 *light, *splash;
@@ -539,7 +539,7 @@ static void RadSubdivideDiffuseLight( int lightmapNum, bspDrawSurface_t *ds, raw
        light->falloffTolerance = falloffTolerance;
        
        /* bouncing light? */
-       if( bouncing == qfalse )
+       if( !bouncing )
        {
                /* handle first-pass lights in normal q3a style */
                value = si->value;
index d52f816b5bb5670619d0c6f88e210487f0b5f247..8e79244e542dbebed1661275af89e0f52ca07397 100644 (file)
@@ -521,13 +521,10 @@ void ClipTraceWinding( traceWinding_t *tw, vec4_t plane, traceWinding_t *front,
                                        mid.xyz[ k ] = -plane[ 3 ];
                                else
                                        mid.xyz[ k ] = a->xyz[ k ] + frac * (b->xyz[ k ] - a->xyz[ k ]);
-                               
-                               /* set texture coordinates */
-                               if( k > 1 )
-                                       continue;
-                               mid.st[ 0 ] = a->st[ 0 ] + frac * (b->st[ 0 ] - a->st[ 0 ]);
-                               mid.st[ 1 ] = a->st[ 1 ] + frac * (b->st[ 1 ] - a->st[ 1 ]);
                        }
+                       /* set texture coordinates */
+                       mid.st[ 0 ] = a->st[ 0 ] + frac * (b->st[ 0 ] - a->st[ 0 ]);
+                       mid.st[ 1 ] = a->st[ 1 ] + frac * (b->st[ 1 ] - a->st[ 1 ]);
                        
                        /* copy midpoint to front and back polygons */
                        front->v[ front->numVerts++ ] = mid;
@@ -538,39 +535,6 @@ void ClipTraceWinding( traceWinding_t *tw, vec4_t plane, traceWinding_t *front,
 
 
 
-/*
-FilterPointToTraceNodes_r() - ydnar
-debugging tool
-*/
-
-static int FilterPointToTraceNodes_r( vec3_t pt, int nodeNum )
-{
-       float                   dot;
-       traceNode_t             *node;
-       
-       
-       if( nodeNum < 0 || nodeNum >= numTraceNodes )
-               return -1;
-       
-       node = &traceNodes[ nodeNum ];
-       
-       if( node->type >= 0 )
-       {
-               dot = DotProduct( pt, node->plane ) - node->plane[ 3 ];
-               if( dot > -0.001f )
-                       FilterPointToTraceNodes_r( pt, node->children[ 0 ] );
-               if( dot < 0.001f )
-                       FilterPointToTraceNodes_r( pt, node->children[ 1 ] );
-               return -1;
-       }
-       
-       Sys_Printf( "%d ", nodeNum );
-       
-       return nodeNum;
-}
-
-
-
 /*
 FilterTraceWindingIntoNodes_r() - ydnar
 filters a trace winding into the raytracing tree
@@ -1257,7 +1221,7 @@ static void PopulateTraceNodes( void )
                        /* external model */
                        default:
                                frame = IntForKey( e, "_frame" );
-                               model = LoadModel( (char*) value, frame );
+                               model = LoadModel( value, frame );
                                if( model == NULL )
                                        continue;
                                PopulateWithPicoModel( castShadows, model, transform );
@@ -1285,7 +1249,7 @@ static void PopulateTraceNodes( void )
                        /* external model */
                        default:
                                frame = IntForKey( e, "_frame2" );
-                               model = LoadModel( (char*) value, frame );
+                               model = LoadModel( value, frame );
                                if( model == NULL )
                                        continue;
                                PopulateWithPicoModel( castShadows, model, transform );
index d1a5ca75ae989fecd73101e00002705a3262eaff..e1762234393efe247e92d3e94103e0811ec6a7ce 100644 (file)
@@ -1154,13 +1154,16 @@ void MapRawLightmap( int rawLightmapNum )
                                                if( MapQuad( lm, info, dv ) )
                                                        continue;
                                                
-                                               /* get drawverts and map first triangle */
-                                               MapTriangle( lm, info, dv, mapNonAxial );
-                                               
-                                               /* get drawverts and map second triangle */
-                                               dv[ 1 ] = &verts[ pw[ r + 2 ] ];
-                                               dv[ 2 ] = &verts[ pw[ r + 3 ] ];
-                                               MapTriangle( lm, info, dv, mapNonAxial );
+                                               for( mapNonAxial = 0; mapNonAxial < 2; mapNonAxial++ )
+                                               {
+                                                       /* get drawverts and map first triangle */
+                                                       MapTriangle( lm, info, dv, mapNonAxial );
+                                                       
+                                                       /* get drawverts and map second triangle */
+                                                       dv[ 1 ] = &verts[ pw[ r + 2 ] ];
+                                                       dv[ 2 ] = &verts[ pw[ r + 3 ] ];
+                                                       MapTriangle( lm, info, dv, mapNonAxial );
+                                               }
                                        }
                                }
                                
@@ -1714,7 +1717,9 @@ static qboolean SubmapRawLuxel( rawLightmap_t *lm, int x, int y, float bx, float
                //%     normal2 = SUPER_NORMAL( x, y );
        }
        else
-               Sys_Printf( "WARNING: Spurious lightmap S vector\n" );
+       {
+               Error( "Spurious lightmap S vector\n" );
+       }
        
        VectorSubtract( origin2, origin, originVecs[ 0 ] );
        //%     VectorSubtract( normal2, normal, normalVecs[ 0 ] );
@@ -1974,8 +1979,9 @@ illuminates the luxels
 
 void IlluminateRawLightmap( int rawLightmapNum )
 {
-       int                                     i, t, x, y, sx, sy, size, llSize, ldSize, luxelFilterRadius, lightmapNum;
+       int                                     i, t, x, y, sx, sy, size, luxelFilterRadius, lightmapNum;
        int                                     *cluster, *cluster2, mapped, lighted, totalLighted;
+       size_t                                  llSize, ldSize;
        rawLightmap_t           *lm;
        surfaceInfo_t           *info;
        qboolean                        filterColor, filterDir;
@@ -2870,16 +2876,16 @@ void IlluminateVertexes( int num )
                                        radVertLuxel[ 2 ] <= ambientColor[ 2 ] )
                                {
                                        /* nudge the sample point around a bit */
-                                       for( x = 0; x < 4; x++ )
+                                       for( x = 0; x < 5; x++ )
                                        {
                                                /* two's complement 0, 1, -1, 2, -2, etc */
                                                x1 = ((x >> 1) ^ (x & 1 ? -1 : 0)) + (x & 1);
                                                
-                                               for( y = 0; y < 4; y++ )
+                                               for( y = 0; y < 5; y++ )
                                                {
                                                        y1 = ((y >> 1) ^ (y & 1 ? -1 : 0)) + (y & 1);
                                                        
-                                                       for( z = 0; z < 4; z++ )
+                                                       for( z = 0; z < 5; z++ )
                                                        {
                                                                z1 = ((z >> 1) ^ (z & 1 ? -1 : 0)) + (z & 1);
                                                                
@@ -2892,6 +2898,21 @@ void IlluminateVertexes( int num )
                                                                trace.cluster = ClusterForPointExtFilter( origin, VERTEX_EPSILON, info->numSurfaceClusters, &surfaceClusters[ info->firstSurfaceCluster ] );
                                                                if( trace.cluster < 0 )
                                                                        continue;
+
+                                                               /* r7 dirt */
+                                                               if( dirty && !bouncing )
+                                                                       dirt = DirtForSample( &trace );
+                                                               else
+                                                                       dirt = 1.0f;
+
+                                                               /* jal: floodlight */
+                                                               floodLightAmount = 0.0f;
+                                                               VectorClear( floodColor );
+                                                               if( floodlighty && !bouncing )
+                                                               {
+                                                                       floodLightAmount = floodlightIntensity * FloodLightForSample( &trace, floodlightDistance, floodlight_lowquality );
+                                                                       VectorScale( floodlightRGB, floodLightAmount, floodColor );
+                                                               }
                                                                                                                        
                                                                /* trace */
                                                                LightingAtSample( &trace, ds->vertexStyles, colors );
@@ -3503,7 +3524,7 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag )
        int                     i, x, y, z, x1, y1, z1;
        light_t         *light, *light2, **owner;
        bspLeaf_t       *leaf;
-       vec3_t          origin, dir, mins, maxs, nullVector = { 0, 0, 0 };
+       vec3_t          origin, dir, mins, maxs;
        float           radius, intensity;
        light_t         *buckets[ 256 ];
        
@@ -3616,6 +3637,7 @@ void SetupEnvelopes( qboolean forGrid, qboolean fastFlag )
                                        /* check for fast mode */
                                        if( !(light->flags & LIGHT_FAST) && !(light->flags & LIGHT_FAST_TEMP) )
                                                light->envelope = MAX_WORLD_COORD * 8.0f;
+                                       intensity = light->photons; /* hopefully not used */
                                }
                                else
                                {
index d30906f6a827ddfaec2c7233f461dbabcae5ca08..d315a7825f875198ef489d039932126d5712f8f4 100644 (file)
@@ -291,8 +291,8 @@ static int CompareLightSurface( const void *a, const void *b )
        
        
        /* get shaders */
-       asi = surfaceInfos[ *((int*) a) ].si;
-       bsi = surfaceInfos[ *((int*) b) ].si;
+       asi = surfaceInfos[ *((const int*) a) ].si;
+       bsi = surfaceInfos[ *((const int*) b) ].si;
        
        /* dummy check */
        if( asi == NULL )
@@ -861,8 +861,8 @@ static int CompareSurfaceInfo( const void *a, const void *b )
        
 
        /* get surface info */
-       aInfo = &surfaceInfos[ *((int*) a) ];
-       bInfo = &surfaceInfos[ *((int*) b) ];
+       aInfo = &surfaceInfos[ *((const int*) a) ];
+       bInfo = &surfaceInfos[ *((const int*) b) ];
        
        /* model first */
        if( aInfo->modelindex < bInfo->modelindex )
@@ -2220,8 +2220,8 @@ static int CompareRawLightmap( const void *a, const void *b )
        
        
        /* get lightmaps */
-       alm = &rawLightmaps[ *((int*) a) ];
-       blm = &rawLightmaps[ *((int*) b) ];
+       alm = &rawLightmaps[ *((const int*) a) ];
+       blm = &rawLightmaps[ *((const int*) b) ];
        
        /* get min number of surfaces */
        min = (alm->numLightSurfaces < blm->numLightSurfaces ? alm->numLightSurfaces : blm->numLightSurfaces);
@@ -2281,8 +2281,8 @@ void StoreSurfaceLightmaps( void )
        char                            dirname[ 1024 ], filename[ 1024 ];
        shaderInfo_t            *csi;
        char                            lightmapName[ 128 ];
-       char                            *rgbGenValues[ 256 ];
-       char                            *alphaGenValues[ 256 ];
+       const char                              *rgbGenValues[ 256 ];
+       const char                              *alphaGenValues[ 256 ];
        
        
        /* note it */
@@ -3170,7 +3170,7 @@ void StoreSurfaceLightmaps( void )
                                if( rgbGenValues[ style ] == NULL )
                                {
                                        sprintf( key, "_style%drgbgen", style );
-                                       rgbGenValues[ style ] = (char*) ValueForKey( &entities[ 0 ], key );
+                                       rgbGenValues[ style ] = ValueForKey( &entities[ 0 ], key );
                                        if( rgbGenValues[ style ][ 0 ] == '\0' )
                                                rgbGenValues[ style ] = "wave noise 0.5 1 0 5.37";
                                }
@@ -3184,7 +3184,7 @@ void StoreSurfaceLightmaps( void )
                                if( alphaGenValues[ style ] == NULL )
                                {
                                        sprintf( key, "_style%dalphagen", style );
-                                       alphaGenValues[ style ] = (char*) ValueForKey( &entities[ 0 ], key );
+                                       alphaGenValues[ style ] = ValueForKey( &entities[ 0 ], key );
                                }
                                if( alphaGenValues[ style ][ 0 ] != '\0' )
                                        sprintf( alphaGen, "\t\talphaGen %s // style %d\n", alphaGenValues[ style ], style );
index 54f54441e3a04fb28192e94e1215a35672cb11d9..3bc4e6f9fc02c65c6ec9c3a5685c181b757f9d90 100644 (file)
@@ -837,7 +837,7 @@ static void ParseRawBrush( qboolean onlyLights )
        int                             planenum;
        shaderInfo_t    *si;
        vec_t                   shift[ 2 ];
-       vec_t                   rotate;
+       vec_t                   rotate = 0;
        vec_t                   scale[ 2 ];
        char                    name[ MAX_QPATH ];
        char                    shader[ MAX_QPATH ];
@@ -1693,7 +1693,7 @@ void LoadMapFile( char *filename, qboolean onlyLights )
 {              
        FILE            *file;
        brush_t         *b;
-       int                     oldNumEntities, numMapBrushes;
+       int                     oldNumEntities = 0, numMapBrushes;
        
        
        /* note it */
index a3945359413635590f18f0a84bd4f403e3dcf319..05213cf1ae545ab0efb29ec2d6801f11ee95e291 100644 (file)
@@ -78,9 +78,9 @@ PicoLoadFileFunc()
 callback for picomodel.lib
 */
 
-void PicoLoadFileFunc( char *name, byte **buffer, int *bufSize )
+void PicoLoadFileFunc( const char *name, byte **buffer, int *bufSize )
 {
-       *bufSize = vfsLoadFile( (const char*) name, (void**) buffer, 0 );
+       *bufSize = vfsLoadFile( name, (void**) buffer, 0 );
 }
 
 
@@ -158,7 +158,7 @@ picoModel_t *LoadModel( const char *name, int frame )
                Error( "MAX_MODELS (%d) exceeded, there are too many model files referenced by the map.", MAX_MODELS );
        
        /* attempt to parse model */
-       *pm = PicoLoadModel( (char*) name, frame );
+       *pm = PicoLoadModel( name, frame );
        
        /* if loading failed, make a bogus model to silence the rest of the warnings */
        if( *pm == NULL )
@@ -169,7 +169,7 @@ picoModel_t *LoadModel( const char *name, int frame )
                        return NULL;
                
                /* set data */
-               PicoSetModelName( *pm, (char*) name );
+               PicoSetModelName( *pm, name );
                PicoSetModelFrameNum( *pm, frame );
        }
        
index 8674d87f9185d8b72ab22d6f1e50709844dd30a5..e6b4d959b7d06f16dff3f7b17204edb0d7ad9e89 100644 (file)
@@ -109,6 +109,7 @@ void LokiInitPaths( char *argv0 )
                strcpy( installPath, "../" );
        #else
                char            temp[ MAX_OS_PATH ];
+               char            last0[ 2 ];
                char            *home;
                char            *path;
                char            *last;
@@ -122,7 +123,7 @@ void LokiInitPaths( char *argv0 )
                
                /* do some path divining */
                strcpy( temp, argv0 );
-               if( strrchr( temp, '/' ) )
+               if( strrchr( argv0, '/' ) )
                        argv0 = strrchr( argv0, '/' ) + 1;
                else
                {
@@ -130,6 +131,7 @@ void LokiInitPaths( char *argv0 )
                        path = getenv( "PATH" );
                        
                        /* minor setup */
+                       last = last0;
                        last[ 0 ] = path[ 0 ];
                        last[ 1 ] = '\0';
                        found = qfalse;
index b0e5f4725019955b37e7cc080ffa869ae1a38c5e..83c756d4bdebf9504d079f6b99968b844fc1cde4 100644 (file)
@@ -522,7 +522,7 @@ general types
 ------------------------------------------------------------------------------- */
 
 /* ydnar: for smaller structs */
-typedef char   qb_t;
+typedef unsigned char  qb_t;
 
 
 /* ydnar: for q3map_tcMod */
@@ -1656,7 +1656,7 @@ tree_t                                            *FaceBSP( face_t *list );
 
 /* model.c */
 void                                           PicoPrintFunc( int level, const char *str );
-void                                           PicoLoadFileFunc( char *name, byte **buffer, int *bufSize );
+void                                           PicoLoadFileFunc( const char *name, byte **buffer, int *bufSize );
 picoModel_t                                    *FindModel( const char *name, int frame );
 picoModel_t                                    *LoadModel( const char *name, int frame );
 void                                           InsertModel( const char *name, int skin, int frame, m4x4_t transform, remap_t *remap, shaderInfo_t *celShader, int eNum, int castShadows, int recvShadows, int spawnFlags, float lightmapScale, int lightmapSampleSize, float shadeAngle );
@@ -1667,6 +1667,7 @@ void                                              AddTriangleModels( entity_t *e );
 mapDrawSurface_t                       *AllocDrawSurface( surfaceType_t type );
 void                                           FinishSurface( mapDrawSurface_t *ds );
 void                                           StripFaceSurface( mapDrawSurface_t *ds );
+void                                           MaxAreaFaceSurface( mapDrawSurface_t *ds );
 qboolean                                       CalcSurfaceTextureRange( mapDrawSurface_t *ds );
 qboolean                                       CalcLightmapAxis( vec3_t normal, vec3_t axis );
 void                                           ClassifySurfaces( int numSurfs, mapDrawSurface_t *ds );
@@ -1679,7 +1680,7 @@ void                                              ClearSurface( mapDrawSurface_t *ds );
 void                                           AddEntitySurfaceModels( entity_t *e );
 mapDrawSurface_t                       *DrawSurfaceForSide( entity_t *e, brush_t *b, side_t *s, winding_t *w );
 mapDrawSurface_t                       *DrawSurfaceForMesh( entity_t *e, parseMesh_t *p, mesh_t *mesh );
-mapDrawSurface_t                       *DrawSurfaceForFlare( int entNum, vec3_t origin, vec3_t normal, vec3_t color, char *flareShader, int lightStyle );
+mapDrawSurface_t                       *DrawSurfaceForFlare( int entNum, vec3_t origin, vec3_t normal, vec3_t color, const char *flareShader, int lightStyle );
 mapDrawSurface_t                       *DrawSurfaceForShader( char *shader );
 void                                           ClipSidesIntoTree( entity_t *e, tree_t *tree );
 void                                           MakeDebugPortalSurfs( tree_t *tree );
@@ -1949,7 +1950,7 @@ Q_EXTERN game_t                           games[]
                                                                ,
                                                                #include "game_prophecy.h"      /* vortex: prophecy game ( darkplaces q1 engine) */
                                                                ,
-                                                               { NULL }        /* null game */
+                                                               #include "game__null.h" /* null game (must be last item) */
                                                        };
 #endif
 Q_EXTERN game_t                                *game Q_ASSIGN( &games[ 0 ] );
index 920aff35cbc3380ce40da24f06ca6f21cad7033f..e72c012a869b15d1737923d1b2a7d500972ec7bc 100644 (file)
@@ -1207,7 +1207,7 @@ DrawSurfaceForFlare() - ydnar
 creates a flare draw surface
 */
 
-mapDrawSurface_t *DrawSurfaceForFlare( int entNum, vec3_t origin, vec3_t normal, vec3_t color, char *flareShader, int lightStyle )
+mapDrawSurface_t *DrawSurfaceForFlare( int entNum, vec3_t origin, vec3_t normal, vec3_t color, const char *flareShader, int lightStyle )
 {
        mapDrawSurface_t        *ds;
        
index 440fd94694b217209405962b74d87290debf79c7..5cadc1d9df99d708bf8233392fef3f8723639fe0 100644 (file)
@@ -346,7 +346,7 @@ void LoadSurfaceExtraFile( const char *path )
        }
        
        /* parse the file */
-       ParseFromMemory( buffer, size );
+       ParseFromMemory( (char *) buffer, size );
        
        /* tokenize it */
        while( 1 )
index be61dc86d1e0a7318218049c322e2a45e775402f..0e300dde069625a8547b19dcfdaad38a7b19bdfe 100644 (file)
@@ -771,6 +771,7 @@ void StripFaceSurface( mapDrawSurface_t *ds )
                        Error( "MAX_INDEXES exceeded for surface (%d > %d) (%d verts)", numIndexes, MAX_INDEXES, ds->numVerts );
                
                /* try all possible orderings of the points looking for a non-degenerate strip order */
+               ni = 0;
                for( r = 0; r < ds->numVerts; r++ )
                {
                        /* set rotation */
@@ -941,50 +942,6 @@ void MakeEntityMetaTriangles( entity_t *e )
 
 
 
-/*
-PointTriangleIntersect()
-assuming that all points lie in plane, determine if pt
-is inside the triangle abc
-code originally (c) 2001 softSurfer (www.softsurfer.com)
-*/
-
-#define MIN_OUTSIDE_EPSILON            -0.01f
-#define MAX_OUTSIDE_EPSILON            1.01f
-
-static qboolean PointTriangleIntersect( vec3_t pt, vec4_t plane, vec3_t a, vec3_t b, vec3_t c, vec3_t bary )
-{
-       vec3_t  u, v, w;
-       float   uu, uv, vv, wu, wv, d;
-       
-       
-       /* make vectors */
-       VectorSubtract( b, a, u );
-       VectorSubtract( c, a, v );
-       VectorSubtract( pt, a, w );
-       
-       /* more setup */
-       uu = DotProduct( u, u );
-       uv = DotProduct( u, v );
-       vv = DotProduct( v, v );
-       wu = DotProduct( w, u );
-       wv = DotProduct( w, v );
-       d = uv * uv - uu * vv;
-       
-       /* calculate barycentric coordinates */
-       bary[ 1 ] = (uv * wv - vv * wu) / d;
-       if( bary[ 1 ] < MIN_OUTSIDE_EPSILON || bary[ 1 ] > MAX_OUTSIDE_EPSILON )
-               return qfalse;
-       bary[ 2 ] = (uv * wv - uu * wv) / d;
-       if( bary[ 2 ] < MIN_OUTSIDE_EPSILON || bary[ 2 ] > MAX_OUTSIDE_EPSILON )
-               return qfalse;
-       bary[ 0 ] = 1.0f - (bary[ 1 ] + bary[ 2 ]);
-       
-       /* point is in triangle */
-       return qtrue;
-}
-
-
-
 /*
 CreateEdge()
 sets up an edge structure from a plane and 2 points that the edge ab falls lies in
@@ -1444,7 +1401,7 @@ static int AddMetaTriangleToSurface( mapDrawSurface_t *ds, metaTriangle_t *tri,
 {
        int                                     i, score, coincident, ai, bi, ci, oldTexRange[ 2 ];
        float                           lmMax;
-       vec3_t                          mins, maxs, p;
+       vec3_t                          mins, maxs;
        qboolean                        inTexRange, es, et;
        mapDrawSurface_t        old;
        
@@ -1807,37 +1764,37 @@ static int CompareMetaTriangles( const void *a, const void *b )
        
        
        /* shader first */
-       if( ((metaTriangle_t*) a)->si < ((metaTriangle_t*) b)->si )
+       if( ((const metaTriangle_t*) a)->si < ((const metaTriangle_t*) b)->si )
                return 1;
-       else if( ((metaTriangle_t*) a)->si > ((metaTriangle_t*) b)->si )
+       else if( ((const metaTriangle_t*) a)->si > ((const metaTriangle_t*) b)->si )
                return -1;
        
        /* then fog */
-       else if( ((metaTriangle_t*) a)->fogNum < ((metaTriangle_t*) b)->fogNum )
+       else if( ((const metaTriangle_t*) a)->fogNum < ((const metaTriangle_t*) b)->fogNum )
                return 1;
-       else if( ((metaTriangle_t*) a)->fogNum > ((metaTriangle_t*) b)->fogNum )
+       else if( ((const metaTriangle_t*) a)->fogNum > ((const metaTriangle_t*) b)->fogNum )
                return -1;
        
        /* then plane */
        #if 0
-               else if( npDegrees == 0.0f && ((metaTriangle_t*) a)->si->nonplanar == qfalse &&
-                       ((metaTriangle_t*) a)->planeNum >= 0 && ((metaTriangle_t*) a)->planeNum >= 0 )
+               else if( npDegrees == 0.0f && ((const metaTriangle_t*) a)->si->nonplanar == qfalse &&
+                       ((const metaTriangle_t*) a)->planeNum >= 0 && ((const metaTriangle_t*) a)->planeNum >= 0 )
                {
-                       if( ((metaTriangle_t*) a)->plane[ 3 ] < ((metaTriangle_t*) b)->plane[ 3 ] )
+                       if( ((const metaTriangle_t*) a)->plane[ 3 ] < ((const metaTriangle_t*) b)->plane[ 3 ] )
                                return 1;
-                       else if( ((metaTriangle_t*) a)->plane[ 3 ] > ((metaTriangle_t*) b)->plane[ 3 ] )
+                       else if( ((const metaTriangle_t*) a)->plane[ 3 ] > ((const metaTriangle_t*) b)->plane[ 3 ] )
                                return -1;
-                       else if( ((metaTriangle_t*) a)->plane[ 0 ] < ((metaTriangle_t*) b)->plane[ 0 ] )
+                       else if( ((const metaTriangle_t*) a)->plane[ 0 ] < ((const metaTriangle_t*) b)->plane[ 0 ] )
                                return 1;
-                       else if( ((metaTriangle_t*) a)->plane[ 0 ] > ((metaTriangle_t*) b)->plane[ 0 ] )
+                       else if( ((const metaTriangle_t*) a)->plane[ 0 ] > ((const metaTriangle_t*) b)->plane[ 0 ] )
                                return -1;
-                       else if( ((metaTriangle_t*) a)->plane[ 1 ] < ((metaTriangle_t*) b)->plane[ 1 ] )
+                       else if( ((const metaTriangle_t*) a)->plane[ 1 ] < ((const metaTriangle_t*) b)->plane[ 1 ] )
                                return 1;
-                       else if( ((metaTriangle_t*) a)->plane[ 1 ] > ((metaTriangle_t*) b)->plane[ 1 ] )
+                       else if( ((const metaTriangle_t*) a)->plane[ 1 ] > ((const metaTriangle_t*) b)->plane[ 1 ] )
                                return -1;
-                       else if( ((metaTriangle_t*) a)->plane[ 2 ] < ((metaTriangle_t*) b)->plane[ 2 ] )
+                       else if( ((const metaTriangle_t*) a)->plane[ 2 ] < ((const metaTriangle_t*) b)->plane[ 2 ] )
                                return 1;
-                       else if( ((metaTriangle_t*) a)->plane[ 2 ] > ((metaTriangle_t*) b)->plane[ 2 ] )
+                       else if( ((const metaTriangle_t*) a)->plane[ 2 ] > ((const metaTriangle_t*) b)->plane[ 2 ] )
                                return -1;
                }
        #endif
@@ -1849,8 +1806,8 @@ static int CompareMetaTriangles( const void *a, const void *b )
        VectorSet( bMins, 999999, 999999, 999999 );
        for( i = 0; i < 3; i++ )
        {
-               av = ((metaTriangle_t*) a)->indexes[ i ];
-               bv = ((metaTriangle_t*) b)->indexes[ i ];
+               av = ((const metaTriangle_t*) a)->indexes[ i ];
+               bv = ((const metaTriangle_t*) b)->indexes[ i ];
                for( j = 0; j < 3; j++ )
                {
                        if( metaVerts[ av ].xyz[ j ] < aMins[ j ] )
index f274f9580a38cff8791ce0608e5b119093272234..cde7ece495bdb6fffcec38192ae4579401b75221 100644 (file)
@@ -600,8 +600,8 @@ EdgeCompare
 int EdgeCompare( const void *elem1, const void *elem2 ) {
        float   d1, d2;
 
-       d1 = ((originalEdge_t *)elem1)->length;
-       d2 = ((originalEdge_t *)elem2)->length;
+       d1 = ((const originalEdge_t *)elem1)->length;
+       d2 = ((const originalEdge_t *)elem2)->length;
 
        if ( d1 < d2 ) {
                return -1;
index 0bc8313f0d7113a8d27e54a2105b8333727cd546..6332113d4abe418f57fe884fc3d870a0aa5f54fa 100644 (file)
@@ -102,9 +102,9 @@ the earlier information.
 */
 int PComp (const void *a, const void *b)
 {
-       if ( (*(vportal_t **)a)->nummightsee == (*(vportal_t **)b)->nummightsee)
+       if ( (*(const vportal_t *const *)a)->nummightsee == (*(const vportal_t *const *)b)->nummightsee)
                return 0;
-       if ( (*(vportal_t **)a)->nummightsee < (*(vportal_t **)b)->nummightsee)
+       if ( (*(const vportal_t *const *)a)->nummightsee < (*(const vportal_t *const *)b)->nummightsee)
                return -1;
        return 1;
 }
@@ -932,8 +932,8 @@ void LoadPortals (char *name)
                        Error ("LoadPortals: reading portal %i", i);
                if (numpoints > MAX_POINTS_ON_WINDING)
                        Error ("LoadPortals: portal %i has too many points", i);
-               if ( (unsigned)leafnums[0] > portalclusters
-               || (unsigned)leafnums[1] > portalclusters)
+               if (leafnums[0] > portalclusters
+               || leafnums[1] > portalclusters)
                        Error ("LoadPortals: reading portal %i", i);
                if (fscanf (f, "%i ", &hint) != 1)
                        Error ("LoadPortals: reading hint state");