From: Christophe CURIS <christophe.cu...@free.fr> - remove header not needed anymore - revert change for XPM to stay in line with the standard - changed PNG to stuck to the standard - increased GIF to the complete signature
Signed-off-by: Christophe CURIS <christophe.cu...@free.fr> --- wrlib/load.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/wrlib/load.c b/wrlib/load.c index fe5cc1e..73b2d95 100644 --- a/wrlib/load.c +++ b/wrlib/load.c @@ -33,10 +33,6 @@ #include <time.h> #include <assert.h> -#ifdef USE_PNG -#include <png.h> -#endif - #include "wraster.h" #include "imgformat.h" @@ -281,7 +277,7 @@ char *RGetImageFileFormat(const char *file) static WRImgFormat identFile(const char *path) { FILE *file; - unsigned char buffer[7]; + unsigned char buffer[32]; size_t nread; assert(path != NULL); @@ -301,7 +297,7 @@ static WRImgFormat identFile(const char *path) RETRY( fclose(file) ) /* check for XPM */ - if (strncmp((char *)buffer, "/* XPM", 6) == 0) + if (strncmp((char *)buffer, "/* XPM */", 9) == 0) return IM_XPM; /* check for TIFF */ @@ -309,8 +305,15 @@ static WRImgFormat identFile(const char *path) || (buffer[0] == 'M' && buffer[1] == 'M' && buffer[2] == 0 && buffer[3] == '*')) return IM_TIFF; - /* check for PNG */ - if (buffer[0] == 0x89 && buffer[1] == 'P' && buffer[2] == 'N' && buffer[3] == 'G') + /* + * check for PNG + * + * The signature is defined in the PNG specifiation: + * http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html + * it is valid for v1.0, v1.1, v1.2 and ISO version + */ + if (buffer[0] == 137 && buffer[1] == 80 && buffer[2] == 78 && buffer[3] == 71 && + buffer[4] == 13 && buffer[5] == 10 && buffer[6] == 26 && buffer[7] == 10) return IM_PNG; /* check for PBM or PGM or PPM */ @@ -322,7 +325,8 @@ static WRImgFormat identFile(const char *path) return IM_JPEG; /* check for GIF */ - if (buffer[0] == 'G' && buffer[1] == 'I' && buffer[2] == 'F' && buffer[3] == '8') + if (buffer[0] == 'G' && buffer[1] == 'I' && buffer[2] == 'F' && buffer[3] == '8' && + (buffer[4] == '7' || buffer[4] == '9') && buffer[5] == 'a') return IM_GIF; return IM_UNKNOWN; -- 1.9.1 -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.