diff options
Diffstat (limited to 'indra/llimage')
| -rw-r--r-- | indra/llimage/llpngwrapper.cpp | 28 | 
1 files changed, 18 insertions, 10 deletions
| diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp index aad139f570..640eda7b01 100644 --- a/indra/llimage/llpngwrapper.cpp +++ b/indra/llimage/llpngwrapper.cpp @@ -31,6 +31,15 @@  #include "llimage.h"  #include "llpngwrapper.h" +#include "llexception.h" + +namespace { +struct PngError: public LLException +{ +    PngError(png_const_charp msg): LLException(msg) {} +}; +} // anonymous namespace +  // ---------------------------------------------------------------------------  // LLPngWrapper  // --------------------------------------------------------------------------- @@ -75,11 +84,10 @@ BOOL LLPngWrapper::isValidPng(U8* src)  }  // Called by the libpng library when a fatal encoding or decoding error -// occurs.  We simply throw the error message and let our try/catch -// block clean up. +// occurs. We throw PngError and let our try/catch block clean up.  void LLPngWrapper::errorHandler(png_structp png_ptr, png_const_charp msg)  { -	throw msg; +	LLTHROW(PngError(msg));  }  // Called by the libpng library when reading (decoding) the PNG file. We @@ -129,7 +137,7 @@ BOOL LLPngWrapper::readPng(U8* src, S32 dataSize, LLImageRaw* rawImage, ImageInf  			this, &errorHandler, NULL);  		if (mReadPngPtr == NULL)  		{ -			throw "Problem creating png read structure"; +			LLTHROW(PngError("Problem creating png read structure"));  		}  		// Allocate/initialize the memory for image information. @@ -187,9 +195,9 @@ BOOL LLPngWrapper::readPng(U8* src, S32 dataSize, LLImageRaw* rawImage, ImageInf  		mFinalSize = dataPtr.mOffset;  	} -	catch (png_const_charp msg) +	catch (const PngError& msg)  	{ -		mErrorMessage = msg; +		mErrorMessage = msg.what();  		releaseResources();  		return (FALSE);  	} @@ -288,14 +296,14 @@ BOOL LLPngWrapper::writePng(const LLImageRaw* rawImage, U8* dest)  		if (mColorType == -1)  		{ -			throw "Unsupported image: unexpected number of channels"; +			LLTHROW(PngError("Unsupported image: unexpected number of channels"));  		}  		mWritePngPtr = png_create_write_struct(PNG_LIBPNG_VER_STRING,  			NULL, &errorHandler, NULL);  		if (!mWritePngPtr)  		{ -			throw "Problem creating png write structure"; +			LLTHROW(PngError("Problem creating png write structure"));  		}  		mWriteInfoPtr = png_create_info_struct(mWritePngPtr); @@ -339,9 +347,9 @@ BOOL LLPngWrapper::writePng(const LLImageRaw* rawImage, U8* dest)  		png_write_end(mWritePngPtr, mWriteInfoPtr);  		mFinalSize = dataPtr.mOffset;  	} -	catch (png_const_charp msg) +	catch (const PngError& msg)  	{ -		mErrorMessage = msg; +		mErrorMessage = msg.what();  		releaseResources();  		return (FALSE);  	} | 
