Lines 434-439
Link Here
|
434 |
#ifdef HAVE_LIBGIF |
434 |
#ifdef HAVE_LIBGIF |
435 |
/*------------------------*/ |
435 |
/*------------------------*/ |
436 |
/*------------------------*/ |
436 |
/*------------------------*/ |
|
|
437 |
void |
438 |
_CloseGIF(GifFileType *gif) |
439 |
{ |
440 |
#if GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1) |
441 |
int errCode = 0; |
442 |
|
443 |
if (DGifCloseFile(gif, &errCode) != GIF_OK) |
444 |
_PrintGifError(errCode); |
445 |
#else |
446 |
DGifCloseFile(gif); |
447 |
#endif |
448 |
} |
449 |
|
437 |
unsigned char * |
450 |
unsigned char * |
438 |
_LoadGIF(ImlibData * id, FILE *f, int *w, int *h, int *t) |
451 |
_LoadGIF(ImlibData * id, FILE *f, int *w, int *h, int *t) |
439 |
{ |
452 |
{ |
Lines 464-473
Link Here
|
464 |
gif = DGifOpenFileHandle(fd, &errCode); |
477 |
gif = DGifOpenFileHandle(fd, &errCode); |
465 |
if (!gif) |
478 |
if (!gif) |
466 |
{ |
479 |
{ |
467 |
const char* gifliberr = (const char*) GifErrorString(errCode); |
480 |
_PrintGifError(errCode); |
468 |
if (gifliberr == NULL) |
|
|
469 |
gifliberr = "Unknown error"; |
470 |
fprintf(stderr, "%s\n", gifliberr); |
471 |
return NULL; |
481 |
return NULL; |
472 |
} |
482 |
} |
473 |
#else |
483 |
#else |
Lines 481-494
Link Here
|
481 |
{ |
491 |
{ |
482 |
if (DGifGetRecordType(gif, &rec) == GIF_ERROR) |
492 |
if (DGifGetRecordType(gif, &rec) == GIF_ERROR) |
483 |
{ |
493 |
{ |
484 |
_PrintGifError(gif); |
494 |
_PrintGifError(gif->Error); |
485 |
rec = TERMINATE_RECORD_TYPE; |
495 |
rec = TERMINATE_RECORD_TYPE; |
486 |
} |
496 |
} |
487 |
if ((rec == IMAGE_DESC_RECORD_TYPE) && (!done)) |
497 |
if ((rec == IMAGE_DESC_RECORD_TYPE) && (!done)) |
488 |
{ |
498 |
{ |
489 |
if (DGifGetImageDesc(gif) == GIF_ERROR) |
499 |
if (DGifGetImageDesc(gif) == GIF_ERROR) |
490 |
{ |
500 |
{ |
491 |
_PrintGifError(gif); |
501 |
_PrintGifError(gif->Error); |
492 |
rec = TERMINATE_RECORD_TYPE; |
502 |
rec = TERMINATE_RECORD_TYPE; |
493 |
} |
503 |
} |
494 |
*w = gif->Image.Width; |
504 |
*w = gif->Image.Width; |
Lines 500-512
Link Here
|
500 |
rows = malloc(*h * sizeof(GifRowType *)); |
510 |
rows = malloc(*h * sizeof(GifRowType *)); |
501 |
if (!rows) |
511 |
if (!rows) |
502 |
{ |
512 |
{ |
503 |
DGifCloseFile(gif); |
513 |
_CloseGIF(gif); |
504 |
return NULL; |
514 |
return NULL; |
505 |
} |
515 |
} |
506 |
data = _imlib_malloc_image(*w, *h); |
516 |
data = _imlib_malloc_image(*w, *h); |
507 |
if (!data) |
517 |
if (!data) |
508 |
{ |
518 |
{ |
509 |
DGifCloseFile(gif); |
519 |
_CloseGIF(gif); |
510 |
free(rows); |
520 |
free(rows); |
511 |
return NULL; |
521 |
return NULL; |
512 |
} |
522 |
} |
Lines 517-523
Link Here
|
517 |
rows[i] = malloc(*w * sizeof(GifPixelType)); |
527 |
rows[i] = malloc(*w * sizeof(GifPixelType)); |
518 |
if (!rows[i]) |
528 |
if (!rows[i]) |
519 |
{ |
529 |
{ |
520 |
DGifCloseFile(gif); |
530 |
_CloseGIF(gif); |
521 |
for (i = 0; i < *h; i++) |
531 |
for (i = 0; i < *h; i++) |
522 |
if (rows[i]) |
532 |
if (rows[i]) |
523 |
free(rows[i]); |
533 |
free(rows[i]); |
Lines 606-612
Link Here
|
606 |
} |
616 |
} |
607 |
} |
617 |
} |
608 |
} |
618 |
} |
609 |
DGifCloseFile(gif); |
619 |
_CloseGIF(gif); |
610 |
for (i = 0; i < *h; i++) |
620 |
for (i = 0; i < *h; i++) |
611 |
free(rows[i]); |
621 |
free(rows[i]); |
612 |
free(rows); |
622 |
free(rows); |