Replace sprintf() / vsprintf() with idStr::snPrintf() / idStr::vsnPrintf() for buffer security

This commit is contained in:
Stephen Saunders 2023-06-20 12:24:24 -04:00
parent 39ae1202b4
commit 52dd6193bf
44 changed files with 170 additions and 156 deletions

View file

@ -429,7 +429,7 @@ void AM_loadPics( void )
for( i = 0; i < 10; i++ )
{
sprintf( namebuf, "AMMNUM%d", i );
idStr::snPrintf( namebuf, sizeof( namebuf ), "AMMNUM%d", i );
::g->marknums[i] = ( patch_t* )W_CacheLumpName( namebuf, PU_STATIC_SHARED );
}
@ -635,7 +635,7 @@ AM_Responder
::g->amap_plr->message = ::g->grid ? AMSTR_GRIDON : AMSTR_GRIDOFF;
break;
case AM_MARKKEY:
sprintf( ::g->buffer, "%s %d", AMSTR_MARKEDSPOT, ::g->markpointnum );
idStr::snPrintf( ::g->buffer, sizeof( ::g->buffer ), "%s %d", AMSTR_MARKEDSPOT, ::g->markpointnum );
::g->amap_plr->message = ::g->buffer;
AM_addMark();
break;

View file

@ -612,35 +612,35 @@ void D_DoomMain( void )
switch( ::g->gamemode )
{
case retail:
sprintf( ::g->title,
idStr::snPrintf( ::g->title, sizeof( ::g->title ),
" "
"The Ultimate DOOM Startup v%i.%i"
" ",
VERSION / 100, VERSION % 100 );
break;
case shareware:
sprintf( ::g->title,
idStr::snPrintf( ::g->title, sizeof( ::g->title ),
" "
"DOOM Shareware Startup v%i.%i"
" ",
VERSION / 100, VERSION % 100 );
break;
case registered:
sprintf( ::g->title,
idStr::snPrintf( ::g->title, sizeof( ::g->title ),
" "
"DOOM Registered Startup v%i.%i"
" ",
VERSION / 100, VERSION % 100 );
break;
case commercial:
sprintf( ::g->title,
idStr::snPrintf( ::g->title, sizeof( ::g->title ),
" "
"DOOM 2: Hell on Earth v%i.%i"
" ",
VERSION / 100, VERSION % 100 );
break;
default:
sprintf( ::g->title,
idStr::snPrintf( ::g->title, sizeof( ::g->title ),
" "
"Public DOOM - v%i.%i"
" ",
@ -686,7 +686,7 @@ void D_DoomMain( void )
if( p && p < ::g->myargc - 1 )
{
sprintf( file, "d:\\%s.lmp", ::g->myargv[p + 1] );
idStr::snPrintf( file, sizeof( file ), "d:\\%s.lmp", ::g->myargv[p + 1] );
D_AddFile( file );
I_Printf( "Playing demo %s.lmp.\n", ::g->myargv[p + 1] );
}
@ -918,11 +918,11 @@ bool D_DoomMainPoll( void )
{
if( M_CheckParm( "-cdrom" ) )
{
sprintf( file, "c:\\doomdata\\" SAVEGAMENAME "%c.dsg", ::g->myargv[p + 1][0] );
idStr::snPrintf( file, sizeof( file ), "c:\\doomdata\\" SAVEGAMENAME "%c.dsg", ::g->myargv[p + 1][0] );
}
else
{
sprintf( file, SAVEGAMENAME "%c.dsg", ::g->myargv[p + 1][0] );
idStr::snPrintf( file, sizeof( file ), SAVEGAMENAME "%c.dsg", ::g->myargv[p + 1][0] );
}
G_LoadGame( file );
}

View file

@ -327,7 +327,7 @@ void DoomInterface::SetMultiplayerPlayers( int localPlayerIndex, int playerCount
strcpy( mpArgV[localPlayerIndex][2], "1" );
strcpy( mpArgV[localPlayerIndex][3], "-net" );
sprintf( mpArgV[localPlayerIndex][4], "%d", localPlayer );
idStr::snPrintf( mpArgV[localPlayerIndex][4], sizeof( mpArgV[localPlayerIndex][4] ), "%d", localPlayer );
strcpy( mpArgV[localPlayerIndex][5], playerAddresses[localPlayer].c_str() );
int currentArg = 6;

View file

@ -884,7 +884,7 @@ void F_BunnyScroll( void )
::g->laststage = stage;
}
snprintf( name, name_len, "END%i", stage );
idStr::snPrintf( name, name_len, "END%i", stage );
V_DrawPatch( ( ORIGINAL_WIDTH - 13 * 8 ) / 2, ( ORIGINAL_HEIGHT - 8 * 8 ) / 2, 0, ( patch_t* )W_CacheLumpName( name, PU_CACHE_SHARED ) );
}

View file

@ -1587,7 +1587,7 @@ qboolean G_DoLoadGame()
// skip the description field
memset( vcheck, 0, sizeof( vcheck ) );
sprintf( vcheck, "version %i", VERSION );
idStr::snPrintf( vcheck, sizeof( vcheck ), "version %i", VERSION );
if( strcmp( ( char* )::g->save_p, vcheck ) )
{
loadingGame = false;
@ -1679,17 +1679,17 @@ qboolean G_DoSaveGame( void )
if( common->GetCurrentGame() == DOOM_CLASSIC )
{
sprintf( name, "DOOM\\%s%d.dsg", SAVEGAMENAME, ::g->savegameslot );
idStr::snPrintf( name, sizeof( name ), "DOOM\\%s%d.dsg", SAVEGAMENAME, ::g->savegameslot );
}
else
{
if( DoomLib::expansionSelected == doom2 )
{
sprintf( name, "DOOM2\\%s%d.dsg", SAVEGAMENAME, ::g->savegameslot );
idStr::snPrintf( name, sizeof( name ), "DOOM2\\%s%d.dsg", SAVEGAMENAME, ::g->savegameslot );
}
else
{
sprintf( name, "DOOM2_NRFTL\\%s%d.dsg", SAVEGAMENAME, ::g->savegameslot );
idStr::snPrintf( name, sizeof( name ), "DOOM2_NRFTL\\%s%d.dsg", SAVEGAMENAME, ::g->savegameslot );
}
}
@ -1700,7 +1700,7 @@ qboolean G_DoSaveGame( void )
::g->save_p += SAVESTRINGSIZE;
memset( name2, 0, sizeof( name2 ) );
sprintf( name2, "version %i", VERSION );
idStr::snPrintf( name2, sizeof( name2 ), "version %i", VERSION );
memcpy( ::g->save_p, name2, VERSIONSIZE );
::g->save_p += VERSIONSIZE;

View file

@ -328,7 +328,7 @@ void HU_Init( void )
j = HU_FONTSTART;
for( i = 0; i < HU_FONTSIZE; i++ )
{
snprintf( buffer, buffer_len, "STCFN%03d", j++ );
idStr::snPrintf( buffer, buffer_len, "STCFN%03d", j++ );
::g->hu_font[i] = ( patch_t* ) W_CacheLumpName( buffer, PU_STATIC_SHARED );
}

View file

@ -163,7 +163,7 @@ void* getsfx( const char* sfxname, int* len )
//float scale = 1.0f;
// Get the sound data from the WAD
sprintf( name, "ds%s", sfxname );
idStr::snPrintf( name, sizeof( name ), "ds%s", sfxname );
// Scale down the plasma gun, it clips
//if ( strcmp( sfxname, "plasma" ) == 0 ) {
@ -243,7 +243,7 @@ I_GetSfxLumpNum
int I_GetSfxLumpNum( sfxinfo_t* sfx )
{
char namebuf[9];
sprintf( namebuf, "ds%s", sfx->name );
idStr::snPrintf( namebuf, sizeof( namebuf ), "ds%s", sfx->name );
return W_GetNumForName( namebuf );
}

View file

@ -135,7 +135,7 @@ void I_Printf( const char* msg, ... )
if( debugOutput )
{
va_start( argptr, msg );
vsprintf( pmsg, msg, argptr );
idStr::vsnPrintf( pmsg, sizeof( pmsg ), msg, argptr );
safeOutputDebug( pmsg );
@ -153,7 +153,7 @@ void I_PrintfE( const char* msg, ... )
if( debugOutput )
{
va_start( argptr, msg );
vsprintf( pmsg, msg, argptr );
idStr::vsnPrintf( pmsg, sizeof( pmsg ), msg, argptr );
safeOutputDebug( "ERROR: " );
safeOutputDebug( pmsg );

View file

@ -261,17 +261,17 @@ void M_ReadSaveStrings( void )
{
if( common->GetCurrentGame() == DOOM_CLASSIC )
{
sprintf( name, "DOOM\\%s%d.dsg", SAVEGAMENAME, i );
idStr::snPrintf( name, sizeof( name ), "DOOM\\%s%d.dsg", SAVEGAMENAME, i );
}
else
{
if( DoomLib::idealExpansion == doom2 )
{
sprintf( name, "DOOM2\\%s%d.dsg", SAVEGAMENAME, i );
idStr::snPrintf( name, sizeof( name ), "DOOM2\\%s%d.dsg", SAVEGAMENAME, i );
}
else
{
sprintf( name, "DOOM2_NRFTL\\%s%d.dsg", SAVEGAMENAME, i );
idStr::snPrintf( name, sizeof( name ), "DOOM2_NRFTL\\%s%d.dsg", SAVEGAMENAME, i );
}
}
@ -520,7 +520,7 @@ void M_QuickSave( void )
::g->quickSaveSlot = -2; // means to pick a slot now
return;
}
sprintf( ::g->tempstring, QSPROMPT, ::g->savegamestrings[::g->quickSaveSlot] );
idStr::snPrintf( ::g->tempstring, sizeof( ::g->tempstring ), QSPROMPT, ::g->savegamestrings[::g->quickSaveSlot] );
M_StartMessage( ::g->tempstring, M_QuickSaveResponse, true );
}
@ -552,7 +552,7 @@ void M_QuickLoad( void )
M_StartMessage( QSAVESPOT, NULL, false );
return;
}
sprintf( ::g->tempstring, QLPROMPT, ::g->savegamestrings[::g->quickSaveSlot] );
idStr::snPrintf( ::g->tempstring, sizeof( ::g->tempstring ), QLPROMPT, ::g->savegamestrings[::g->quickSaveSlot] );
M_StartMessage( ::g->tempstring, M_QuickLoadResponse, true );
}

View file

@ -687,11 +687,11 @@ P_SetupLevel
{
if( map < 10 )
{
sprintf( lumpname, "map0%i", map % 100 );
idStr::snPrintf( lumpname, sizeof( lumpname ), "map0%i", map % 100 );
}
else
{
sprintf( lumpname, "map%i", map % 100 );
idStr::snPrintf( lumpname, sizeof( lumpname ), "map%i", map % 100 );
}
}
else

View file

@ -540,7 +540,7 @@ ST_Responder( event_t* ev )
else if( cht_CheckCheat( &cheat_mypos, ev->data1 ) )
{
static char buf[ST_MSGWIDTH];
sprintf( buf, "ang=0x%x;x,y=(0x%x,0x%x)",
idStr::snPrintf( buf, sizeof( buf ), "ang=0x%x;x,y=(0x%x,0x%x)",
::g->players[::g->consoleplayer].mo->angle,
::g->players[::g->consoleplayer].mo->x,
::g->players[::g->consoleplayer].mo->y );
@ -1069,7 +1069,7 @@ void ST_loadGraphics( void )
// key cards
for( i = 0; i < NUMCARDS; i++ )
{
sprintf( namebuf, "STKEYS%d", i );
idStr::snPrintf( namebuf, sizeof( namebuf ), "STKEYS%d", i );
::g->keys[i] = ( patch_t* ) W_CacheLumpName( namebuf, PU_STATIC_SHARED );
}
@ -1079,7 +1079,7 @@ void ST_loadGraphics( void )
// ::g->arms ownership widgets
for( i = 0; i < 6; i++ )
{
sprintf( namebuf, "STGNUM%d", i + 2 );
idStr::snPrintf( namebuf, sizeof( namebuf ), "STGNUM%d", i + 2 );
// gray #
::g->arms[i][0] = ( patch_t* ) W_CacheLumpName( namebuf, PU_STATIC_SHARED );
@ -1089,7 +1089,7 @@ void ST_loadGraphics( void )
}
// face backgrounds for different color ::g->players
sprintf( namebuf, "STFB%d", ::g->consoleplayer );
idStr::snPrintf( namebuf, sizeof( namebuf ), "STFB%d", ::g->consoleplayer );
::g->faceback = ( patch_t* ) W_CacheLumpName( namebuf, PU_STATIC_SHARED );
// status bar background bits
@ -1101,18 +1101,18 @@ void ST_loadGraphics( void )
{
for( j = 0; j < ST_NUMSTRAIGHTFACES; j++ )
{
sprintf( namebuf, "STFST%d%d", i, j );
idStr::snPrintf( namebuf, sizeof( namebuf ), "STFST%d%d", i, j );
::g->faces[facenum++] = ( patch_t* )W_CacheLumpName( namebuf, PU_STATIC_SHARED );
}
sprintf( namebuf, "STFTR%d0", i ); // turn right
idStr::snPrintf( namebuf, sizeof( namebuf ), "STFTR%d0", i ); // turn right
::g->faces[facenum++] = ( patch_t* )W_CacheLumpName( namebuf, PU_STATIC_SHARED );
sprintf( namebuf, "STFTL%d0", i ); // turn left
idStr::snPrintf( namebuf, sizeof( namebuf ), "STFTL%d0", i ); // turn left
::g->faces[facenum++] = ( patch_t* )W_CacheLumpName( namebuf, PU_STATIC_SHARED );
sprintf( namebuf, "STFOUCH%d", i ); // ouch!
idStr::snPrintf( namebuf, sizeof( namebuf ), "STFOUCH%d", i ); // ouch!
::g->faces[facenum++] = ( patch_t* )W_CacheLumpName( namebuf, PU_STATIC_SHARED );
sprintf( namebuf, "STFEVL%d", i ); // evil grin ;)
idStr::snPrintf( namebuf, sizeof( namebuf ), "STFEVL%d", i ); // evil grin ;)
::g->faces[facenum++] = ( patch_t* )W_CacheLumpName( namebuf, PU_STATIC_SHARED );
sprintf( namebuf, "STFKILL%d", i ); // pissed off
idStr::snPrintf( namebuf, sizeof( namebuf ), "STFKILL%d", i ); // pissed off
::g->faces[facenum++] = ( patch_t* )W_CacheLumpName( namebuf, PU_STATIC_SHARED );
}
::g->faces[facenum++] = ( patch_t* )W_CacheLumpName( "STFGOD0", PU_STATIC_SHARED );
@ -1516,7 +1516,7 @@ CONSOLE_COMMAND_SHIP( idmypos, "for player position", 0 )
}
static char buf[ST_MSGWIDTH];
sprintf( buf, "ang=0x%x;x,y=(0x%x,0x%x)",
idStr::snPrintf( buf, sizeof( buf ), "ang=0x%x;x,y=(0x%x,0x%x)",
::g->players[::g->consoleplayer].mo->angle,
::g->players[::g->consoleplayer].mo->x,
::g->players[::g->consoleplayer].mo->y );

View file

@ -1720,7 +1720,7 @@ void WI_loadData( void )
::g->lnames = ( patch_t** ) DoomLib::Z_Malloc( sizeof( patch_t* ) * ( NUMMAPS ), PU_LEVEL_SHARED, 0 );
for( i = 0 ; i < NUMMAPS ; i++ )
{
sprintf( name, "WILV%d%d", ::g->wbs->epsd, i );
idStr::snPrintf( name, sizeof( name ), "WILV%d%d", ::g->wbs->epsd, i );
::g->lnames[i] = ( patch_t* )W_CacheLumpName( name, PU_LEVEL_SHARED );
}
@ -1763,7 +1763,7 @@ void WI_loadData( void )
for( i = 0; i < 10; i++ )
{
// numbers 0-9
sprintf( name, "WINUM%d", i );
idStr::snPrintf( name, sizeof( name ), "WINUM%d", i );
::g->num[i] = ( patch_t* )W_CacheLumpName( name, PU_LEVEL_SHARED );
}
@ -1820,11 +1820,11 @@ void WI_loadData( void )
for( i = 0 ; i < MAXPLAYERS ; i++ )
{
// "1,2,3,4"
sprintf( name, "STPB%d", i );
idStr::snPrintf( name, sizeof( name ), "STPB%d", i );
::g->wistuff_p[i] = ( patch_t* )W_CacheLumpName( name, PU_LEVEL_SHARED );
// "1,2,3,4"
sprintf( name, "WIBP%d", i + 1 );
idStr::snPrintf( name, sizeof( name ), "WIBP%d", i + 1 );
::g->wistuff_bp[i] = ( patch_t* )W_CacheLumpName( name, PU_LEVEL_SHARED );
}

View file

@ -511,11 +511,11 @@ void idCollisionModelManagerLocal::DebugOutput( const idVec3& origin )
total_translation += t;
if( cm_testTimes.GetInteger() > 9999 )
{
sprintf( buf, "%3dK", ( int )( cm_testTimes.GetInteger() / 1000 ) );
idStr::snPrintf( buf, sizeof( buf ), "%3dK", ( int )( cm_testTimes.GetInteger() / 1000 ) );
}
else
{
sprintf( buf, "%4d", cm_testTimes.GetInteger() );
idStr::snPrintf( buf, sizeof( buf ), "%4d", cm_testTimes.GetInteger() );
}
common->Printf( "%s translations: %4d milliseconds, (min = %d, max = %d, av = %1.1f)\n", buf, t, min_translation, max_translation, ( float ) total_translation / num_translation );
@ -571,11 +571,11 @@ void idCollisionModelManagerLocal::DebugOutput( const idVec3& origin )
total_rotation += t;
if( cm_testTimes.GetInteger() > 9999 )
{
sprintf( buf, "%3dK", ( int )( cm_testTimes.GetInteger() / 1000 ) );
idStr::snPrintf( buf, sizeof( buf ), "%3dK", ( int )( cm_testTimes.GetInteger() / 1000 ) );
}
else
{
sprintf( buf, "%4d", cm_testTimes.GetInteger() );
idStr::snPrintf( buf, sizeof( buf ), "%4d", cm_testTimes.GetInteger() );
}
common->Printf( "%s rotation: %4d milliseconds, (min = %d, max = %d, av = %1.1f)\n", buf, t, min_rotation, max_rotation, ( float ) total_rotation / num_rotation );
}

View file

@ -653,7 +653,7 @@ const char* idMultiplayerGame::GameTime()
}
else
{
sprintf( buff, "WMP %i", s );
idStr::snPrintf( buff, sizeof( buff ), "WMP %i", s );
}
}
else

View file

@ -3052,7 +3052,7 @@ const char* idWeapon::GetAmmoNameForNum( ammo_t ammonum )
return NULL;
}
sprintf( text, "%d", ammonum );
idStr::snPrintf( text, sizeof( text ), "%d", ammonum );
num = ammoDict->GetNumKeyVals();
for( i = 0; i < num; i++ )

View file

@ -84,7 +84,7 @@ idEventDef::idEventDef( const char* command, const char* formatspec, char return
if( numargs > D_EVENT_MAXARGS )
{
eventError = true;
sprintf( eventErrorMsg, "idEventDef::idEventDef : Too many args for '%s' event.", name );
idStr::snPrintf( eventErrorMsg, sizeof( eventErrorMsg ), "idEventDef::idEventDef : Too many args for '%s' event.", name );
return;
}
@ -138,7 +138,7 @@ idEventDef::idEventDef( const char* command, const char* formatspec, char return
default :
eventError = true;
sprintf( eventErrorMsg, "idEventDef::idEventDef : Invalid arg format '%s' string for '%s' event.", formatspec, name );
idStr::snPrintf( eventErrorMsg, sizeof( eventErrorMsg ), "idEventDef::idEventDef : Invalid arg format '%s' string for '%s' event.", formatspec, name );
return;
break;
}
@ -158,7 +158,7 @@ idEventDef::idEventDef( const char* command, const char* formatspec, char return
if( strcmp( formatspec, ev->formatspec ) != 0 )
{
eventError = true;
sprintf( eventErrorMsg, "idEvent '%s' defined twice with same name but differing format strings ('%s'!='%s').",
idStr::snPrintf( eventErrorMsg, sizeof( eventErrorMsg ), "idEvent '%s' defined twice with same name but differing format strings ('%s'!='%s').",
command, formatspec, ev->formatspec );
return;
}
@ -166,7 +166,7 @@ idEventDef::idEventDef( const char* command, const char* formatspec, char return
if( ev->returnType != returnType )
{
eventError = true;
sprintf( eventErrorMsg, "idEvent '%s' defined twice with same name but differing return types ('%c'!='%c').",
idStr::snPrintf( eventErrorMsg, sizeof( eventErrorMsg ), "idEvent '%s' defined twice with same name but differing return types ('%c'!='%c').",
command, returnType, ev->returnType );
return;
}
@ -181,7 +181,7 @@ idEventDef::idEventDef( const char* command, const char* formatspec, char return
if( numEventDefs >= MAX_EVENTS )
{
eventError = true;
sprintf( eventErrorMsg, "numEventDefs >= MAX_EVENTS" );
idStr::snPrintf( eventErrorMsg, sizeof( eventErrorMsg ), "numEventDefs >= MAX_EVENTS" );
return;
}
eventDefList[numEventDefs] = ev;

View file

@ -1085,7 +1085,7 @@ void idRestoreGame::Error( const char* fmt, ... )
char text[ 1024 ];
va_start( argptr, fmt );
vsprintf( text, fmt, argptr );
idStr::vsnPrintf( text, sizeof( text ), fmt, argptr );
va_end( argptr );
objects.DeleteContents( true );

View file

@ -1437,7 +1437,7 @@ static void PrintFloat( float f )
char buf[128];
int i;
for( i = sprintf( buf, "%3.2f", f ); i < 7; i++ )
for( i = idStr::snPrintf( buf, sizeof( buf ), "%3.2f", f ); i < 7; i++ )
{
buf[i] = ' ';
}

View file

@ -43,7 +43,7 @@ All game cvars should be defined here.
*/
struct gameVersion_s {
gameVersion_s() { sprintf( string, "%s.%d%s %s %s %s", ENGINE_VERSION, BUILD_NUMBER, BUILD_DEBUG, BUILD_STRING, __DATE__, __TIME__ ); }
gameVersion_s() { idStr::snPrintf( string, sizeof( string ), "%s.%d%s %s %s %s", ENGINE_VERSION, BUILD_NUMBER, BUILD_DEBUG, BUILD_STRING, __DATE__, __TIME__ ); }
char string[256];
} gameVersion;

View file

@ -264,7 +264,7 @@ void idCompiler::Error( const char* message, ... ) const
char string[ 1024 ];
va_start( argptr, message );
vsprintf( string, message, argptr );
idStr::vsnPrintf( string, sizeof( string ), message, argptr );
va_end( argptr );
#if defined(USE_EXCEPTIONS)
@ -287,7 +287,7 @@ void idCompiler::Warning( const char* message, ... ) const
char string[ 1024 ];
va_start( argptr, message );
vsprintf( string, message, argptr );
idStr::vsnPrintf( string, sizeof( string ), message, argptr );
va_end( argptr );
parserPtr->Warning( "%s", string );

View file

@ -504,7 +504,7 @@ void idInterpreter::Error( const char* fmt, ... ) const
char text[ 1024 ];
va_start( argptr, fmt );
vsprintf( text, fmt, argptr );
idStr::vsnPrintf( text, sizeof( text ), fmt, argptr );
va_end( argptr );
StackTrace();
@ -533,7 +533,7 @@ void idInterpreter::Warning( const char* fmt, ... ) const
char text[ 1024 ];
va_start( argptr, fmt );
vsprintf( text, fmt, argptr );
idStr::vsnPrintf( text, sizeof( text ), fmt, argptr );
va_end( argptr );
if( ( instructionPointer >= 0 ) && ( instructionPointer < gameLocal.program.NumStatements() ) )

View file

@ -207,11 +207,11 @@ ID_INLINE const char* idInterpreter::FloatToString( float value )
if( value == ( float )( int )value )
{
sprintf( text, "%d", ( int )value );
idStr::snPrintf( text, sizeof( text ), "%d", ( int )value );
}
else
{
sprintf( text, "%f", value );
idStr::snPrintf( text, sizeof( text ), "%f", value );
}
return text;
}

View file

@ -892,7 +892,7 @@ void idThread::Error( const char* fmt, ... ) const
char text[ 1024 ];
va_start( argptr, fmt );
vsprintf( text, fmt, argptr );
idStr::vsnPrintf( text, sizeof( text ), fmt, argptr );
va_end( argptr );
interpreter.Error( text );
@ -909,7 +909,7 @@ void idThread::Warning( const char* fmt, ... ) const
char text[ 1024 ];
va_start( argptr, fmt );
vsprintf( text, fmt, argptr );
idStr::vsnPrintf( text, sizeof( text ), fmt, argptr );
va_end( argptr );
interpreter.Warning( text );

View file

@ -63,7 +63,7 @@ struct version_s
{
version_s()
{
sprintf( string, "%s.%d%s %s %s %s", ENGINE_VERSION, BUILD_NUMBER, BUILD_DEBUG, BUILD_STRING, __DATE__, __TIME__ );
idStr::snPrintf( string, sizeof( string ), "%s.%d%s %s %s %s", ENGINE_VERSION, BUILD_NUMBER, BUILD_DEBUG, BUILD_STRING, __DATE__, __TIME__ );
}
char string[256];
} version;

View file

@ -125,11 +125,11 @@ void idCommonLocal::VPrintf( const char* fmt, va_list args )
int t = Sys_Milliseconds();
if( com_timestampPrints.GetInteger() == 1 )
{
sprintf( msg, "[%5.2f]", t * 0.001f );
idStr::snPrintf( msg, sizeof( msg ), "[%5.2f]", t * 0.001f );
}
else
{
sprintf( msg, "[%i]", t );
idStr::snPrintf( msg, sizeof( msg ), "[%i]", t );
}
}
timeLength = strlen( msg );

View file

@ -200,6 +200,10 @@ void idConsoleLocal::DrawTextRightAlign( float x, float& y, const char* text, ..
va_start( argptr, text );
int i = idStr::vsnPrintf( string, sizeof( string ), text, argptr );
va_end( argptr );
if( i < 0 )
{
i = sizeof( string ) - 1;
}
renderSystem->DrawSmallStringExt( x - i * SMALLCHAR_WIDTH, y + 2, string, colorWhite, true );
y += SMALLCHAR_HEIGHT + 4;
}

View file

@ -250,7 +250,7 @@ const char* idAFVector::ToString( idStr& str, const int precision )
case idAFVector::VEC_COORDS:
{
char format[128];
sprintf( format, "( %%.%df, %%.%df, %%.%df )", precision, precision, precision );
idStr::snPrintf( format, sizeof( format ), "( %%.%df, %%.%df, %%.%df )", precision, precision, precision );
sprintf( str, format, vec.x, vec.y, vec.z );
break;
}

View file

@ -1757,7 +1757,7 @@ void idDeclManagerLocal::WritePrecacheCommands( idFile* f )
}
char str[1024];
sprintf( str, "touch %s %s\n", declTypes[i]->typeName.c_str(), decl->GetName() );
idStr::snPrintf( str, sizeof( str ), "touch %s %s\n", declTypes[i]->typeName.c_str(), decl->GetName() );
common->Printf( "%s", str );
f->Printf( "%s", str );
}

View file

@ -38,7 +38,7 @@ If you have questions concerning this license or the applicable additional terms
FS_WriteFloatString
=================
*/
int FS_WriteFloatString( char* buf, const char* fmt, va_list argPtr )
int FS_WriteFloatString( char* buf, int bufsize, const char* fmt, va_list argPtr )
{
// DG: replaced long with int for 64bit compatibility in the whole function
int i;
@ -77,44 +77,44 @@ int FS_WriteFloatString( char* buf, const char* fmt, va_list argPtr )
sprintf( tmp, "%1.10f", f );
tmp.StripTrailing( '0' );
tmp.StripTrailing( '.' );
index += sprintf( buf + index, "%s", tmp.c_str() );
index += idStr::snPrintf( buf + index, bufsize - index, "%s", tmp.c_str() );
}
else
{
index += sprintf( buf + index, format.c_str(), f );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), f );
}
break;
case 'd':
case 'i':
i = va_arg( argPtr, int );
index += sprintf( buf + index, format.c_str(), i );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), i );
break;
case 'u':
u = va_arg( argPtr, unsigned int );
index += sprintf( buf + index, format.c_str(), u );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), u );
break;
case 'o':
u = va_arg( argPtr, unsigned int );
index += sprintf( buf + index, format.c_str(), u );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), u );
break;
case 'x':
u = va_arg( argPtr, unsigned int );
index += sprintf( buf + index, format.c_str(), u );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), u );
break;
case 'X':
u = va_arg( argPtr, unsigned int );
index += sprintf( buf + index, format.c_str(), u );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), u );
break;
case 'c':
i = va_arg( argPtr, int );
index += sprintf( buf + index, format.c_str(), ( char ) i );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), ( char ) i );
break;
case 's':
str = va_arg( argPtr, char* );
index += sprintf( buf + index, format.c_str(), str );
index += idStr::snPrintf( buf + index, bufsize - index, format.c_str(), str );
break;
case '%':
index += sprintf( buf + index, "%s", format.c_str() );
index += idStr::snPrintf( buf + index, bufsize - index, "%s", format.c_str() );
break;
default:
common->Error( "FS_WriteFloatString: invalid format %s", format.c_str() );
@ -127,16 +127,16 @@ int FS_WriteFloatString( char* buf, const char* fmt, va_list argPtr )
switch( *fmt )
{
case 't':
index += sprintf( buf + index, "\t" );
index += idStr::snPrintf( buf + index, bufsize - index, "\t" );
break;
case 'v':
index += sprintf( buf + index, "\v" );
index += idStr::snPrintf( buf + index, bufsize - index, "\v" );
break;
case 'n':
index += sprintf( buf + index, "\n" );
index += idStr::snPrintf( buf + index, bufsize - index, "\n" );
break;
case '\\':
index += sprintf( buf + index, "\\" );
index += idStr::snPrintf( buf + index, bufsize - index, "\\" );
break;
default:
common->Error( "FS_WriteFloatString: unknown escape character \'%c\'", *fmt );
@ -145,7 +145,7 @@ int FS_WriteFloatString( char* buf, const char* fmt, va_list argPtr )
fmt++;
break;
default:
index += sprintf( buf + index, "%c", *fmt );
index += idStr::snPrintf( buf + index, bufsize - index, "%c", *fmt );
fmt++;
break;
}
@ -285,7 +285,7 @@ int idFile::Printf( const char* fmt, ... )
va_list argptr;
va_start( argptr, fmt );
length = idStr::vsnPrintf( buf, MAX_PRINT_MSG - 1, fmt, argptr );
length = idStr::vsnPrintf( buf, sizeof( buf ), fmt, argptr );
va_end( argptr );
// so notepad formats the lines correctly
@ -305,7 +305,11 @@ int idFile::VPrintf( const char* fmt, va_list args )
char buf[MAX_PRINT_MSG];
int length;
length = idStr::vsnPrintf( buf, MAX_PRINT_MSG - 1, fmt, args );
length = idStr::vsnPrintf( buf, sizeof( buf ), fmt, args );
if( length < 0 )
{
length = sizeof( buf ) - 1;
}
return Write( buf, length );
}
@ -321,7 +325,7 @@ int idFile::WriteFloatString( const char* fmt, ... )
va_list argPtr;
va_start( argPtr, fmt );
len = FS_WriteFloatString( buf, fmt, argPtr );
len = FS_WriteFloatString( buf, sizeof( buf ), fmt, argPtr );
va_end( argPtr );
return Write( buf, len );

View file

@ -252,7 +252,7 @@ void idTokenParser::Error( VERIFY_FORMAT_STRING const char* str, ... )
va_list ap;
va_start( ap, str );
vsprintf( text, str, ap );
idStr::vsnPrintf( text, sizeof( text ), str, ap );
va_end( ap );
idLib::common->Warning( text );
@ -263,7 +263,7 @@ void idTokenParser::Warning( VERIFY_FORMAT_STRING const char* str, ... )
va_list ap;
va_start( ap, str );
vsprintf( text, str, ap );
idStr::vsnPrintf( text, sizeof( text ), str, ap );
va_end( ap );
idLib::common->Warning( text );

View file

@ -247,7 +247,7 @@ void idLexer::Error( const char* str, ... )
}
va_start( ap, str );
vsprintf( text, str, ap );
idStr::vsnPrintf( text, sizeof( text ), str, ap );
va_end( ap );
if( idLexer::flags & LEXFL_NOFATALERRORS )
@ -276,7 +276,7 @@ void idLexer::Warning( const char* str, ... )
}
va_start( ap, str );
vsprintf( text, str, ap );
idStr::vsnPrintf( text, sizeof( text ), str, ap );
va_end( ap );
idLib::common->Warning( "file %s, line %d: %s", idLexer::filename.c_str(), idLexer::line, text );
}

View file

@ -367,7 +367,7 @@ void idParser::Error( const char* str, ... ) const
va_list ap;
va_start( ap, str );
vsprintf( text, str, ap );
idStr::vsnPrintf( text, sizeof( text ), str, ap );
va_end( ap );
if( idParser::scriptstack )
{
@ -386,7 +386,7 @@ void idParser::Warning( const char* str, ... ) const
va_list ap;
va_start( ap, str );
vsprintf( text, str, ap );
idStr::vsnPrintf( text, sizeof( text ), str, ap );
va_end( ap );
if( idParser::scriptstack )
{
@ -836,7 +836,7 @@ int idParser::ExpandBuiltinDefine( idToken* deftoken, define_t* define, idToken*
{
case BUILTIN_LINE:
{
sprintf( buf, "%d", deftoken->line );
idStr::snPrintf( buf, sizeof( buf ), "%d", deftoken->line );
( *token ) = buf;
token->intvalue = deftoken->line;
token->floatvalue = deftoken->line;
@ -2680,7 +2680,7 @@ int idParser::Directive_eval()
token.whiteSpaceEnd_p = NULL;
token.linesCrossed = 0;
token.flags = 0;
sprintf( buf, "%d", abs( value ) );
idStr::snPrintf( buf, sizeof( buf ), "%d", abs( value ) );
token = buf;
token.type = TT_NUMBER;
token.subtype = TT_INTEGER | TT_LONG | TT_DECIMAL;
@ -2713,7 +2713,7 @@ int idParser::Directive_evalfloat()
token.whiteSpaceEnd_p = NULL;
token.linesCrossed = 0;
token.flags = 0;
sprintf( buf, "%1.2f", idMath::Fabs( value ) );
idStr::snPrintf( buf, sizeof( buf ), "%1.2f", idMath::Fabs( value ) );
token = buf;
token.type = TT_NUMBER;
token.subtype = TT_FLOAT | TT_LONG | TT_DECIMAL;
@ -2850,7 +2850,7 @@ int idParser::DollarDirective_evalint()
token.whiteSpaceEnd_p = NULL;
token.linesCrossed = 0;
token.flags = 0;
sprintf( buf, "%d", abs( value ) );
idStr::snPrintf( buf, sizeof( buf ), "%d", abs( value ) );
token = buf;
token.type = TT_NUMBER;
token.subtype = TT_INTEGER | TT_LONG | TT_DECIMAL | TT_VALUESVALID;
@ -2885,7 +2885,7 @@ int idParser::DollarDirective_evalfloat()
token.whiteSpaceEnd_p = NULL;
token.linesCrossed = 0;
token.flags = 0;
sprintf( buf, "%1.2f", fabs( value ) );
idStr::snPrintf( buf, sizeof( buf ), "%1.2f", fabs( value ) );
token = buf;
token.type = TT_NUMBER;
token.subtype = TT_FLOAT | TT_LONG | TT_DECIMAL | TT_VALUESVALID;

View file

@ -734,11 +734,11 @@ void idStr::Format( const char* fmt, ... )
char text[MAX_PRINT_MSG];
va_start( argptr, fmt );
int len = idStr::vsnPrintf( text, sizeof( text ) - 1, fmt, argptr );
// SRS - using idStr::vsnPrintf() guarantees size and null termination
int len = idStr::vsnPrintf( text, sizeof( text ), fmt, argptr );
va_end( argptr );
text[ sizeof( text ) - 1 ] = '\0';
if( ( size_t )len >= sizeof( text ) - 1 )
if( len < 0 )
{
idLib::common->FatalError( "Tried to set a large buffer using %s", fmt );
}
@ -2247,21 +2247,16 @@ int idStr::snPrintf( char* dest, int size, const char* fmt, ... )
{
int len;
va_list argptr;
char buffer[32000]; // big, but small enough to fit in PPC stack
va_start( argptr, fmt );
len = vsprintf( buffer, fmt, argptr );
// SRS - using idStr::vsnPrintf() guarantees size and null termination
len = idStr::vsnPrintf( dest, size, fmt, argptr );
va_end( argptr );
if( len >= sizeof( buffer ) )
if( len < 0 )
{
idLib::common->Error( "idStr::snPrintf: overflowed buffer" );
idLib::common->Warning( "idStr::snPrintf: overflow of %i in %i\n", len, size - 1 );
len = size - 1;
}
if( len >= size )
{
idLib::common->Warning( "idStr::snPrintf: overflow of %i in %i\n", len, size );
len = size;
}
idStr::Copynz( dest, buffer, size );
return len;
}
@ -2321,9 +2316,13 @@ int sprintf( idStr& string, const char* fmt, ... )
char buffer[32000];
va_start( argptr, fmt );
l = idStr::vsnPrintf( buffer, sizeof( buffer ) - 1, fmt, argptr );
// SRS - using idStr::vsnPrintf() guarantees size and null termination
l = idStr::vsnPrintf( buffer, sizeof( buffer ), fmt, argptr );
va_end( argptr );
buffer[sizeof( buffer ) - 1] = '\0';
if( l < 0 )
{
l = sizeof( buffer ) - 1;
}
string = buffer;
return l;
@ -2341,8 +2340,12 @@ int vsprintf( idStr& string, const char* fmt, va_list argptr )
int l;
char buffer[32000];
l = idStr::vsnPrintf( buffer, sizeof( buffer ) - 1, fmt, argptr );
buffer[sizeof( buffer ) - 1] = '\0';
// SRS - using idStr::vsnPrintf() guarantees size and null termination
l = idStr::vsnPrintf( buffer, sizeof( buffer ), fmt, argptr );
if( l < 0 )
{
l = sizeof( buffer ) - 1;
}
string = buffer;
return l;
@ -2364,12 +2367,14 @@ char* va( const char* fmt, ... )
char* buf;
buf = string[index];
index = ( index + 1 ) & 3;
va_start( argptr, fmt );
vsprintf( buf, fmt, argptr );
// SRS - using idStr::vsnPrintf() guarantees size and null termination
idStr::vsnPrintf( buf, sizeof( string[index] ), fmt, argptr );
va_end( argptr );
index = ( index + 1 ) & 3;
return buf;
}

View file

@ -610,7 +610,7 @@ ID_INLINE idStr::idStr( const int i )
char text[ 64 ];
int l;
l = sprintf( text, "%d", i );
l = idStr::snPrintf( text, sizeof( text ), "%d", i );
EnsureAlloced( l + 1 );
strcpy( data, text );
len = l;
@ -622,7 +622,7 @@ ID_INLINE idStr::idStr( const unsigned u )
char text[ 64 ];
int l;
l = sprintf( text, "%u", u );
l = idStr::snPrintf( text, sizeof( text ), "%u", u );
EnsureAlloced( l + 1 );
strcpy( data, text );
len = l;
@ -758,7 +758,7 @@ ID_INLINE idStr operator+( const idStr& a, const float b )
char text[ 64 ];
idStr result( a );
sprintf( text, "%f", b );
idStr::snPrintf( text, sizeof( text ), "%f", b );
result.Append( text );
return result;
@ -769,7 +769,7 @@ ID_INLINE idStr operator+( const idStr& a, const int b )
char text[ 64 ];
idStr result( a );
sprintf( text, "%d", b );
idStr::snPrintf( text, sizeof( text ), "%d", b );
result.Append( text );
return result;
@ -780,7 +780,7 @@ ID_INLINE idStr operator+( const idStr& a, const unsigned b )
char text[ 64 ];
idStr result( a );
sprintf( text, "%u", b );
idStr::snPrintf( text, sizeof( text ), "%u", b );
result.Append( text );
return result;
@ -790,7 +790,7 @@ ID_INLINE idStr& idStr::operator+=( const float a )
{
char text[ 64 ];
sprintf( text, "%f", a );
idStr::snPrintf( text, sizeof( text ), "%f", a );
Append( text );
return *this;
@ -800,7 +800,7 @@ ID_INLINE idStr& idStr::operator+=( const int a )
{
char text[ 64 ];
sprintf( text, "%d", a );
idStr::snPrintf( text, sizeof( text ), "%d", a );
Append( text );
return *this;
@ -810,7 +810,7 @@ ID_INLINE idStr& idStr::operator+=( const unsigned a )
{
char text[ 64 ];
sprintf( text, "%u", a );
idStr::snPrintf( text, sizeof( text ), "%u", a );
Append( text );
return *this;

View file

@ -685,7 +685,7 @@ void R_CombineCubeImages_f( const idCmdArgs& args )
int orderRemap[6] = { 1, 3, 4, 2, 5, 6 };
for( side = 0 ; side < 6 ; side++ )
{
sprintf( filename, "%s%i%04i.tga", baseName.c_str(), orderRemap[side], frameNum );
idStr::snPrintf( filename, sizeof( filename ), "%s%i%04i.tga", baseName.c_str(), orderRemap[side], frameNum );
idLib::Printf( "reading %s\n", filename );
R_LoadImage( filename, &pics[side], &width, &height, NULL, true, NULL );
@ -738,7 +738,7 @@ void R_CombineCubeImages_f( const idCmdArgs& args )
memcpy( combined + width * height * 4 * side, pics[side], width * height * 4 );
Mem_Free( pics[side] );
}
sprintf( filename, "%sCM%04i.tga", baseName.c_str(), frameNum );
idStr::snPrintf( filename, sizeof( filename ), "%sCM%04i.tga", baseName.c_str(), frameNum );
idLib::Printf( "writing %s\n", filename );
R_WriteTGA( filename, combined, width, height * 6 );

View file

@ -73,7 +73,7 @@ void jpg_Error( const char* fmt, ... )
char msg[2048];
va_start( argptr, fmt );
vsprintf( msg, fmt, argptr );
idStr::vsnPrintf( msg, sizeof( msg ), fmt, argptr );
va_end( argptr );
common->FatalError( "%s", msg );
@ -85,7 +85,7 @@ void jpg_Printf( const char* fmt, ... )
char msg[2048];
va_start( argptr, fmt );
vsprintf( msg, fmt, argptr );
idStr::vsnPrintf( msg, sizeof( msg ), fmt, argptr );
va_end( argptr );
common->Printf( "%s", msg );

View file

@ -228,7 +228,7 @@ void idRenderModelManagerLocal::WritePrecacheCommands( idFile* f )
}
char str[1024];
sprintf( str, "touchModel %s\n", model->Name() );
idStr::snPrintf( str, sizeof( str ), "touchModel %s\n", model->Name() );
common->Printf( "%s", str );
f->Printf( "%s", str );
}

View file

@ -305,11 +305,11 @@ static bitFlag_t statusWordFlags[] =
Sys_FPU_PrintStateFlags
===============
*/
int Sys_FPU_PrintStateFlags( char* ptr, int ctrl, int stat, int tags, int inof, int inse, int opof, int opse )
int Sys_FPU_PrintStateFlags( char* buf, int bufsize, int ctrl, int stat, int tags, int inof, int inse, int opof, int opse )
{
int i, length = 0;
length += sprintf( ptr + length, "CTRL = %08x\n"
length += idStr::snPrintf( buf + length, bufsize - length, "CTRL = %08x\n"
"STAT = %08x\n"
"TAGS = %08x\n"
"INOF = %08x\n"
@ -319,21 +319,21 @@ int Sys_FPU_PrintStateFlags( char* ptr, int ctrl, int stat, int tags, int inof,
"\n",
ctrl, stat, tags, inof, inse, opof, opse );
length += sprintf( ptr + length, "Control Word:\n" );
length += idStr::snPrintf( buf + length, bufsize - length, "Control Word:\n" );
for( i = 0; controlWordFlags[i].name[0]; i++ )
{
length += sprintf( ptr + length, " %-30s = %s\n", controlWordFlags[i].name, ( ctrl & ( 1 << controlWordFlags[i].bit ) ) ? "true" : "false" );
length += idStr::snPrintf( buf + length, bufsize - length, " %-30s = %s\n", controlWordFlags[i].name, ( ctrl & ( 1 << controlWordFlags[i].bit ) ) ? "true" : "false" );
}
length += sprintf( ptr + length, " %-30s = %s\n", "Precision control", precisionControlField[( ctrl >> 8 ) & 3] );
length += sprintf( ptr + length, " %-30s = %s\n", "Rounding control", roundingControlField[( ctrl >> 10 ) & 3] );
length += idStr::snPrintf( buf + length, bufsize - length, " %-30s = %s\n", "Precision control", precisionControlField[( ctrl >> 8 ) & 3] );
length += idStr::snPrintf( buf + length, bufsize - length, " %-30s = %s\n", "Rounding control", roundingControlField[( ctrl >> 10 ) & 3] );
length += sprintf( ptr + length, "Status Word:\n" );
length += idStr::snPrintf( buf + length, bufsize - length, "Status Word:\n" );
for( i = 0; statusWordFlags[i].name[0]; i++ )
{
ptr += sprintf( ptr + length, " %-30s = %s\n", statusWordFlags[i].name, ( stat & ( 1 << statusWordFlags[i].bit ) ) ? "true" : "false" );
length += idStr::snPrintf( buf + length, bufsize - length, " %-30s = %s\n", statusWordFlags[i].name, ( stat & ( 1 << statusWordFlags[i].bit ) ) ? "true" : "false" );
}
length += sprintf( ptr + length, " %-30s = %d%d%d%d\n", "Condition code", ( stat >> 8 ) & 1, ( stat >> 9 ) & 1, ( stat >> 10 ) & 1, ( stat >> 14 ) & 1 );
length += sprintf( ptr + length, " %-30s = %d\n", "Top of stack pointer", ( stat >> 11 ) & 7 );
length += idStr::snPrintf( buf + length, bufsize - length, " %-30s = %d%d%d%d\n", "Condition code", ( stat >> 8 ) & 1, ( stat >> 9 ) & 1, ( stat >> 10 ) & 1, ( stat >> 14 ) & 1 );
length += idStr::snPrintf( buf + length, bufsize - length, " %-30s = %d\n", "Top of stack pointer", ( stat >> 11 ) & 7 );
return length;
}

View file

@ -248,15 +248,15 @@ const char* Sys_SecToStr( int sec )
if( weeks > 0 )
{
sprintf( timeString, "%dw, %dd, %d:%02d:%02d", weeks, days, hours, min, sec );
idStr::snPrintf( timeString, sizeof( timeString ), "%dw, %dd, %d:%02d:%02d", weeks, days, hours, min, sec );
}
else if( days > 0 )
{
sprintf( timeString, "%dd, %d:%02d:%02d", days, hours, min, sec );
idStr::snPrintf( timeString, sizeof( timeString ), "%dd, %d:%02d:%02d", days, hours, min, sec );
}
else
{
sprintf( timeString, "%d:%02d:%02d", hours, min, sec );
idStr::snPrintf( timeString, sizeof( timeString ), "%d:%02d:%02d", hours, min, sec );
}
return timeString;

View file

@ -89,7 +89,7 @@ struct netVersion_s
{
netVersion_s()
{
sprintf( string, "%s.%d", ENGINE_VERSION, BUILD_NUMBER );
idStr::snPrintf( string, sizeof( string ), "%s.%d", ENGINE_VERSION, BUILD_NUMBER );
}
char string[256];
} netVersion;

View file

@ -55,7 +55,7 @@ void DisplayRealTimeString( const char* string, ... )
if( time > lastUpdateTime + OUTPUT_UPDATE_TIME )
{
va_start( argPtr, string );
vsprintf( buf, string, argPtr );
idStr::vsnPrintf( buf, sizeof( buf ), string, argPtr );
va_end( argPtr );
common->Printf( buf );
lastUpdateTime = time;

View file

@ -1005,9 +1005,10 @@ char* idRectangle::String() const
// use an array so that multiple toString's won't collide
s = str[ index ];
index = ( index + 1 ) & 7;
sprintf( s, "%.2f %.2f %.2f %.2f", x, y, w, h );
idStr::snPrintf( s, sizeof( str[ index ] ), "%.2f %.2f %.2f %.2f", x, y, w, h );
index = ( index + 1 ) & 7;
return s;
}

View file

@ -110,7 +110,7 @@ void idUserInterfaceManagerLocal::WritePrecacheCommands( idFile* f )
for( int i = 0; i < c; i++ )
{
char str[1024];
sprintf( str, "touchGui %s\n", guis[i]->Name() );
idStr::snPrintf( str, sizeof( str ), "touchGui %s\n", guis[i]->Name() );
common->Printf( "%s", str );
f->Printf( "%s", str );
}

View file

@ -1138,16 +1138,16 @@ void idWindow::DebugDraw( int time, float x, float y )
if( str.Length() )
{
sprintf( buff, "%s\n", str.c_str() );
idStr::snPrintf( buff, sizeof( buff ), "%s\n", str.c_str() );
}
sprintf( out, "Rect: %0.1f, %0.1f, %0.1f, %0.1f\n", rect.x(), rect.y(), rect.w(), rect.h() );
idStr::snPrintf( out, sizeof( out ), "Rect: %0.1f, %0.1f, %0.1f, %0.1f\n", rect.x(), rect.y(), rect.w(), rect.h() );
strcat( buff, out );
sprintf( out, "Draw Rect: %0.1f, %0.1f, %0.1f, %0.1f\n", drawRect.x, drawRect.y, drawRect.w, drawRect.h );
idStr::snPrintf( out, sizeof( out ), "Draw Rect: %0.1f, %0.1f, %0.1f, %0.1f\n", drawRect.x, drawRect.y, drawRect.w, drawRect.h );
strcat( buff, out );
sprintf( out, "Client Rect: %0.1f, %0.1f, %0.1f, %0.1f\n", clientRect.x, clientRect.y, clientRect.w, clientRect.h );
idStr::snPrintf( out, sizeof( out ), "Client Rect: %0.1f, %0.1f, %0.1f, %0.1f\n", clientRect.x, clientRect.y, clientRect.w, clientRect.h );
strcat( buff, out );
sprintf( out, "Cursor: %0.1f : %0.1f\n", gui->CursorX(), gui->CursorY() );
idStr::snPrintf( out, sizeof( out ), "Cursor: %0.1f : %0.1f\n", gui->CursorX(), gui->CursorY() );
strcat( buff, out );