diff --git a/src/osgPlugins/tiff/ReaderWriterTIFF.cpp b/src/osgPlugins/tiff/ReaderWriterTIFF.cpp index 56e27eaf7..480e21b92 100644 --- a/src/osgPlugins/tiff/ReaderWriterTIFF.cpp +++ b/src/osgPlugins/tiff/ReaderWriterTIFF.cpp @@ -217,6 +217,9 @@ simage_tiff_error(char * buffer, int buflen) case ERR_OPEN: strncpy(buffer, "TIFF loader: Error opening file", buflen); break; + case ERR_READ: + strncpy(buffer, "TIFF loader: Error reding/decoding file", buflen); + break; case ERR_MEM: strncpy(buffer, "TIFF loader: Out of memory error", buflen); break; @@ -226,28 +229,65 @@ simage_tiff_error(char * buffer, int buflen) case ERR_TIFFLIB: strncpy(buffer, "TIFF loader: Illegal tiff file", buflen); break; + default: + strncpy(buffer, "TIFF loader: unknown error", buflen); + break; } return tifferror; } +/// Generates a std::string from a printf format string and a va_list. +/// Took & adapted from the man page of printf. +///\todo Externalize this function to make is useable for all OSG? +std::string doFormat(const char* fmt, va_list ap) { + static const int MSG_BUFSIZE = 256; // Initial size of the buffer used for formatting + static const int MAX_BUFSIZE = 256*1024; // Maximum size of the buffer used for formatting + for(int size=MSG_BUFSIZE; size= 0 && n < size) { + std::string res(p); + delete[] p; + return res; + } + /* Else try again with more space. */ + if (n > 0) /* glibc 2.1 */ + size = n+1; /* precisely what is needed */ + else /* glibc 2.0 */ + size *= 2; /* twice the old size */ + delete[] p; + } + return std::string(fmt, fmt+MSG_BUFSIZE) + "..."; // Fallback: Message is not formatted and truncated, but that's better than no message +} static void -tiff_error(const char*, const char*, va_list) +tiff_error(const char*, const char* fmt, va_list ap) { // values are (const char* module, const char* fmt, va_list list) /* FIXME: store error message ? */ + OSG_WARN << "TIFF rader: " << doFormat(fmt, ap) << std::endl; } static void -tiff_warn(const char *, const char *, va_list) +tiff_warn(const char*, const char* fmt, va_list ap) { // values are (const char* module, const char* fmt, va_list list) /* FIXME: notify? */ + OSG_NOTICE << "TIFF rader: " << doFormat(fmt, ap) << std::endl; }