| --- a/rd/read-gif.c |
| +++ b/rd/read-gif.c |
| @@ -25,7 +25,13 @@ |
| if (GIF_ERROR == DGifGetRecordType(h->gif,&RecordType)) { |
| if (debug) |
| fprintf(stderr,"gif: DGifGetRecordType failed\n"); |
| - PrintGifError(); |
| +#if GIFLIB_MAJOR >= 5 |
| + GifErrorString(D_GIF_ERR_NOT_GIF_FILE); |
| +#elif (GIFLIB_MAJOR >= 4 && GIFLIB_MINOR >=2) |
| + GifErrorString(); |
| +#else |
| + PrintGifError(); |
| +#endif |
| return -1; |
| } |
| switch (RecordType) { |
| @@ -42,7 +48,13 @@ |
| if (rc == GIF_ERROR) { |
| if (debug) |
| fprintf(stderr,"gif: DGifGetExtension failed\n"); |
| +#if GIFLIB_MAJOR >= 5 |
| + GifErrorString(D_GIF_ERR_NOT_GIF_FILE); |
| +#elif (GIFLIB_MAJOR >= 4 && GIFLIB_MINOR >=2) |
| + GifErrorString(); |
| +#else |
| PrintGifError(); |
| +#endif |
| return -1; |
| } |
| if (debug) { |
| @@ -93,12 +105,19 @@ |
| struct gif_state *h; |
| GifRecordType RecordType; |
| int i, image = 0; |
| +#if (GIFLIB_MAJOR >=5 && GIFLIB_MINOR >= 1) |
| + int ErrorCode; |
| +#endif |
| |
| h = malloc(sizeof(*h)); |
| memset(h,0,sizeof(*h)); |
| |
| h->infile = fp; |
| +#if GIFLIB_MAJOR >= 5 |
| + h->gif = DGifOpenFileHandle(fileno(fp), NULL); |
| +#else |
| h->gif = DGifOpenFileHandle(fileno(fp)); |
| +#endif |
| h->row = malloc(h->gif->SWidth * sizeof(GifPixelType)); |
| |
| while (0 == image) { |
| @@ -108,7 +127,15 @@ |
| if (GIF_ERROR == DGifGetImageDesc(h->gif)) { |
| if (debug) |
| fprintf(stderr,"gif: DGifGetImageDesc failed\n"); |
| +#if (GIFLIB_MAJOR >= 5 && GIFLIB_MINOR >= 1) |
| + GifErrorString(D_GIF_ERR_NO_IMAG_DSCR); |
| +#elif GIFLIB_MAJOR >= 5 |
| + GifErrorString(NULL); |
| +#elif (GIFLIB_MAJOR >= 4 && GIFLIB_MINOR >=2) |
| + GifErrorString(); |
| +#else |
| PrintGifError(); |
| +#endif |
| } |
| if (NULL == h->gif->SColorMap && |
| NULL == h->gif->Image.ColorMap) { |
| @@ -156,7 +183,11 @@ |
| oops: |
| if (debug) |
| fprintf(stderr,"gif: fatal error, aborting\n"); |
| +#if (GIFLIB_MAJOR >=5 && GIFLIB_MINOR >= 1) |
| + DGifCloseFile(h->gif, &ErrorCode); |
| +#else |
| DGifCloseFile(h->gif); |
| +#endif |
| fclose(h->infile); |
| free(h->row); |
| free(h); |
| @@ -193,10 +224,17 @@ |
| gif_done(void *data) |
| { |
| struct gif_state *h = data; |
| +#if (GIFLIB_MAJOR >=5 && GIFLIB_MINOR >= 1) |
| + int ErrorCode; |
| +#endif |
| |
| if (debug) |
| fprintf(stderr,"gif: done, cleaning up\n"); |
| +#if (GIFLIB_MAJOR >=5 && GIFLIB_MINOR >= 1) |
| + DGifCloseFile(h->gif, &ErrorCode); |
| +#else |
| DGifCloseFile(h->gif); |
| +#endif |
| fclose(h->infile); |
| if (h->il) |
| free(h->il); |