Changeset - r9151:8f9b91035e52
[Not reviewed]
master
0 1 0
rubidium - 16 years ago 2008-05-08 13:51:15
rubidium@openttd.org
(svn r13013) -Fix: GCC 4.3 warning about a clobbering mask due to longjmp. This can't be solved by using exceptions because the longjmp is needed for PNG (C-code) handling.
1 file changed with 1 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/spriteloader/png.cpp
Show inline comments
 
@@ -23,49 +23,49 @@ static void PNGAPI png_my_error(png_stru
 
{
 
	DEBUG(sprite, 0, "ERROR (libpng): %s - %s", message, (char *)png_get_error_ptr(png_ptr));
 
	longjmp(png_ptr->jmpbuf, 1);
 
}
 

	
 
static void PNGAPI png_my_warning(png_structp png_ptr, png_const_charp message)
 
{
 
	DEBUG(sprite, 0, "WARNING (libpng): %s - %s", message, (char *)png_get_error_ptr(png_ptr));
 
}
 

	
 
static bool OpenPNGFile(const char *filename, uint32 id, bool mask)
 
{
 
	char png_file[MAX_PATH];
 

	
 
	snprintf(png_file, sizeof(png_file), "sprites" PATHSEP "%s" PATHSEP "%d%s.png", filename, id, mask ? "m" : "");
 
	if (FioCheckFileExists(png_file)) {
 
		FioOpenFile(PNG_SLOT, png_file);
 
		return true;
 
	}
 

	
 
	/* TODO -- Add TAR support */
 
	return false;
 
}
 

	
 
static bool LoadPNG(SpriteLoader::Sprite *sprite, const char *filename, uint32 id, bool mask)
 
static bool LoadPNG(SpriteLoader::Sprite *sprite, const char *filename, uint32 id, volatile bool mask)
 
{
 
	png_byte header[8];
 
	png_structp png_ptr;
 
	png_infop info_ptr, end_info;
 
	uint bit_depth, color_type;
 
	uint i, pixelsize;
 
	png_bytep row_pointer;
 
	SpriteLoader::CommonPixel *dst;
 

	
 
	if (!OpenPNGFile(filename, id, mask)) return mask; // If mask is true, and file not found, continue true anyway, as it isn't a show-stopper
 

	
 
	/* Check the header */
 
	FioReadBlock(header, 8);
 
	if (png_sig_cmp(header, 0, 8) != 0) return false;
 

	
 
	/* Create the reader */
 
	png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, png_my_error, png_my_warning);
 
	if (png_ptr == NULL) return false;
 

	
 
	/* Create initial stuff */
 
	info_ptr = png_create_info_struct(png_ptr);
 
	if (info_ptr == NULL) {
 
		png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
 
		return false;
0 comments (0 inline, 0 general)