summaryrefslogtreecommitdiff
path: root/packages/media-libs/imlib2
diff options
context:
space:
mode:
authorAvatar Heiko Becker <heirecka@exherbo.org> 2014-10-09 21:02:01 +0200
committerAvatar Heiko Becker <heirecka@exherbo.org> 2014-10-10 19:27:43 +0200
commit37e95f9c4dff34ec68522d268cddbc5187d7f83d (patch)
treee86d10b1c06f60e61d632e1d2a7a3575672525c2 /packages/media-libs/imlib2
parenta705d73606f9554298f17619bfe191d255848b28 (diff)
downloadmedia-37e95f9c4dff34ec68522d268cddbc5187d7f83d.tar.gz
media-37e95f9c4dff34ec68522d268cddbc5187d7f83d.tar.xz
imlib2: add patch to fix build with giflib[>=5.1.0]
Change-Id: Ic699ddf03c8c567d2a1e7725fe2cea164ae35879
Diffstat (limited to 'packages/media-libs/imlib2')
-rw-r--r--packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Fix-for-libgif-version-5.1.patch36
-rw-r--r--packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Simplify-error-handling.patch178
-rw-r--r--packages/media-libs/imlib2/imlib2-1.4.6-r1.exheres-02
3 files changed, 216 insertions, 0 deletions
diff --git a/packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Fix-for-libgif-version-5.1.patch b/packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Fix-for-libgif-version-5.1.patch
new file mode 100644
index 00000000..e52bb132
--- /dev/null
+++ b/packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Fix-for-libgif-version-5.1.patch
@@ -0,0 +1,36 @@
+Upstream: submitted at https://phab.enlightenment.org/D1529
+ (sadly that link is only reachable if logged in)
+
+From b3d7033f2e9836437a9541a43c33d76bcb8f4efd Mon Sep 17 00:00:00 2001
+From: Heiko Becker <heirecka@exherbo.org>
+Date: Thu, 9 Oct 2014 23:12:06 +0200
+Subject: [PATCH] GIF loader: Fix for libgif version 5.1
+
+From giflib-5.1.0's NEWS:
+"A small change to the API: DGifClose() and EGifClose() now take a
+pointer-to-int second argument (like the corresponding openers)
+where a diagnostic code will be deposited when they return
+GIF_ERROR."
+---
+ src/modules/loaders/loader_gif.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/modules/loaders/loader_gif.c b/src/modules/loaders/loader_gif.c
+index be10478..e8d2cb1 100644
+--- a/src/modules/loaders/loader_gif.c
++++ b/src/modules/loaders/loader_gif.c
+@@ -198,7 +198,11 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
+ free(rows);
+
+ quit2:
++#if GIFLIB_MAJOR > 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR >= 1)
++ DGifCloseFile(gif, NULL);
++#else
+ DGifCloseFile(gif);
++#endif
+
+ return rc;
+ }
+--
+2.1.2
+
diff --git a/packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Simplify-error-handling.patch b/packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Simplify-error-handling.patch
new file mode 100644
index 00000000..16e0f221
--- /dev/null
+++ b/packages/media-libs/imlib2/files/imlib2-1.4.6-GIF-loader-Simplify-error-handling.patch
@@ -0,0 +1,178 @@
+Upstream: yes
+Reason: Needed for imlib2-1.4.6-GIF-loader-Fix-for-libgif-version-5.1.patch
+
+From b7ad34abbc50aec5050bff56242e342e41935f1a Mon Sep 17 00:00:00 2001
+From: Kim Woelders <kim@woelders.dk>
+Date: Tue, 31 Dec 2013 18:13:45 +0100
+Subject: [PATCH] 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 9bd07e0..69de9dc 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;
+
+@@ -45,6 +46,8 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
+ return 0;
+ }
+
++ rc = 0; /* Failure */
++
+ do
+ {
+ if (DGifGetRecordType(gif, &rec) == GIF_ERROR)
+@@ -62,37 +65,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++)
+@@ -131,6 +116,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity,
+ }
+ }
+ while (rec != TERMINATE_RECORD_TYPE);
++
+ if (transp >= 0)
+ {
+ SET_FLAG(im->flags, F_HAS_ALPHA);
+@@ -139,6 +125,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" ... */
+@@ -146,17 +133,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++)
+@@ -184,30 +169,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.1.2
+
diff --git a/packages/media-libs/imlib2/imlib2-1.4.6-r1.exheres-0 b/packages/media-libs/imlib2/imlib2-1.4.6-r1.exheres-0
index 0c594219..3308a916 100644
--- a/packages/media-libs/imlib2/imlib2-1.4.6-r1.exheres-0
+++ b/packages/media-libs/imlib2/imlib2-1.4.6-r1.exheres-0
@@ -38,6 +38,8 @@ DEPENDENCIES="
DEFAULT_SRC_PREPARE_PATCHES=(
"${FILES}"/${PNV}-GIF-loader-Fix-for-libgif-version-5.patch
"${FILES}"/${PNV}-imlib2-config-delete-old-reference-to-my_libs.patch
+ "${FILES}"/${PNV}-GIF-loader-Simplify-error-handling.patch
+ "${FILES}"/${PNV}-GIF-loader-Fix-for-libgif-version-5.1.patch
)
src_configure() {