diff --git a/Engine/source/sfx/sfxSystem.cpp b/Engine/source/sfx/sfxSystem.cpp index 8da677554..1b3767274 100644 --- a/Engine/source/sfx/sfxSystem.cpp +++ b/Engine/source/sfx/sfxSystem.cpp @@ -1253,8 +1253,11 @@ DefineEngineFunction( sfxGetAvailableDevices, const char*, (),, "@ref SFX_devices\n" "@ingroup SFX" ) { - char* deviceList = Con::getReturnBuffer( 2048 ); - deviceList[0] = 0; + const S32 bufferSize = 2048; + char* deviceList = Con::getReturnBuffer( bufferSize ); + S32 len = bufferSize; + char *ptr = deviceList; + *ptr = 0; SFXProvider* provider = SFXProvider::getFirstProvider(); while ( provider ) @@ -1264,16 +1267,15 @@ DefineEngineFunction( sfxGetAvailableDevices, const char*, (),, for ( S32 d=0; d < deviceInfo.size(); d++ ) { const SFXDeviceInfo* info = deviceInfo[d]; - dStrcat( deviceList, provider->getName() ); - dStrcat( deviceList, "\t" ); - dStrcat( deviceList, info->name ); - dStrcat( deviceList, "\t" ); - dStrcat( deviceList, info->hasHardware ? "1" : "0" ); - dStrcat( deviceList, "\t" ); - dStrcat( deviceList, Con::getIntArg( info->maxBuffers ) ); - dStrcat( deviceList, "\n" ); - - //TODO: caps + const char *providerName = provider->getName().c_str(); + const char *infoName = info->name.c_str(); + dSprintf(ptr, len, "%s\t%s\t%s\t%i\n", providerName, infoName, info->hasHardware ? "1" : "0", info->maxBuffers); + + ptr += dStrlen(ptr); + len = bufferSize - (ptr - deviceList); + + if (len <= 0) + return deviceList; } provider = provider->getNextProvider();