Move all to deprecated folder.
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
From 908a179726d010963f4fe1b57fb5f7bf590d7d64 Mon Sep 17 00:00:00 2001
|
||||
From: Kim Woelders <kim@woelders.dk>
|
||||
Date: Tue, 31 Dec 2013 18:13:45 +0100
|
||||
Subject: [PATCH 2/5] GIF loader: Simplify error handling.
|
||||
|
||||
Also:
|
||||
- Fix memory leak when image data allocation fails.
|
||||
- Some aux data arrays may as well be const.
|
||||
---
|
||||
src/modules/loaders/loader_gif.c | 80 ++++++++++++++++------------------------
|
||||
1 file changed, 32 insertions(+), 48 deletions(-)
|
||||
|
||||
diff --git a/src/modules/loaders/loader_gif.c b/src/modules/loaders/loader_gif.c
|
||||
index d1c2ae2..a39c860 100644
|
||||
--- a/src/modules/loaders/loader_gif.c
|
||||
+++ b/src/modules/loaders/loader_gif.c
|
||||
@@ -8,6 +8,9 @@ char
|
||||
load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
char immediate_load)
|
||||
{
|
||||
+ static const int intoffset[] = { 0, 4, 2, 1 };
|
||||
+ static const int intjump[] = { 8, 8, 4, 2 };
|
||||
+ int rc;
|
||||
DATA32 *ptr;
|
||||
GifFileType *gif;
|
||||
GifRowType *rows;
|
||||
@@ -16,8 +19,6 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
int i, j, done, bg, r, g, b, w = 0, h = 0;
|
||||
float per = 0.0, per_inc;
|
||||
int last_per = 0, last_y = 0;
|
||||
- int intoffset[] = { 0, 4, 2, 1 };
|
||||
- int intjump[] = { 8, 8, 4, 2 };
|
||||
int transp;
|
||||
int fd;
|
||||
|
||||
@@ -49,6 +50,8 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+ rc = 0; /* Failure */
|
||||
+
|
||||
do
|
||||
{
|
||||
if (DGifGetRecordType(gif, &rec) == GIF_ERROR)
|
||||
@@ -66,37 +69,19 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
w = gif->Image.Width;
|
||||
h = gif->Image.Height;
|
||||
if (!IMAGE_DIMENSIONS_OK(w, h))
|
||||
- {
|
||||
- DGifCloseFile(gif);
|
||||
- return 0;
|
||||
- }
|
||||
- rows = malloc(h * sizeof(GifRowType *));
|
||||
+ goto quit2;
|
||||
+
|
||||
+ rows = calloc(h, sizeof(GifRowType *));
|
||||
if (!rows)
|
||||
- {
|
||||
- DGifCloseFile(gif);
|
||||
- return 0;
|
||||
- }
|
||||
- for (i = 0; i < h; i++)
|
||||
- {
|
||||
- rows[i] = NULL;
|
||||
- }
|
||||
+ goto quit2;
|
||||
+
|
||||
for (i = 0; i < h; i++)
|
||||
{
|
||||
rows[i] = malloc(w * sizeof(GifPixelType));
|
||||
if (!rows[i])
|
||||
- {
|
||||
- DGifCloseFile(gif);
|
||||
- for (i = 0; i < h; i++)
|
||||
- {
|
||||
- if (rows[i])
|
||||
- {
|
||||
- free(rows[i]);
|
||||
- }
|
||||
- }
|
||||
- free(rows);
|
||||
- return 0;
|
||||
- }
|
||||
+ goto quit;
|
||||
}
|
||||
+
|
||||
if (gif->Image.Interlace)
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
@@ -135,6 +120,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
}
|
||||
}
|
||||
while (rec != TERMINATE_RECORD_TYPE);
|
||||
+
|
||||
if (transp >= 0)
|
||||
{
|
||||
SET_FLAG(im->flags, F_HAS_ALPHA);
|
||||
@@ -143,6 +129,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
{
|
||||
UNSET_FLAG(im->flags, F_HAS_ALPHA);
|
||||
}
|
||||
+
|
||||
/* set the format string member to the lower-case full extension */
|
||||
/* name for the format - so example names would be: */
|
||||
/* "png", "jpeg", "tiff", "ppm", "pgm", "pbm", "gif", "xpm" ... */
|
||||
@@ -150,17 +137,15 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
im->h = h;
|
||||
if (!im->format)
|
||||
im->format = strdup("gif");
|
||||
+
|
||||
if (im->loader || immediate_load || progress)
|
||||
{
|
||||
bg = gif->SBackGroundColor;
|
||||
cmap = (gif->Image.ColorMap ? gif->Image.ColorMap : gif->SColorMap);
|
||||
im->data = (DATA32 *) malloc(sizeof(DATA32) * w * h);
|
||||
if (!im->data)
|
||||
- {
|
||||
- DGifCloseFile(gif);
|
||||
- free(rows);
|
||||
- return 0;
|
||||
- }
|
||||
+ goto quit;
|
||||
+
|
||||
ptr = im->data;
|
||||
per_inc = 100.0 / (((float)w) * h);
|
||||
for (i = 0; i < h; i++)
|
||||
@@ -188,30 +173,29 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
|
||||
last_per = (int)per;
|
||||
if (!(progress(im, (int)per, 0, last_y, w, i)))
|
||||
{
|
||||
- DGifCloseFile(gif);
|
||||
- for (i = 0; i < h; i++)
|
||||
- {
|
||||
- free(rows[i]);
|
||||
- }
|
||||
- free(rows);
|
||||
- return 2;
|
||||
+ rc = 2;
|
||||
+ goto quit;
|
||||
}
|
||||
last_y = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
+
|
||||
+ if (progress)
|
||||
+ progress(im, 100, 0, last_y, w, h);
|
||||
}
|
||||
- if (progress)
|
||||
- {
|
||||
- progress(im, 100, 0, last_y, w, h);
|
||||
- }
|
||||
- DGifCloseFile(gif);
|
||||
+
|
||||
+ rc = 1; /* Success */
|
||||
+
|
||||
+ quit:
|
||||
for (i = 0; i < h; i++)
|
||||
- {
|
||||
- free(rows[i]);
|
||||
- }
|
||||
+ free(rows[i]);
|
||||
free(rows);
|
||||
- return 1;
|
||||
+
|
||||
+ quit2:
|
||||
+ DGifCloseFile(gif);
|
||||
+
|
||||
+ return rc;
|
||||
}
|
||||
|
||||
void
|
||||
--
|
||||
2.3.1
|
||||
|
||||
Reference in New Issue
Block a user