safe string for globalCelShader

This commit is contained in:
Garux 2021-01-19 22:40:58 +03:00
parent cbeccc7e3a
commit cfa502df6e
4 changed files with 9 additions and 14 deletions

View File

@ -720,7 +720,6 @@ int BSPMain( int argc, char **argv ){
numMapDrawSurfs = 0; numMapDrawSurfs = 0;
strClear( tempSource ); strClear( tempSource );
strClear( globalCelShader );
/* set standard game flags */ /* set standard game flags */
maxSurfaceVerts = game->maxSurfaceVerts; maxSurfaceVerts = game->maxSurfaceVerts;
@ -881,13 +880,13 @@ int BSPMain( int argc, char **argv ){
} }
else if ( strEqual( argv[ i ], "-celshader" ) ) { else if ( strEqual( argv[ i ], "-celshader" ) ) {
++i; ++i;
if ( argv[i][0] ) { if ( !strEmpty( argv[ i ] ) ) {
sprintf( globalCelShader, "textures/%s", argv[ i ] ); globalCelShader( "textures/", argv[ i ] );
} }
else{ else{
*globalCelShader = 0; globalCelShader.clear();
} }
Sys_Printf( "Global cel shader set to \"%s\"\n", globalCelShader ); Sys_Printf( "Global cel shader set to \"%s\"\n", globalCelShader.c_str() );
} }
else if ( strEqual( argv[ i ], "-meta" ) ) { else if ( strEqual( argv[ i ], "-meta" ) ) {
Sys_Printf( "Creating meta surfaces from brush faces\n" ); Sys_Printf( "Creating meta surfaces from brush faces\n" );

View File

@ -1794,13 +1794,11 @@ static bool ParseMapEntity( bool onlyLights, bool noCollapseGroups ){
const char *value; const char *value;
if( ENT_READKV( &value, mapEnt, "_celshader" ) || if( ENT_READKV( &value, mapEnt, "_celshader" ) ||
ENT_READKV( &value, &entities[ 0 ], "_celshader" ) ){ ENT_READKV( &value, &entities[ 0 ], "_celshader" ) ){
char shader[ MAX_QPATH ]; celShader = ShaderInfoForShader( String64()( "textures/", value ) );
sprintf( shader, "textures/%s", value );
celShader = ShaderInfoForShader( shader );
Sys_Printf( "Entity %d (%s) has cel shader %s\n", mapEnt->mapEntityNum, classname, celShader->shader.c_str() ); Sys_Printf( "Entity %d (%s) has cel shader %s\n", mapEnt->mapEntityNum, classname, celShader->shader.c_str() );
} }
else{ else{
celShader = !strEmpty( globalCelShader ) ? ShaderInfoForShader( globalCelShader ) : NULL; celShader = globalCelShader.empty() ? NULL : ShaderInfoForShader( globalCelShader );
} }
/* jal : entity based _shadeangle */ /* jal : entity based _shadeangle */

View File

@ -1479,12 +1479,10 @@ void AddTriangleModels( entity_t *eparent ){
shaderInfo_t *celShader; shaderInfo_t *celShader;
if( ENT_READKV( &value, e, "_celshader" ) || if( ENT_READKV( &value, e, "_celshader" ) ||
ENT_READKV( &value, &entities[ 0 ], "_celshader" ) ){ ENT_READKV( &value, &entities[ 0 ], "_celshader" ) ){
char shader[ MAX_QPATH ]; celShader = ShaderInfoForShader( String64()( "textures/", value ) );
sprintf( shader, "textures/%s", value );
celShader = ShaderInfoForShader( shader );
} }
else{ else{
celShader = !strEmpty( globalCelShader ) ? ShaderInfoForShader( globalCelShader ) : NULL; celShader = globalCelShader.empty() ? NULL : ShaderInfoForShader( globalCelShader );
} }
/* jal : entity based _samplesize */ /* jal : entity based _samplesize */

View File

@ -2209,7 +2209,7 @@ Q_EXTERN bool nosort;
Q_EXTERN bool saveprt; Q_EXTERN bool saveprt;
Q_EXTERN bool hint; /* ydnar */ Q_EXTERN bool hint; /* ydnar */
Q_EXTERN char inbase[ MAX_QPATH ]; Q_EXTERN char inbase[ MAX_QPATH ];
Q_EXTERN char globalCelShader[ MAX_QPATH ]; Q_EXTERN String64 globalCelShader;
Q_EXTERN float farPlaneDist Q_ASSIGN( 0.0f ); /* rr2do2, rf, mre, ydnar all contributed to this one... */ Q_EXTERN float farPlaneDist Q_ASSIGN( 0.0f ); /* rr2do2, rf, mre, ydnar all contributed to this one... */
Q_EXTERN int farPlaneDistMode Q_ASSIGN( 0 ); Q_EXTERN int farPlaneDistMode Q_ASSIGN( 0 );