add custom error handlers

This commit is contained in:
David Rose 2003-03-04 17:22:12 +00:00
parent c54e7d572b
commit 3464ea3856
2 changed files with 73 additions and 1 deletions

View File

@ -193,6 +193,7 @@ static void
iostream_unmap(thandle_t, tdata_t, toff_t) { iostream_unmap(thandle_t, tdata_t, toff_t) {
} }
bool PNMFileTypeTIFF::_installed_error_handlers = false;
TypeHandle PNMFileTypeTIFF::_type_handle; TypeHandle PNMFileTypeTIFF::_type_handle;
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -287,6 +288,7 @@ matches_magic_number(const string &magic_number) const {
PNMReader *PNMFileTypeTIFF:: PNMReader *PNMFileTypeTIFF::
make_reader(istream *file, bool owns_file, const string &magic_number) { make_reader(istream *file, bool owns_file, const string &magic_number) {
init_pnm(); init_pnm();
install_error_handlers();
return new Reader(this, file, owns_file, magic_number); return new Reader(this, file, owns_file, magic_number);
} }
@ -300,10 +302,10 @@ make_reader(istream *file, bool owns_file, const string &magic_number) {
PNMWriter *PNMFileTypeTIFF:: PNMWriter *PNMFileTypeTIFF::
make_writer(ostream *file, bool owns_file) { make_writer(ostream *file, bool owns_file) {
init_pnm(); init_pnm();
install_error_handlers();
return new Writer(this, file, owns_file); return new Writer(this, file, owns_file);
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: PNMFileTypeTIFF::Reader::Constructor // Function: PNMFileTypeTIFF::Reader::Constructor
// Access: Public // Access: Public
@ -872,6 +874,67 @@ write_data(xel *array, xelval *alpha) {
return _y_size; return _y_size;
} }
////////////////////////////////////////////////////////////////////
// Function: PNMFileTypeTIFF::install_error_handlers
// Access: Private
// Description: Installs our personal error and warning message
// handlers if they have not already been installed.
// These methods are used to route the Tiff error
// messages through notify, so we can turn some of them
// off.
////////////////////////////////////////////////////////////////////
void PNMFileTypeTIFF::
install_error_handlers() {
if (!_installed_error_handlers) {
TIFFSetWarningHandler(tiff_warning);
TIFFSetErrorHandler(tiff_error);
_installed_error_handlers = true;
}
}
////////////////////////////////////////////////////////////////////
// Function: PNMFileTypeTIFF::tiff_warning
// Access: Private, Static
// Description: This is our own warning handler. It is called by the
// tiff library to issue a warning message.
////////////////////////////////////////////////////////////////////
void PNMFileTypeTIFF::
tiff_warning(const char *, const char *format, va_list ap) {
static const int buffer_size = 1024;
char buffer[buffer_size];
#ifdef WIN32_VC
vsprintf(buffer, format, ap);
#else
vsnprintf(buffer, buffer_size, format, ap);
#endif
// We ignore the module. It seems generally useless to us.
pnmimage_tiff_cat.warning()
<< buffer << "\n";
}
////////////////////////////////////////////////////////////////////
// Function: PNMFileTypeTIFF::tiff_error
// Access: Private, Static
// Description: This is our own error handler. It is called by the
// tiff library to issue a error message.
////////////////////////////////////////////////////////////////////
void PNMFileTypeTIFF::
tiff_error(const char *module, const char *format, va_list ap) {
static const int buffer_size = 1024;
char buffer[buffer_size];
#ifdef WIN32_VC
vsprintf(buffer, format, ap);
#else
vsnprintf(buffer, buffer_size, format, ap);
#endif
// We ignore the module. It seems generally useless to us.
pnmimage_tiff_cat.error()
<< buffer << "\n";
}
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Function: PNMFileTypeTIFF::register_with_read_factory // Function: PNMFileTypeTIFF::register_with_read_factory
// Access: Public, Static // Access: Public, Static

View File

@ -25,6 +25,9 @@
#include "pnmReader.h" #include "pnmReader.h"
#include "pnmWriter.h" #include "pnmWriter.h"
#include <stdarg.h> // for va_list
#define TIFF_COLORMAP_MAXCOLORS 1024 #define TIFF_COLORMAP_MAXCOLORS 1024
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -73,6 +76,12 @@ public:
virtual int write_data(xel *array, xelval *alpha); virtual int write_data(xel *array, xelval *alpha);
}; };
private:
static void install_error_handlers();
static void tiff_warning(const char *module, const char *format, va_list ap);
static void tiff_error(const char *module, const char *format, va_list ap);
static bool _installed_error_handlers;
// The TypedWritable interface follows. // The TypedWritable interface follows.
public: public: