--- imlib-1.9.15/gdk_imlib/io-gif.c.orig 2014-02-02 08:59:39.063076948 +0100 +++ imlib-1.9.15/gdk_imlib/io-gif.c 2014-02-02 09:09:41.823051652 +0100 @@ -10,6 +10,12 @@ #else #include +static void print_gif_error(int error_code) +{ + const char *err = GifErrorString(error_code); + fprintf(stderr, "gdk_imlib: giflib error %d: %s.\n", error_code, err); +} + unsigned char * loader_gif(FILE *f, int *w, int *h, int *t) { @@ -29,6 +29,7 @@ int intjump[] = {8, 8, 4, 2}; int istransp, transp; int fd; + int giferr; done = 0; istransp = 0; @@ -30,7 +36,7 @@ fd = fileno(f); /* Apparently rewind(f) isn't sufficient */ lseek(fd, (long) 0, 0); - gif = DGifOpenFileHandle(fd); + gif = DGifOpenFileHandle(fd, &giferr); transp = -1; data = NULL; @@ -43,14 +49,14 @@ { if (DGifGetRecordType(gif, &rec) == GIF_ERROR) { - PrintGifError(); + print_gif_error(gif->Error); rec = TERMINATE_RECORD_TYPE; } if ((rec == IMAGE_DESC_RECORD_TYPE) && (!done)) { if (DGifGetImageDesc(gif) == GIF_ERROR) { - PrintGifError(); + print_gif_error(gif->Error); rec = TERMINATE_RECORD_TYPE; } *w = gif->Image.Width; @@ -68,13 +69,13 @@ rows = malloc(*h * sizeof(GifRowType *)); if (!rows) { - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); return NULL; } data = _gdk_malloc_image(*w, *h); if (!data) { - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); free(rows); return NULL; } @@ -85,7 +86,7 @@ rows[i] = malloc(*w * sizeof(GifPixelType)); if (!rows[i]) { - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); for (i = 0; i < *h; i++) if (rows[i]) free(rows[i]); @@ -174,7 +175,7 @@ } } } - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); for (i = 0; i < *h; i++) free(rows[i]); free(rows); --- imlib-1.9.15/Imlib/load.c.orig 2014-02-02 08:59:39.119743612 +0100 +++ imlib-1.9.15/Imlib/load.c 2014-02-02 09:16:12.426368593 +0100 @@ -429,6 +429,12 @@ #endif /* HAVE_LIBTIFF */ #ifdef HAVE_LIBGIF +static void print_gif_error(int error_code) +{ + const char *err = GifErrorString(error_code); + fprintf(stderr, "gdk_imlib: giflib error %d: %s.\n", error_code, err); +} + unsigned char * _LoadGIF(ImlibData * id, FILE *f, int *w, int *h, int *t) { @@ -448,6 +448,7 @@ int intjump[] = {8, 8, 4, 2}; int istransp, transp; int fd; + int giferr; done = 0; istransp = 0; @@ -452,7 +458,7 @@ fd = fileno(f); /* Apparently rewind(f) isn't sufficient */ lseek(fd, (long) 0, 0); - gif = DGifOpenFileHandle(fd); + gif = DGifOpenFileHandle(fd, &giferr); if (!gif) return NULL; @@ -460,14 +466,14 @@ { if (DGifGetRecordType(gif, &rec) == GIF_ERROR) { - PrintGifError(); + print_gif_error(gif->Error); rec = TERMINATE_RECORD_TYPE; } if ((rec == IMAGE_DESC_RECORD_TYPE) && (!done)) { if (DGifGetImageDesc(gif) == GIF_ERROR) { - PrintGifError(); + print_gif_error(gif->Error); rec = TERMINATE_RECORD_TYPE; } *w = gif->Image.Width; @@ -486,13 +486,13 @@ rows = malloc(*h * sizeof(GifRowType *)); if (!rows) { - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); return NULL; } data = _imlib_malloc_image(*w, *h); if (!data) { - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); free(rows); return NULL; } @@ -503,7 +503,7 @@ rows[i] = malloc(*w * sizeof(GifPixelType)); if (!rows[i]) { - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); for (i = 0; i < *h; i++) if (rows[i]) free(rows[i]); @@ -592,7 +592,7 @@ } } } - DGifCloseFile(gif); + DGifCloseFile(gif, &giferr); for (i = 0; i < *h; i++) free(rows[i]); free(rows);