This is an automated email from the git hooks/post-receive script.

tobi pushed a commit to branch master
in repository dhewm3.

commit 45cf427f02d869f9f64f3a5f0e85f2f0a934bece
Author: Tobias Frost <[email protected]>
Date:   Thu Jul 7 17:52:04 2016 +0200

    Imported Upstream version 1.4.1+dfsg
---
 README.md                           |  13 ++-
 neo/cm/CollisionModel_load.cpp      |   4 +-
 neo/d3xp/Pvs.cpp                    |   8 +-
 neo/d3xp/SecurityCamera.cpp         |   2 +-
 neo/d3xp/Weapon.cpp                 |   9 +-
 neo/d3xp/ai/AI.cpp                  |   2 +-
 neo/d3xp/gamesys/SysCmds.cpp        |   2 +-
 neo/framework/FileSystem.cpp        |   6 +-
 neo/framework/Licensee.h            |   2 +-
 neo/game/Pvs.cpp                    |   8 +-
 neo/game/SecurityCamera.cpp         |   2 +-
 neo/game/Weapon.cpp                 |   8 +-
 neo/game/ai/AI.cpp                  |   2 +-
 neo/game/gamesys/SysCmds.cpp        |   2 +-
 neo/idlib/Lib.cpp                   |  10 ++-
 neo/idlib/math/Matrix.h             |   3 +
 neo/idlib/math/Polynomial.h         |   8 ++
 neo/idlib/math/Simd.cpp             | 160 ++++++++++++++++++------------------
 neo/renderer/Model_ma.cpp           |  13 ++-
 neo/renderer/RenderSystem_init.cpp  |  65 +++++++++++++--
 neo/sys/events.cpp                  |  40 ++++++++-
 neo/sys/posix/posix_net.cpp         |   1 +
 neo/tools/compilers/roqvq/codec.cpp |   8 +-
 neo/ui/Winvar.cpp                   |   2 +-
 neo/ui/Winvar.h                     |   2 +-
 25 files changed, 255 insertions(+), 127 deletions(-)

diff --git a/README.md b/README.md
index 4615146..2b5537c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # ABOUT
 
-_dhewm 3_ is a _Doom 3_ GPL source modification.
+_dhewm 3_ is a _Doom 3_ GPL source port, know to work on at least Windows, 
Linux, Mac OS X and FreeBSD.
 
 The goal of _dhewm 3_ is bring _DOOM 3_ with the help of SDL to all suitable
 platforms.
@@ -10,6 +10,8 @@ altering the original gameplay.
 
 **The project is hosted at:** https://github.com/dhewm
 
+**Download latest Release:** https://github.com/dhewm/dhewm3/releases/latest
+
 **Consult the FAQ at:** https://github.com/dhewm/dhewm3/wiki/FAQ
 
 **Report bugs here:** https://github.com/dhewm/dhewm3/issues
@@ -22,7 +24,7 @@ Compared to the original _DOOM 3_, the changes of _dhewm 3_ 
worth mentioning are
 - 64bit port
 - SDL for low level OS support, OpenGL and input handling
 - OpenAL for audio output, all OS specific audio backends are gone
-- OpenAL EFX for EAX reverb effects (read: EAX on all platforms)
+- OpenAL EFX for EAX reverb effects (read: EAX-like sound effects on all 
platforms/hardware)
 - Better support for widescreen (and arbitrary display resolutions)
 - A portable build system based on CMake
 - (Cross-)compilation with mingw-w64
@@ -82,7 +84,7 @@ the cmake command there, pointing it at the neo/ folder from 
this repository:
 
 OSX users need to point cmake at OpenAL Soft (better solutions welcome):
 
-`cmake -DOPENAL_LIBRARY=/usr/local/lib/libopenal.dylib 
-DOPENAL_INCLUDE_DIR=/usr/local/include /path/to/repository/neo`
+`cmake -DOPENAL_LIBRARY=/usr/local/opt/openal-soft/lib/libopenal.dylib 
-DOPENAL_INCLUDE_DIR=/usr/local/opt/openal-soft/include /path/to/repository/neo`
 
 ## Using the provided Windows binaries
 
@@ -131,6 +133,11 @@ The Doom 3 GPL source code release does not include 
functionality enabling rende
 of stencil shadows via the "depth fail" method, a functionality commonly known 
as
 "Carmack's Reverse".
 
+***Note*** that this **does *not* change the visual appereance** of the game.
+The shadows look the same, they're just created in a slightly different way.
+In theory there might be a small performance impact, but on hardware less than
+ten years old it shouldn't make a difference.
+
 ## MayaImport
 
 The code for our Maya export plugin is included, if you are a Maya licensee
diff --git a/neo/cm/CollisionModel_load.cpp b/neo/cm/CollisionModel_load.cpp
index ef786a0..acd2a3d 100644
--- a/neo/cm/CollisionModel_load.cpp
+++ b/neo/cm/CollisionModel_load.cpp
@@ -1887,7 +1887,7 @@ static int CM_FindSplitter( const cm_node_t *node, const 
idBounds &bounds, int *
                                                continue;
                                        }
                                        // find the most centered splitter
-                                       t = abs((bounds[1][type] - dist) - 
(dist - bounds[0][type]));
+                                       t = idMath::Fabs((bounds[1][type] - 
dist) - (dist - bounds[0][type]));
                                        if ( t < bestt ) {
                                                bestt = t;
                                                *planeType = type;
@@ -1907,7 +1907,7 @@ static int CM_FindSplitter( const cm_node_t *node, const 
idBounds &bounds, int *
                                                continue;
                                        }
                                        // find the most centered splitter
-                                       t = abs((bounds[1][type] - dist) - 
(dist - bounds[0][type]));
+                                       t = idMath::Fabs((bounds[1][type] - 
dist) - (dist - bounds[0][type]));
                                        if ( t < bestt ) {
                                                bestt = t;
                                                *planeType = type;
diff --git a/neo/d3xp/Pvs.cpp b/neo/d3xp/Pvs.cpp
index 74781e7..46e16f1 100644
--- a/neo/d3xp/Pvs.cpp
+++ b/neo/d3xp/Pvs.cpp
@@ -861,20 +861,20 @@ idPVS::Shutdown
 */
 void idPVS::Shutdown( void ) {
        if ( connectedAreas ) {
-               delete connectedAreas;
+               delete[] connectedAreas;
                connectedAreas = NULL;
        }
        if ( areaQueue ) {
-               delete areaQueue;
+               delete[] areaQueue;
                areaQueue = NULL;
        }
        if ( areaPVS ) {
-               delete areaPVS;
+               delete[] areaPVS;
                areaPVS = NULL;
        }
        if ( currentPVS ) {
                for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) {
-                       delete currentPVS[i].pvs;
+                       delete[] currentPVS[i].pvs;
                        currentPVS[i].pvs = NULL;
                }
        }
diff --git a/neo/d3xp/SecurityCamera.cpp b/neo/d3xp/SecurityCamera.cpp
index c16405a..36a0cbe 100644
--- a/neo/d3xp/SecurityCamera.cpp
+++ b/neo/d3xp/SecurityCamera.cpp
@@ -140,7 +140,7 @@ void idSecurityCamera::Spawn( void ) {
        }
 
        negativeSweep = ( sweepAngle < 0 ) ? true : false;
-       sweepAngle = abs( sweepAngle );
+       sweepAngle = idMath::Fabs( sweepAngle );
 
        scanFovCos = cos( scanFov * idMath::PI / 360.0f );
 
diff --git a/neo/d3xp/Weapon.cpp b/neo/d3xp/Weapon.cpp
index 2101381..30f8882 100644
--- a/neo/d3xp/Weapon.cpp
+++ b/neo/d3xp/Weapon.cpp
@@ -3446,7 +3446,14 @@ void idWeapon::Event_LaunchProjectiles( int 
num_projectiles, float spread, float
                        // make sure the projectile starts inside the bounding 
box of the owner
                        if ( i == 0 ) {
                                muzzle_pos = muzzleOrigin + playerViewAxis[ 0 ] 
* 2.0f;
-                               if ( ( ownerBounds - 
projBounds).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) {
+
+                               // DG: sometimes the assertion in 
idBounds::operator-(const idBounds&) triggers
+                               //     (would get bounding box with negative 
volume)
+                               //     => check that before doing ownerBounds - 
projBounds (equivalent to the check in the assertion)
+                               idVec3 obDiff = ownerBounds[1] - ownerBounds[0];
+                               idVec3 pbDiff = projBounds[1] - projBounds[0];
+                               bool boundsSubLegal =  obDiff.x > pbDiff.x && 
obDiff.y > pbDiff.y && obDiff.z > pbDiff.z;
+                               if ( boundsSubLegal && ( ownerBounds - 
projBounds ).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) {
                                        start = muzzle_pos + distance * 
playerViewAxis[0];
                                } else {
                                        start = ownerBounds.GetCenter();
diff --git a/neo/d3xp/ai/AI.cpp b/neo/d3xp/ai/AI.cpp
index 1353689..887594b 100644
--- a/neo/d3xp/ai/AI.cpp
+++ b/neo/d3xp/ai/AI.cpp
@@ -2233,7 +2233,7 @@ bool idAI::NewWanderDir( const idVec3 &dest ) {
        }
 
        // try other directions
-       if ( ( gameLocal.random.RandomInt() & 1 ) || abs( deltay ) > abs( 
deltax ) ) {
+       if ( ( gameLocal.random.RandomInt() & 1 ) || idMath::Fabs( deltay ) > 
idMath::Fabs( deltax ) ) {
                tdir = d[ 1 ];
                d[ 1 ] = d[ 2 ];
                d[ 2 ] = tdir;
diff --git a/neo/d3xp/gamesys/SysCmds.cpp b/neo/d3xp/gamesys/SysCmds.cpp
index 8dc894a..9871fe0 100644
--- a/neo/d3xp/gamesys/SysCmds.cpp
+++ b/neo/d3xp/gamesys/SysCmds.cpp
@@ -140,7 +140,7 @@ void Cmd_ListSpawnArgs_f( const idCmdArgs &args ) {
 
        for ( i = 0; i < ent->spawnArgs.GetNumKeyVals(); i++ ) {
                const idKeyValue *kv = ent->spawnArgs.GetKeyVal( i );
-               gameLocal.Printf( "\"%s\"  "S_COLOR_WHITE"\"%s\"\n", 
kv->GetKey().c_str(), kv->GetValue().c_str() );
+               gameLocal.Printf( "\"%s\"  " S_COLOR_WHITE "\"%s\"\n", 
kv->GetKey().c_str(), kv->GetValue().c_str() );
        }
 }
 
diff --git a/neo/framework/FileSystem.cpp b/neo/framework/FileSystem.cpp
index e5bab70..4800278 100644
--- a/neo/framework/FileSystem.cpp
+++ b/neo/framework/FileSystem.cpp
@@ -1344,7 +1344,7 @@ pack_t *idFileSystemLocal::LoadZipFile( const char 
*zipfile ) {
                        unzClose(uf);
                        delete[] buildBuffer;
                        delete pack;
-
+                       Mem_Free( fs_headerLongs );
                        return NULL;
                }
        }
@@ -3368,7 +3368,7 @@ size_t idFileSystemLocal::CurlWriteFunction( void *ptr, 
size_t size, size_t nmem
                return size * nmemb;
        }
        #ifdef _WIN32
-               return _write( 
static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()->_file, ptr, size * nmemb 
);
+               return _write( 
_fileno(static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()), ptr, size * 
nmemb );
        #else
                return fwrite( ptr, size, nmemb, 
static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr() );
        #endif
@@ -3416,7 +3416,7 @@ int BackgroundDownloadThread( void *pexit ) {
                if ( bgl->opcode == DLTYPE_FILE ) {
                        // use the low level read function, because fread may 
allocate memory
                        #if defined(WIN32)
-                               _read( 
static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()->_file, bgl->file.buffer, 
bgl->file.length );
+                               _read( 
_fileno(static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr()), 
bgl->file.buffer, bgl->file.length );
                        #else
                                fread(  bgl->file.buffer, bgl->file.length, 1, 
static_cast<idFile_Permanent*>(bgl->f)->GetFilePtr() );
                        #endif
diff --git a/neo/framework/Licensee.h b/neo/framework/Licensee.h
index 991c929..1225127 100644
--- a/neo/framework/Licensee.h
+++ b/neo/framework/Licensee.h
@@ -36,7 +36,7 @@ If you have questions concerning this license or the 
applicable additional terms
 
 #define GAME_NAME                                              "dhewm 3"       
        // appears on window titles and errors
 
-#define ENGINE_VERSION                                 "dhewm 3 1.4.0" // 
printed in console
+#define ENGINE_VERSION                                 "dhewm 3 1.4.1" // 
printed in console
 
 // paths
 #define        BASE_GAMEDIR                                    "base"
diff --git a/neo/game/Pvs.cpp b/neo/game/Pvs.cpp
index 5c189e0..16e845a 100644
--- a/neo/game/Pvs.cpp
+++ b/neo/game/Pvs.cpp
@@ -861,20 +861,20 @@ idPVS::Shutdown
 */
 void idPVS::Shutdown( void ) {
        if ( connectedAreas ) {
-               delete connectedAreas;
+               delete[] connectedAreas;
                connectedAreas = NULL;
        }
        if ( areaQueue ) {
-               delete areaQueue;
+               delete[] areaQueue;
                areaQueue = NULL;
        }
        if ( areaPVS ) {
-               delete areaPVS;
+               delete[] areaPVS;
                areaPVS = NULL;
        }
        if ( currentPVS ) {
                for ( int i = 0; i < MAX_CURRENT_PVS; i++ ) {
-                       delete currentPVS[i].pvs;
+                       delete[] currentPVS[i].pvs;
                        currentPVS[i].pvs = NULL;
                }
        }
diff --git a/neo/game/SecurityCamera.cpp b/neo/game/SecurityCamera.cpp
index c16405a..36a0cbe 100644
--- a/neo/game/SecurityCamera.cpp
+++ b/neo/game/SecurityCamera.cpp
@@ -140,7 +140,7 @@ void idSecurityCamera::Spawn( void ) {
        }
 
        negativeSweep = ( sweepAngle < 0 ) ? true : false;
-       sweepAngle = abs( sweepAngle );
+       sweepAngle = idMath::Fabs( sweepAngle );
 
        scanFovCos = cos( scanFov * idMath::PI / 360.0f );
 
diff --git a/neo/game/Weapon.cpp b/neo/game/Weapon.cpp
index d889c68..a381ae2 100644
--- a/neo/game/Weapon.cpp
+++ b/neo/game/Weapon.cpp
@@ -2941,7 +2941,13 @@ void idWeapon::Event_LaunchProjectiles( int 
num_projectiles, float spread, float
                        // make sure the projectile starts inside the bounding 
box of the owner
                        if ( i == 0 ) {
                                muzzle_pos = muzzleOrigin + playerViewAxis[ 0 ] 
* 2.0f;
-                               if ( ( ownerBounds - 
projBounds).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) {
+                               // DG: sometimes the assertion in 
idBounds::operator-(const idBounds&) triggers
+                               //     (would get bounding box with negative 
volume)
+                               //     => check that before doing ownerBounds - 
projBounds (equivalent to the check in the assertion)
+                               idVec3 obDiff = ownerBounds[1] - ownerBounds[0];
+                               idVec3 pbDiff = projBounds[1] - projBounds[0];
+                               bool boundsSubLegal =  obDiff.x > pbDiff.x && 
obDiff.y > pbDiff.y && obDiff.z > pbDiff.z;
+                               if ( boundsSubLegal && ( ownerBounds - 
projBounds ).RayIntersection( muzzle_pos, playerViewAxis[0], distance ) ) {
                                        start = muzzle_pos + distance * 
playerViewAxis[0];
                                } else {
                                        start = ownerBounds.GetCenter();
diff --git a/neo/game/ai/AI.cpp b/neo/game/ai/AI.cpp
index cc99b87..2ac9948 100644
--- a/neo/game/ai/AI.cpp
+++ b/neo/game/ai/AI.cpp
@@ -2148,7 +2148,7 @@ bool idAI::NewWanderDir( const idVec3 &dest ) {
        }
 
        // try other directions
-       if ( ( gameLocal.random.RandomInt() & 1 ) || abs( deltay ) > abs( 
deltax ) ) {
+       if ( ( gameLocal.random.RandomInt() & 1 ) || idMath::Fabs( deltay ) > 
idMath::Fabs( deltax ) ) {
                tdir = d[ 1 ];
                d[ 1 ] = d[ 2 ];
                d[ 2 ] = tdir;
diff --git a/neo/game/gamesys/SysCmds.cpp b/neo/game/gamesys/SysCmds.cpp
index 670a90c..732d506 100644
--- a/neo/game/gamesys/SysCmds.cpp
+++ b/neo/game/gamesys/SysCmds.cpp
@@ -140,7 +140,7 @@ void Cmd_ListSpawnArgs_f( const idCmdArgs &args ) {
 
        for ( i = 0; i < ent->spawnArgs.GetNumKeyVals(); i++ ) {
                const idKeyValue *kv = ent->spawnArgs.GetKeyVal( i );
-               gameLocal.Printf( "\"%s\"  "S_COLOR_WHITE"\"%s\"\n", 
kv->GetKey().c_str(), kv->GetValue().c_str() );
+               gameLocal.Printf( "\"%s\"  " S_COLOR_WHITE "\"%s\"\n", 
kv->GetKey().c_str(), kv->GetValue().c_str() );
        }
 }
 
diff --git a/neo/idlib/Lib.cpp b/neo/idlib/Lib.cpp
index 954adc5..0976c85 100644
--- a/neo/idlib/Lib.cpp
+++ b/neo/idlib/Lib.cpp
@@ -26,7 +26,7 @@ If you have questions concerning this license or the 
applicable additional terms
 ===========================================================================
 */
 
-#if defined( MACOS_X )
+#if defined( MACOS_X ) || defined(__unix__)
 #include <signal.h>
 #include <sys/types.h>
 #endif
@@ -514,8 +514,14 @@ void AssertFailed( const char *file, int line, const char 
*expression ) {
        idLib::sys->DebugPrintf( "\n\nASSERTION FAILED!\n%s(%d): '%s'\n", file, 
line, expression );
 #ifdef _MSC_VER
        __debugbreak();
+       _exit(1);
+#elif defined(__unix__)
+       // __builtin_trap() causes an illegal instruction which is kinda ugly.
+       // especially if you'd like to be able to continue after the assertion 
during debugging
+       raise(SIGTRAP); // this will break into the debugger.
 #elif defined( __GNUC__ )
        __builtin_trap();
-#endif
        _exit(1);
+#endif
+
 }
diff --git a/neo/idlib/math/Matrix.h b/neo/idlib/math/Matrix.h
index 24ed20f..785ac8f 100644
--- a/neo/idlib/math/Matrix.h
+++ b/neo/idlib/math/Matrix.h
@@ -30,6 +30,9 @@ If you have questions concerning this license or the 
applicable additional terms
 #define __MATH_MATRIX_H__
 
 #include "idlib/math/Vector.h"
+#ifdef _WIN32
+ #include <malloc.h>
+#endif
 
 /*
 ===============================================================================
diff --git a/neo/idlib/math/Polynomial.h b/neo/idlib/math/Polynomial.h
index 840d098..a2ce875 100644
--- a/neo/idlib/math/Polynomial.h
+++ b/neo/idlib/math/Polynomial.h
@@ -31,6 +31,9 @@ If you have questions concerning this license or the 
applicable additional terms
 
 #include "idlib/math/Complex.h"
 #include "idlib/Heap.h"
+#ifdef _WIN32
+ #include <malloc.h>
+#endif
 
 /*
 ===============================================================================
@@ -50,6 +53,11 @@ public:
                                        explicit idPolynomial( float a, float 
b, float c, float d );
                                        explicit idPolynomial( float a, float 
b, float c, float d, float e );
 
+                                       ~idPolynomial() // DG: don't leak 
coefficient's memory!
+                                       {
+                                               Mem_Free16( coefficient );
+                                       }
+
        float                   operator[]( int index ) const;
        float &                 operator[]( int index );
 
diff --git a/neo/idlib/math/Simd.cpp b/neo/idlib/math/Simd.cpp
index 8caf5b2..7fbad1e 100644
--- a/neo/idlib/math/Simd.cpp
+++ b/neo/idlib/math/Simd.cpp
@@ -289,7 +289,7 @@ void TestAdd( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Add( float + float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -314,7 +314,7 @@ void TestAdd( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Add( float[] + float[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -363,7 +363,7 @@ void TestSub( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Sub( float + float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -388,7 +388,7 @@ void TestSub( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Sub( float[] + float[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -437,7 +437,7 @@ void TestMul( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Mul( float * float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
 
@@ -463,7 +463,7 @@ void TestMul( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Mul( float[] * float[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -515,7 +515,7 @@ void TestDiv( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Div( float * float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
 
@@ -541,7 +541,7 @@ void TestDiv( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Div( float[] * float[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -596,7 +596,7 @@ void TestMulAdd( void ) {
                                break;
                        }
                }
-               result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+               result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
                PrintClocks( va( "   simd->MulAdd( float * float[%2d] ) %s", j, 
result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -652,7 +652,7 @@ void TestMulSub( void ) {
                                break;
                        }
                }
-               result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+               result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
                PrintClocks( va( "   simd->MulSub( float * float[%2d] ) %s", j, 
result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -718,7 +718,7 @@ void TestDot( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Dot( idVec3 * idVec3[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -744,7 +744,7 @@ void TestDot( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Dot( idVec3 * idPlane[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -770,7 +770,7 @@ void TestDot( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Dot( idVec3 * idDrawVert[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -796,7 +796,7 @@ void TestDot( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Dot( idPlane * idVec3[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -822,7 +822,7 @@ void TestDot( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Dot( idPlane * idPlane[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -848,7 +848,7 @@ void TestDot( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Dot( idPlane * idDrawVert[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -874,7 +874,7 @@ void TestDot( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Dot( idVec3[] * idVec3[] ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -899,7 +899,7 @@ void TestDot( void ) {
                        StopRecordTime( end );
                        GetBest( start, end, bestClocksSIMD );
                }
-               result = idMath::Fabs( dot1 - dot2 ) < 1e-4f ? "ok" : 
S_COLOR_RED"X";
+               result = idMath::Fabs( dot1 - dot2 ) < 1e-4f ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->Dot( float[%2d] * float[%2d] ) %s", 
j, j, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -947,7 +947,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpGT( float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -974,7 +974,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpGT( 2, float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
        // ======================
@@ -1001,7 +1001,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpGE( float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -1028,7 +1028,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpGE( 2, float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
        // ======================
@@ -1055,7 +1055,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpLT( float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -1082,7 +1082,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpLT( 2, float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
        // ======================
@@ -1109,7 +1109,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpLE( float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -1136,7 +1136,7 @@ void TestCompare( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CmpLE( 2, float[] >= float ) %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -1192,7 +1192,7 @@ void TestMinMax( void ) {
                GetBest( start, end, bestClocksSIMD );
        }
 
-       result = ( min == min2 && max == max2 ) ? "ok" : S_COLOR_RED"X";
+       result = ( min == min2 && max == max2 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MinMax( float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -1212,7 +1212,7 @@ void TestMinMax( void ) {
                GetBest( start, end, bestClocksSIMD );
        }
 
-       result = ( v2min == v2min2 && v2max == v2max2 ) ? "ok" : S_COLOR_RED"X";
+       result = ( v2min == v2min2 && v2max == v2max2 ) ? "ok" :  S_COLOR_RED 
"X";
        PrintClocks( va( "   simd->MinMax( idVec2[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -1232,7 +1232,7 @@ void TestMinMax( void ) {
                GetBest( start, end, bestClocksSIMD );
        }
 
-       result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED"X";
+       result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MinMax( idVec3[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -1252,7 +1252,7 @@ void TestMinMax( void ) {
                GetBest( start, end, bestClocksSIMD );
        }
 
-       result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED"X";
+       result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MinMax( idDrawVert[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -1272,7 +1272,7 @@ void TestMinMax( void ) {
                GetBest( start, end, bestClocksSIMD );
        }
 
-       result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" : S_COLOR_RED"X";
+       result = ( vmin == vmin2 && vmax == vmax2 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MinMax( idDrawVert[], indexes[] ) %s", 
result ), COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -1319,7 +1319,7 @@ void TestClamp( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Clamp( float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
 
@@ -1345,7 +1345,7 @@ void TestClamp( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->ClampMin( float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
 
@@ -1371,7 +1371,7 @@ void TestClamp( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->ClampMax( float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -1396,7 +1396,7 @@ void TestMemcpy( void ) {
                p_simd->Memcpy( test1, test0, 8192 );
                for ( j = 0; j < i; j++ ) {
                        if ( test1[j] != test0[j] ) {
-                               idLib::common->Printf( "   simd->Memcpy() 
"S_COLOR_RED"X\n" );
+                               idLib::common->Printf( "   simd->Memcpy() " 
S_COLOR_RED "X\n" );
                                return;
                        }
                }
@@ -1422,7 +1422,7 @@ void TestMemset( void ) {
                        p_simd->Memset( test, j, i );
                        for ( k = 0; k < i; k++ ) {
                                if ( test[k] != (byte)j ) {
-                                       idLib::common->Printf( "   
simd->Memset() "S_COLOR_RED"X\n" );
+                                       idLib::common->Printf( "   
simd->Memset() " S_COLOR_RED "X\n" );
                                        return;
                                }
                        }
@@ -1480,7 +1480,7 @@ void TestMatXMultiplyVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyVecX %dx%d*%dx1 %s", i, 
i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1510,7 +1510,7 @@ void TestMatXMultiplyVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyVecX %dx6*6x1 %s", i, 
result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1539,7 +1539,7 @@ void TestMatXMultiplyVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyVecX 6x%d*%dx1 %s", i, 
i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -1591,7 +1591,7 @@ void TestMatXMultiplyAddVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyAddVecX %dx%d*%dx1 %s", 
i, i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1621,7 +1621,7 @@ void TestMatXMultiplyAddVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyAddVecX %dx6*6x1 %s", 
i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1651,7 +1651,7 @@ void TestMatXMultiplyAddVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyAddVecX 6x%d*%dx1 %s", 
i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -1703,7 +1703,7 @@ void TestMatXTransposeMultiplyVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_TransposeMulVecX %dx6*%dx1 %s", 
i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1733,7 +1733,7 @@ void TestMatXTransposeMultiplyVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_TransposeMulVecX 6x%d*6x1 %s", 
i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -1785,7 +1785,7 @@ void TestMatXTransposeMultiplyAddVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_TransposeMulAddVecX %dx6*%dx1 
%s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1815,7 +1815,7 @@ void TestMatXTransposeMultiplyAddVecX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_TransposeMulAddVecX 6x%d*6x1 
%s", i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -1861,7 +1861,7 @@ void TestMatXMultiplyMatX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyMatX %dx%d*%dx6 %s", i, 
i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1892,7 +1892,7 @@ void TestMatXMultiplyMatX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyMatX 6x%d*%dx6 %s", i, 
i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1923,7 +1923,7 @@ void TestMatXMultiplyMatX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyMatX %dx6*6x%d %s", i, 
i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -1954,7 +1954,7 @@ void TestMatXMultiplyMatX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_MultiplyMatX 6x6*6x%d %s", i, 
result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -1997,7 +1997,7 @@ void TestMatXTransposeMultiplyMatX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_TransMultiplyMatX %dx6*%dx%d 
%s", i, i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 
@@ -2028,7 +2028,7 @@ void TestMatXTransposeMultiplyMatX( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = dst.Compare( tst, MATX_MATX_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_TransMultiplyMatX 6x%d*6x6 %s", 
i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -2078,7 +2078,7 @@ void TestMatXLowerTriangularSolve( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_LowerTriangularSolve %dx%d %s", 
i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -2125,7 +2125,7 @@ void TestMatXLowerTriangularSolveTranspose( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" : 
S_COLOR_RED"X";
+               result = x.Compare( tst, MATX_LTS_SIMD_EPSILON ) ? "ok" :  
S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_LowerTriangularSolveT %dx%d 
%s", i, i, result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -2175,7 +2175,7 @@ void TestMatXLDLTFactor( void ) {
                        GetBest( start, end, bestClocksSIMD );
                }
 
-               result = mat1.Compare( mat2, MATX_LDLT_SIMD_EPSILON ) && 
invDiag1.Compare( invDiag2, MATX_LDLT_SIMD_EPSILON ) ? "ok" : S_COLOR_RED"X";
+               result = mat1.Compare( mat2, MATX_LDLT_SIMD_EPSILON ) && 
invDiag1.Compare( invDiag2, MATX_LDLT_SIMD_EPSILON ) ? "ok" :  S_COLOR_RED "X";
                PrintClocks( va( "   simd->MatX_LDLTFactor %dx%d %s", i, i, 
result ), 1, bestClocksSIMD, bestClocksGeneric );
        }
 }
@@ -2248,7 +2248,7 @@ void TestBlendJoints( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->BlendJoints() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2300,7 +2300,7 @@ void TestConvertJointQuatsToJointMats( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->ConvertJointQuatsToJointMats() %s", result 
), COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2359,7 +2359,7 @@ void TestConvertJointMatsToJointQuats( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->ConvertJointMatsToJointQuats() %s", result 
), COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2421,7 +2421,7 @@ void TestTransformJoints( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->TransformJoints() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2483,7 +2483,7 @@ void TestUntransformJoints( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->UntransformJoints() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2550,7 +2550,7 @@ void TestTransformVerts( void ) {
                        break;
                }
        }
-       result = ( i >= NUMVERTS ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= NUMVERTS ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->TransformVerts() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2608,7 +2608,7 @@ void TestTracePointCull( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT && totalOr1 == totalOr2 ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT && totalOr1 == totalOr2 ) ? "ok" :  S_COLOR_RED 
"X";
        PrintClocks( va( "   simd->TracePointCull() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2669,7 +2669,7 @@ void TestDecalPointCull( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->DecalPointCull() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2727,7 +2727,7 @@ void TestOverlayPointCull( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->OverlayPointCull() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2786,7 +2786,7 @@ void TestDeriveTriPlanes( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->DeriveTriPlanes() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2871,7 +2871,7 @@ void TestDeriveTangents( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->DeriveTangents() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -2948,7 +2948,7 @@ void TestDeriveUnsmoothedTangents( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->DeriveUnsmoothedTangents() %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -3009,7 +3009,7 @@ void TestNormalizeTangents( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->NormalizeTangents() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -3071,7 +3071,7 @@ void TestGetTextureSpaceLightVectors( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CreateTextureSpaceLightVectors() %s", result 
), COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -3136,7 +3136,7 @@ void TestGetSpecularTextureCoords( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CreateSpecularTextureCoords() %s", result ), 
COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -3207,7 +3207,7 @@ void TestCreateShadowCache( void ) {
                }
        }
 
-       result = ( i >= COUNT && numVerts1 == numVerts2 ) ? "ok" : 
S_COLOR_RED"X";
+       result = ( i >= COUNT && numVerts1 == numVerts2 ) ? "ok" :  S_COLOR_RED 
"X";
        PrintClocks( va( "   simd->CreateShadowCache() %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -3235,7 +3235,7 @@ void TestCreateShadowCache( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->CreateVertexProgramShadowCache() %s", result 
), COUNT, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -3294,7 +3294,7 @@ void TestSoundUpSampling( void ) {
                                        break;
                                }
                        }
-                       result = ( i >= MIXBUFFER_SAMPLES*numSpeakers ) ? "ok" 
: S_COLOR_RED"X";
+                       result = ( i >= MIXBUFFER_SAMPLES*numSpeakers ) ? "ok" 
:  S_COLOR_RED "X";
                        PrintClocks( va( "   simd->UpSamplePCMTo44kHz( %d, %d ) 
%s", kHz, numSpeakers, result ), MIXBUFFER_SAMPLES*numSpeakers*kHz/44100, 
bestClocksSIMD, bestClocksGeneric );
                }
        }
@@ -3324,7 +3324,7 @@ void TestSoundUpSampling( void ) {
                                        break;
                                }
                        }
-                       result = ( i >= MIXBUFFER_SAMPLES ) ? "ok" : 
S_COLOR_RED"X";
+                       result = ( i >= MIXBUFFER_SAMPLES ) ? "ok" :  
S_COLOR_RED "X";
                        PrintClocks( va( "   simd->UpSampleOGGTo44kHz( %d, %d ) 
%s", kHz, numSpeakers, result ), MIXBUFFER_SAMPLES*numSpeakers*kHz/44100, 
bestClocksSIMD, bestClocksGeneric );
                }
        }
@@ -3391,7 +3391,7 @@ void TestSoundMixing( void ) {
                        break;
                }
        }
-       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MixSoundTwoSpeakerMono() %s", result ), 
MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -3423,7 +3423,7 @@ void TestSoundMixing( void ) {
                        break;
                }
        }
-       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MixSoundTwoSpeakerStereo() %s", result ), 
MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -3456,7 +3456,7 @@ void TestSoundMixing( void ) {
                        break;
                }
        }
-       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MixSoundSixSpeakerMono() %s", result ), 
MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric );
 
        bestClocksGeneric = 0;
@@ -3488,7 +3488,7 @@ void TestSoundMixing( void ) {
                        break;
                }
        }
-       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MixSoundSixSpeakerStereo() %s", result ), 
MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric );
 
 
@@ -3524,7 +3524,7 @@ void TestSoundMixing( void ) {
                        break;
                }
        }
-       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= MIXBUFFER_SAMPLES*6 ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->MixedSoundToSamples() %s", result ), 
MIXBUFFER_SAMPLES, bestClocksSIMD, bestClocksGeneric );
 }
 
@@ -3983,7 +3983,7 @@ void TestNegate( void ) {
                        break;
                }
        }
-       result = ( i >= COUNT ) ? "ok" : S_COLOR_RED"X";
+       result = ( i >= COUNT ) ? "ok" :  S_COLOR_RED "X";
        PrintClocks( va( "   simd->Negate16( float[] ) %s", result ), COUNT, 
bestClocksSIMD, bestClocksGeneric );
 }
 
diff --git a/neo/renderer/Model_ma.cpp b/neo/renderer/Model_ma.cpp
index e31ca40..1cd672a 100644
--- a/neo/renderer/Model_ma.cpp
+++ b/neo/renderer/Model_ma.cpp
@@ -203,7 +203,7 @@ bool MA_ParseVertex(idParser& parser, maAttribHeader_t* 
header) {
 
        //Allocate enough space for all the verts if this is the first 
attribute for verticies
        if(!pMesh->vertexes) {
-               pMesh->numVertexes = header->size;
+               pMesh->numVertexes = header->size; // XXX: +1?
                pMesh->vertexes = (idVec3 *)Mem_Alloc( sizeof( idVec3 ) * 
pMesh->numVertexes );
        }
 
@@ -692,7 +692,16 @@ void MA_ParseMesh(idParser& parser) {
 
        //Now apply the pt transformations
        for(int i = 0; i < pMesh->numVertTransforms; i++) {
-               pMesh->vertexes[(int)pMesh->vertTransforms[i].w] +=  
pMesh->vertTransforms[i].ToVec3();
+               int idx = (int)pMesh->vertTransforms[i].w;
+               if(idx < 0 || idx >= pMesh->numVertexes)
+               {
+                       // this happens with d3xp/models/david/hell_h7.ma in 
the d3xp hell level
+                       // TODO: if it happens for other models, too, maybe 
it's intended and the .ma parsing is broken
+                       common->Warning( "Model %s tried to set an 
out-of-bounds vertex transform (%d, but max vert. index is %d)!",
+                                                        parser.GetFileName(), 
idx, pMesh->numVertexes-1 );
+                       continue;
+               }
+               pMesh->vertexes[idx] +=  pMesh->vertTransforms[i].ToVec3();
        }
 
        MA_VERBOSE((va("MESH %s - parent %s\n", header.name, header.parent)));
diff --git a/neo/renderer/RenderSystem_init.cpp 
b/neo/renderer/RenderSystem_init.cpp
index 9c7d575..ffd60f3 100644
--- a/neo/renderer/RenderSystem_init.cpp
+++ b/neo/renderer/RenderSystem_init.cpp
@@ -482,8 +482,10 @@ vidmode_t r_vidModes[] = {
        { "Mode 19: 3200x2400",         3200,   2400 },
        { "Mode 20: 3840x2160",         3840,   2160 },
        { "Mode 21: 4096x2304",         4096,   2304 },
+       { "Mode 22: 2880x1800",         2880,   1800 },
 };
-static int     s_numVidModes = ( sizeof( r_vidModes ) / sizeof( r_vidModes[0] 
) );
+// DG: made this an enum so even stupid compilers accept it as array length 
below
+enum { s_numVidModes = sizeof( r_vidModes ) / sizeof( r_vidModes[0] ) };
 
 static bool R_GetModeInfo( int *width, int *height, int mode ) {
        vidmode_t       *vm;
@@ -513,6 +515,45 @@ static bool R_GetModeInfo( int *width, int *height, int 
mode ) {
        return true;
 }
 
+// DG: I added all this vidModeInfoPtr stuff, so I can have a second list of 
vidmodes
+//     that are sorted (by width, height), instead of just r_mode index.
+//     That way I can add modes without breaking r_mode, but still display them
+//     sorted in the menu.
+
+struct vidModePtr {
+       vidmode_t* vidMode;
+       int modeIndex;
+};
+
+static vidModePtr sortedVidModes[s_numVidModes];
+
+static int vidModeCmp(const void* vm1, const void* vm2)
+{
+       const vidModePtr* v1 = static_cast<const vidModePtr*>(vm1);
+       const vidModePtr* v2 = static_cast<const vidModePtr*>(vm2);
+
+       // sort primarily by width, secondarily by height
+       int wdiff = v1->vidMode->width - v2->vidMode->width;
+       return (wdiff != 0) ? wdiff : (v1->vidMode->height - 
v2->vidMode->height);
+}
+
+static void initSortedVidModes()
+{
+       if(sortedVidModes[0].vidMode != NULL)
+       {
+               // already initialized
+               return;
+       }
+
+       for(int i=0; i<s_numVidModes; ++i)
+       {
+               sortedVidModes[i].modeIndex = i;
+               sortedVidModes[i].vidMode = &r_vidModes[i];
+       }
+
+       qsort(sortedVidModes, s_numVidModes, sizeof(vidModePtr), vidModeCmp);
+}
+
 // DG: the following two functions are part of a horrible hack in 
ChoiceWindow.cpp
 //     to overwrite the default resolution list in the system options menu
 
@@ -520,14 +561,14 @@ static bool R_GetModeInfo( int *width, int *height, int 
mode ) {
 idStr R_GetVidModeListString()
 {
        idStr ret = "r_custom*";
-       // for some reason, modes 0-2 are not used. maybe too small for GUI?
-       for(int mode=3; mode<s_numVidModes; ++mode)
+
+       for(int i=0; i<s_numVidModes; ++i)
        {
-               int w, h;
-               if(R_GetModeInfo(&w, &h, mode))
+               // for some reason, modes 0-2 are not used. maybe too small for 
GUI?
+               if(sortedVidModes[i].modeIndex >= 3 && 
sortedVidModes[i].vidMode != NULL)
                {
                        idStr modeStr;
-                       sprintf(modeStr, ";%dx%d", w, h);
+                       sprintf(modeStr, ";%dx%d", 
sortedVidModes[i].vidMode->width, sortedVidModes[i].vidMode->height);
                        ret += modeStr;
                }
        }
@@ -538,10 +579,14 @@ idStr R_GetVidModeListString()
 idStr R_GetVidModeValsString()
 {
        idStr ret =  "-1"; // for custom resolutions using 
r_customWidth/r_customHeight
-       for(int mode=3; mode<s_numVidModes; ++mode)
+       for(int i=0; i<s_numVidModes; ++i)
        {
-               ret += ";";
-               ret += mode;
+               // for some reason, modes 0-2 are not used. maybe too small for 
GUI?
+               if(sortedVidModes[i].modeIndex >= 3 && 
sortedVidModes[i].vidMode != NULL)
+               {
+                       ret += ";";
+                       ret += sortedVidModes[i].modeIndex;
+               }
        }
        return ret;
 }
@@ -579,6 +624,8 @@ void R_InitOpenGL( void ) {
        tr.viewportOffset[0] = 0;
        tr.viewportOffset[1] = 0;
 
+       initSortedVidModes();
+
        //
        // initialize OS specific portions of the renderSystem
        //
diff --git a/neo/sys/events.cpp b/neo/sys/events.cpp
index ff9bb09..92b175d 100644
--- a/neo/sys/events.cpp
+++ b/neo/sys/events.cpp
@@ -484,8 +484,8 @@ sysEvent_t Sys_GetEvent() {
 
                        // fall through
                case SDL_KEYUP:
-                       key = mapkey(ev.key.keysym.sym);
 #if !SDL_VERSION_ATLEAST(2, 0, 0)
+                       key = mapkey(ev.key.keysym.sym);
                        if (!key) {
                                unsigned char c;
                                // check if its an unmapped console key
@@ -500,6 +500,27 @@ sysEvent_t Sys_GetEvent() {
                                }
                        }
 #else
+               {
+                       // workaround for AZERTY-keyboards, which don't have 1, 
2, ..., 9, 0 in first row:
+                       // always map those physical keys (scancodes) to those 
keycodes anyway
+                       // see also 
https://bugzilla.libsdl.org/show_bug.cgi?id=3188
+                       SDL_Scancode sc = ev.key.keysym.scancode;
+                       if(sc == SDL_SCANCODE_0)
+                       {
+                               key = '0';
+                       }
+                       else if(sc >= SDL_SCANCODE_1 && sc <= SDL_SCANCODE_9)
+                       {
+                               // note that the SDL_SCANCODEs are 
SDL_SCANCODE_1, _2, ..., _9, SDL_SCANCODE_0
+                               // while in ASCII it's '0', '1', ..., '9' => 
handle 0 and 1-9 separately
+                               // (doom3 uses the ASCII values for those keys)
+                               key = '1' + (sc - SDL_SCANCODE_1);
+                       }
+                       else
+                       {
+                               key = mapkey(ev.key.keysym.sym);
+                       }
+
                        if(!key) {
                                if (ev.key.keysym.scancode == 
SDL_SCANCODE_GRAVE) { // TODO: always do this check?
                                        key = Sys_GetConsoleKey(true);
@@ -510,7 +531,7 @@ sysEvent_t Sys_GetEvent() {
                                        continue; // handle next event
                                }
                        }
-
+               }
 #endif
 
                        res.evType = SE_KEY;
@@ -607,6 +628,18 @@ sysEvent_t Sys_GetEvent() {
                                        
mouse_polls.Append(mouse_poll_t(M_DELTAZ, -1));
                                break;
 #endif
+                       default:
+#if SDL_VERSION_ATLEAST(2, 0, 0)
+                               // handle X1 button and above
+                               if( ev.button.button < SDL_BUTTON_LEFT + 8 ) // 
doesn't support more than 8 mouse buttons
+                               {
+                                       int buttonIndex = ev.button.button - 
SDL_BUTTON_LEFT;
+                                       res.evValue = K_MOUSE1 + buttonIndex;
+                                       mouse_polls.Append( mouse_poll_t( 
M_ACTION1 + buttonIndex, ev.button.state == SDL_PRESSED ? 1 : 0 ) );
+                               }
+                               else
+#endif
+                               continue; // handle next event
                        }
 
                        res.evValue2 = ev.button.state == SDL_PRESSED ? 1 : 0;
@@ -629,7 +662,8 @@ sysEvent_t Sys_GetEvent() {
                                continue; // handle next event
                        }
                default:
-                       common->Warning("unknown SDL event 0x%x", ev.type);
+                       // ok, I don't /really/ care about unknown SDL events. 
only uncomment this for debugging.
+                       // common->Warning("unknown SDL event 0x%x", ev.type);
                        continue; // handle next event
                }
        }
diff --git a/neo/sys/posix/posix_net.cpp b/neo/sys/posix/posix_net.cpp
index 1ff3451..db83fa9 100644
--- a/neo/sys/posix/posix_net.cpp
+++ b/neo/sys/posix/posix_net.cpp
@@ -318,6 +318,7 @@ void Sys_InitNetworking(void)
                if (num_interfaces >= MAX_INTERFACES)
                        break;
        }
+       freeifaddrs(ifap);
 }
 
 /*
diff --git a/neo/tools/compilers/roqvq/codec.cpp 
b/neo/tools/compilers/roqvq/codec.cpp
index 344232f..612d088 100644
--- a/neo/tools/compilers/roqvq/codec.cpp
+++ b/neo/tools/compilers/roqvq/codec.cpp
@@ -322,7 +322,7 @@ void codec::Segment( int *alist, float *flist, int 
numElements, float rmse)
 int    codec::BestCodeword( unsigned char *tempvector, int dimension, VQDATA 
**codebook )
 {
        VQDATA dist;
-       VQDATA bestDist = HUGE_VAL;
+       VQDATA bestDist = idMath::INFINITY;
        VQDATA tempvq[64];
        int bestIndex = -1;
 
@@ -1505,7 +1505,7 @@ void codec::VQ( const int numEntries, const int 
dimension, const unsigned char *
                //
                // find the closest two and eliminate one
                //
-               double bestDist = HUGE_VAL;
+               double bestDist = idMath::INFINITY;
                double dist, simport;
                int bestIndex = -1;
                int bestOtherIndex = 0;
@@ -1571,7 +1571,7 @@ void codec::VQ( const int numEntries, const int 
dimension, const unsigned char *
                // until we have reduced it to 256 entries, find one to toss
                //
                do {
-                       bestDist = HUGE_VAL;
+                       bestDist = idMath::INFINITY;
                        bestIndex = -1;
                        bestOtherIndex = -1;
                        if (optimize) {
@@ -1586,7 +1586,7 @@ void codec::VQ( const int numEntries, const int 
dimension, const unsigned char *
                                }
                        }
                        if (bestIndex == -1 || !optimize) {
-                               bestDist = HUGE_VAL;
+                               bestDist = idMath::INFINITY;
                                bestIndex = -1;
                                bestOtherIndex = 0;
                                aentries = 0;
diff --git a/neo/ui/Winvar.cpp b/neo/ui/Winvar.cpp
index 1d20770..db726c3 100644
--- a/neo/ui/Winvar.cpp
+++ b/neo/ui/Winvar.cpp
@@ -42,7 +42,7 @@ idWinVar::idWinVar() {
 }
 
 idWinVar::~idWinVar() {
-       delete name;
+       delete[] name;
        name = NULL;
 }
 
diff --git a/neo/ui/Winvar.h b/neo/ui/Winvar.h
index 8ab296f..856fed3 100644
--- a/neo/ui/Winvar.h
+++ b/neo/ui/Winvar.h
@@ -51,7 +51,7 @@ public:
                return "";
        }
        void SetName(const char *_name) {
-               delete []name;
+               delete[] name;
                name = NULL;
                if (_name) {
                        name = new char[strlen(_name)+1];

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-games/dhewm3.git

_______________________________________________
Pkg-games-commits mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

Reply via email to