X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c96ea65713a8dd58ae40b10718723b5c92a303e3..ab5fe83396c13f9fbf01630c52adf4df7607cbfe:/src/common/imagjpeg.cpp diff --git a/src/common/imagjpeg.cpp b/src/common/imagjpeg.cpp index 8e760ef7b1..2f5cd0a432 100644 --- a/src/common/imagjpeg.cpp +++ b/src/common/imagjpeg.cpp @@ -27,13 +27,21 @@ #include "wx/debug.h" #include "wx/log.h" #include "wx/app.h" -extern "C" -{ -#ifdef __WATCOMC__ + +// NB: Some compilers define boolean type in Windows headers (e.g. Watcom C++). +// This causes a conflict with jmorecfg.h header from libjpeg, so we have +// to make sure libjpeg won't try to define boolean itself. This is done by +// defining HAVE_BOOLEAN. +#if defined(__WXMSW__) && (defined(__MWERKS__) || defined(__WATCOMC__)) #define HAVE_BOOLEAN + #include #endif + +extern "C" +{ #include "jpeglib.h" } + #include "wx/filefn.h" #include "wx/wfstream.h" #include "wx/intl.h" @@ -50,10 +58,6 @@ extern "C" #endif #endif -#ifdef __WXMSW__ -#include -#endif - //----------------------------------------------------------------------------- // wxJPEGHandler //----------------------------------------------------------------------------- @@ -102,7 +106,7 @@ METHODDEF(void) my_skip_input_data ( j_decompress_ptr cinfo, long num_bytes ) { my_src_ptr src = (my_src_ptr) cinfo->src; - while (num_bytes > (long)src->pub.bytes_in_buffer) + while (num_bytes > (long)src->pub.bytes_in_buffer) { num_bytes -= (long) src->pub.bytes_in_buffer; src->pub.fill_input_buffer(cinfo); @@ -198,8 +202,9 @@ bool wxJPEGHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbos /* If we get here, the JPEG code has signaled an error. * We need to clean up the JPEG object, close the input file, and return. */ - if (verbose) + if (verbose) wxLogError(_("JPEG: Couldn't load - file is probably corrupted.")); + (cinfo.src->term_source)(&cinfo); jpeg_destroy_decompress(&cinfo); if (image->Ok()) image->Destroy(); return FALSE; @@ -306,12 +311,12 @@ bool wxJPEGHandler::SaveFile( wxImage *image, wxOutputStream& stream, bool verbo if (!verbose) cinfo.err->output_message=NULL; /* Establish the setjmp return context for my_error_exit to use. */ - if (setjmp(jerr.setjmp_buffer)) + if (setjmp(jerr.setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error. * We need to clean up the JPEG object, close the input file, and return. */ - if (verbose) + if (verbose) wxLogError(_("JPEG: Couldn't save image.")); jpeg_destroy_compress(&cinfo); return FALSE; @@ -357,7 +362,7 @@ bool wxJPEGHandler::DoCanRead( wxInputStream& stream ) { unsigned char hdr[2]; - stream.Read(&hdr, 2); + stream.Read(hdr, 2); stream.SeekI(-2, wxFromCurrent); return (hdr[0] == 0xFF && hdr[1] == 0xD8); }