exceptions

This commit is contained in:
Glenn Maynard
2004-12-01 01:11:14 +00:00
parent c41cefe7fd
commit 318a27fcab
3 changed files with 26 additions and 63 deletions
+2 -19
View File
@@ -4,20 +4,12 @@
#include "RageLog.h"
#include "StepMania.h"
#include <cstdarg>
#if defined(_WINDOWS) && defined(DEBUG)
#include <windows.h>
#endif
RageException::RageException( const CString &str ):
m_sError(str)
{
}
const char* RageException::what() const throw ()
{
return m_sError;
}
/* This is no longer actually implemented by throwing an exception, but it acts
* the same way to code in practice. */
void RageException::Throw(const char *fmt, ...)
@@ -52,15 +44,6 @@ void RageException::Throw(const char *fmt, ...)
HandleException( error );
}
void RageException::ThrowNonfatal(const char *fmt, ...)
{
va_list va;
va_start(va, fmt);
CString error = vssprintf( fmt, va );
va_end(va);
throw RageException( error );
}
/*
* Copyright (c) 2001-2004 Chris Danford
* All rights reserved.
+2 -18
View File
@@ -5,25 +5,9 @@
#ifndef RAGEEXCEPTION_H
#define RAGEEXCEPTION_H
#include <exception>
#include <cstdarg>
class RageException : public exception
namespace RageException
{
public:
RageException( const CString &str );
virtual const char *what() const throw();
virtual ~RageException() throw() { }
/* The only difference between these is that Throw triggers debug behavior
* and Nonfatal doesn't. Nonfatal is used when the exception happens
* normally and will be caught, such as when a driver fails to initialize. */
static void NORETURN Throw(const char *fmt, ...);
static void NORETURN ThrowNonfatal(const char *fmt, ...);
protected:
CString m_sError;
void NORETURN Throw(const char *fmt, ...);
};
#endif
+22 -26
View File
@@ -111,47 +111,43 @@ RageSoundDriver *MakeRageSoundDriver(CString drivers)
for(unsigned i = 0; ret == NULL && i < DriversToTry.size(); ++i)
{
try {
Driver = DriversToTry[i];
LOG->Trace("Initializing driver: %s", DriversToTry[i].c_str());
Driver = DriversToTry[i];
LOG->Trace("Initializing driver: %s", DriversToTry[i].c_str());
#ifdef _WINDOWS
if(!DriversToTry[i].CompareNoCase("DirectSound")) ret = new RageSound_DSound;
if(!DriversToTry[i].CompareNoCase("DirectSound-sw")) ret = new RageSound_DSound_Software;
if(!DriversToTry[i].CompareNoCase("WaveOut")) ret = new RageSound_WaveOut;
if(!DriversToTry[i].CompareNoCase("DirectSound")) ret = new RageSound_DSound;
if(!DriversToTry[i].CompareNoCase("DirectSound-sw")) ret = new RageSound_DSound_Software;
if(!DriversToTry[i].CompareNoCase("WaveOut")) ret = new RageSound_WaveOut;
#endif
#ifdef _XBOX
if(!DriversToTry[i].CompareNoCase("DirectSound")) ret = new RageSound_DSound;
if(!DriversToTry[i].CompareNoCase("DirectSound")) ret = new RageSound_DSound;
#endif
#ifdef HAVE_ALSA
if(!DriversToTry[i].CompareNoCase("ALSA")) ret = new RageSound_ALSA9;
if(!DriversToTry[i].CompareNoCase("ALSA-sw")) ret = new RageSound_ALSA9_Software;
if(!DriversToTry[i].CompareNoCase("ALSA")) ret = new RageSound_ALSA9;
if(!DriversToTry[i].CompareNoCase("ALSA-sw")) ret = new RageSound_ALSA9_Software;
#endif
#ifdef HAVE_OSS
if(!DriversToTry[i].CompareNoCase("OSS")) ret = new RageSound_OSS;
if(!DriversToTry[i].CompareNoCase("OSS")) ret = new RageSound_OSS;
#endif
#ifdef RAGE_SOUND_CA
if(!DriversToTry[i].CompareNoCase("CoreAudio")) ret = new RageSound_CA;
if(!DriversToTry[i].CompareNoCase("CoreAudio")) ret = new RageSound_CA;
#endif
#ifdef RAGE_SOUND_QT1
if(!DriversToTry[i].CompareNoCase("QT1")) ret = new RageSound_QT1;
if(!DriversToTry[i].CompareNoCase("QT1")) ret = new RageSound_QT1;
#endif
if(!DriversToTry[i].CompareNoCase("Null")) ret = new RageSound_Null;
if(!DriversToTry[i].CompareNoCase("Null")) ret = new RageSound_Null;
if( ret == NULL )
{
LOG->Warn( "Unknown sound driver name: %s", DriversToTry[i].c_str() );
continue;
}
if( ret == NULL )
{
LOG->Warn( "Unknown sound driver name: %s", DriversToTry[i].c_str() );
continue;
}
CString sError = ret->Init();
if( sError != "" )
{
LOG->Info( "Couldn't load driver %s: %s", DriversToTry[i].c_str(), sError.c_str() );
SAFE_DELETE( ret );
}
} catch(const RageException &e) {
LOG->Info("Couldn't load driver %s: %s", DriversToTry[i].c_str(), e.what());
CString sError = ret->Init();
if( sError != "" )
{
LOG->Info( "Couldn't load driver %s: %s", DriversToTry[i].c_str(), sError.c_str() );
SAFE_DELETE( ret );
}
}