Browse Source

Merge pull request #917 from jamesu/fix_audio_print

Fix bug where console stack was incorrectly used to print audio devices
Daniel Buckmaster 10 years ago
parent
commit
1f0209db78
1 changed files with 14 additions and 12 deletions
  1. 14 12
      Engine/source/sfx/sfxSystem.cpp

+ 14 - 12
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();