diff -Nur gd-2.0.17.orig/gd_gif_in.c gd-2.0.17/gd_gif_in.c
--- gd-2.0.17.orig/gd_gif_in.c 1970-01-01 01:00:00.000000000 +0100
+++ gd-2.0.17/gd_gif_in.c 2003-12-26 15:35:52.291570520 +0100
-@@ -0,0 +1,573 @@
+@@ -0,0 +1,582 @@
+#include <stdio.h>
+#include <math.h>
+#include <string.h>
+}
+
+gdImagePtr
++gdImageCreateFromGifPtr (int size, void *data)
++{
++ gdImagePtr im;
++ gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
++ im = gdImageCreateFromGifCtx (in);
++ in->gd_free (in);
++ return im;
++}
++
++gdImagePtr
+gdImageCreateFromGifCtx(gdIOCtxPtr fd)
+{
+/* 1.4 int imageNumber; */
diff -Nur gd-2.0.19.orig/gd.h gd-2.0.19/gd.h
--- gd-2.0.19.orig/gd.h 2003-12-24 20:55:14.000000000 +0100
+++ gd-2.0.19/gd.h 2003-12-26 15:35:52.276572800 +0100
-@@ -240,6 +240,10 @@
+@@ -240,6 +240,11 @@
BGD_EXPORT gdImagePtr gdImageCreateFromPngSource (gdSourcePtr in);
+ BGD_EXPORT gdImagePtr gdImageCreateFromGif (FILE *fd);
+ BGD_EXPORT gdImagePtr gdImageCreateFromGifCtx (gdIOCtxPtr in);
++ BGD_EXPORT gdImagePtr gdImageCreateFromGifPtr (int size, void *data);
+ BGD_EXPORT gdImagePtr gdImageCreateFromGifSource (gdSourcePtr in);
+
BGD_EXPORT gdImagePtr gdImageCreateFromGd (FILE * in);
BGD_EXPORT gdImagePtr gdImageCreateFromGdCtx (gdIOCtxPtr in);
-@@ -354,6 +358,7 @@
+@@ -354,6 +359,7 @@
gdPoint, *gdPointPtr;
BGD_EXPORT void gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c);
BGD_EXPORT void gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c);
/* These functions still work with truecolor images,
-@@ -455,6 +460,14 @@
+@@ -455,6 +461,14 @@
/* Best to free this memory with gdFree(), not free() */
void *gdImageJpegPtr (gdImagePtr im, int *size, int quality);
/* A custom data sink. For backwards compatibility. Use
gdIOCtx instead. */
/* The sink function must return -1 on error, otherwise the number
-@@ -469,6 +482,11 @@
+@@ -469,6 +483,11 @@
BGD_EXPORT void gdImagePngToSink (gdImagePtr im, gdSinkPtr out);
--- gd-2.0.17.orig/gdtest.c 2003-03-29 16:46:35.000000000 +0100
+++ gd-2.0.17/gdtest.c 2003-12-26 15:35:52.313567176 +0100
@@ -91,6 +91,59 @@
- gdImageDestroy (im2);
- ctx->gd_free (ctx);
+ CompareImages ("GD->PNG ptr->GD", ref, im2);
+ gdImageDestroy (im2);
++
+ /* */
+ /* Send to GIF File then Ptr */
+ /* */
+ unlink(of);
+
+ iptr = gdImageGifPtr(im,&sz);
-+ ctx = gdNewDynamicCtx(sz,iptr);
-+ im2 = gdImageCreateFromGifCtx(ctx);
++ im2 = gdImageCreateFromGifPtr(sz,iptr);
++ gdFree(iptr);
+
+ CompareImages("GD->GIF ptr->GD", ref, im2);
+
+ gdImageDestroy(im2);
-+ ctx->gd_free(ctx);
/* */
/* Send to GD2 File then Ptr */
+ out = fopen ("test/gdtest_merge_out.png", "wb");
+ gdImagePng(im2, out);
-+ close(out);
++ fclose(out);
+
gdImageDestroy (im2);
gdImageDestroy (im3);
+ return 0;
+}
+
-diff -Nur gd-2.0.17.orig/index.html gd-2.0.17/index.html
---- gd-2.0.17.orig/index.html 2003-12-25 17:43:52.000000000 +0100
-+++ gd-2.0.17/index.html 2003-12-26 15:38:31.022439760 +0100
+diff -Nur gd-2.0.21.orig/index.html gd-2.0.21/index.html
+--- gd-2.0.21.orig/index.html 2003-12-25 17:43:52.000000000 +0100
++++ gd-2.0.21/index.html 2003-12-26 15:38:31.022439760 +0100
@@ -28,7 +28,12 @@
more compatible with the major Web browsers than even PNG is. WBMP is
intended for wireless devices (not regular web browsers). Old
<strong>Permission has been granted to copy, distribute and modify gd in any
context without fee, including a commercial application, provided that this notice
is present in user-accessible supporting documentation.</strong>
-@@ -202,6 +219,24 @@
+@@ -202,6 +219,25 @@
<ul>
<li><a href="http://martin.gleeson.com/fly/">fly</a>, by Martin Gleeson
</ul>
+<li><a href=#gdImageGifToSink>gdImageGifToSink</a>
+<li><a href=#gdImageCreateFromGif>gdImageCreateFromGif</a>
+<li><a href=#gdImageCreateFromGifCtx>gdImageCreateFromGifCtx</a>
++<li><a href=#gdImageCreateFromGifPtr>gdImageCreateFromGifPtr</a>
+<li>Other functions added, but not documented, are: gdImageLzw, gdImageLzwPtr,
+gdImageLzwCtx, gdImageBigGif, gdImageBigGifPtr, gdImageBigGifCtx.
+</ul>
<P>
<A NAME="whatsnew2.0.17"><H3>What's new in version 2.0.17?</H3></A>
<P>
-@@ -659,6 +694,7 @@
+@@ -659,6 +695,7 @@
preprocessing them, this should not be a big problem. gd 2.0 should
read old .gd and .gd2 files correctly.
</ul>
<P><A NAME="whatsnew1.8.4"><H3>What's new in version 1.8.4?</H3></A>
<ul>
<li>Add support for FreeType2 (John Ellson ellson@graphviz.org)
-@@ -691,6 +727,7 @@
+@@ -691,6 +728,7 @@
corrected
<li>Updated links to fast-moving, always dodging libpng and zlib web sites
</ul>
<P><A NAME="whatsnew1.8.1"><H3>What's new in version 1.8.1?</H3></A>
<ul>
<li>Optional components no longer built by default (following the
-@@ -768,6 +805,7 @@
+@@ -768,6 +806,7 @@
<a href="#gdImageCreateFromXpm"><code>gdImageCreateFromXpm</code></a>
function, if the Xpm library is available. Thanks to Caolan McNamara.
</ul>
<P><A NAME="whatsnew1.6.3"><H3>What's new in version 1.6.3?</H3></A>
Version 1.6.3 corrects a memory leak in gd_png.c. This leak caused
a significant amount of memory to be allocated and not freed when
-@@ -1334,7 +1372,8 @@
+@@ -1334,7 +1373,8 @@
<DT><A NAME="gdPoint">gdPoint</A> <strong>(TYPE)</strong>
<DD>
Represents a point in the coordinate space of the image; used
<A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
<PRE>
typedef struct {
-@@ -1344,7 +1383,8 @@
+@@ -1344,7 +1384,8 @@
<DT><A NAME="gdPointPtr">gdPointPtr</A> <strong>(TYPE)</strong>
<DD>
A pointer to a <A HREF="#gdPoint">gdPoint</A> structure; passed
and <A HREF="#gdImageFilledPolygon">gdImageFilledPolygon</A>.
</DL>
<DT><A NAME="gdFTStringExtra">gdFTStringExtra</a> <strong>(TYPE)</strong>
-@@ -1457,6 +1497,75 @@
+@@ -1457,6 +1498,77 @@
/* ... Use the image ... */
<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
</PRE>
+<strong>(FUNCTION)</strong>
+<BR><A NAME="gdImageCreateFromGifCtx">gdImageCreateFromGifCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
+<strong>(FUNCTION)</strong>
++<BR><A NAME="gdImageCreateFromGifPtr">gdImageCreateFromGifPtr(int size, void *data)</A>
++<strong>(FUNCTION)</strong>
+<p>
+<DD>
+gdImageCreateFromGif is called to load images from GIF format files.
<DT><A NAME="gdImageCreateFromPng">gdImageCreateFromPng(FILE *in)</A>
<strong>(FUNCTION)</strong>
<BR><A NAME="gdImageCreateFromPngCtx">gdImageCreateFromPngCtx(<a href=#gdioctx>gdIOCtx</a> *in)</A>
-@@ -1672,6 +1781,92 @@
+@@ -1672,6 +1784,92 @@
/* Now destroy it */
<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
</PRE>
<DT><A NAME="gdImageJpeg">
void gdImageJpeg(gdImagePtr im, FILE *out, int quality)</A>
<STRONG>(FUNCTION)</STRONG><BR>
-@@ -2133,6 +2328,15 @@
+@@ -2133,6 +2331,15 @@
/* Destroy it */
<A HREF="#gdImageDestroy">gdImageDestroy</A>(im);
</PRE>
<DT><A NAME="gdImageRectangle">void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color)</A>
<STRONG>(FUNCTION)</STRONG>
<DD>
-@@ -4488,6 +4692,9 @@
- <A HREF="#gdImageCreateFromGd2Ctx">gdImageCreateFromGd2Ctx</A> |
+@@ -4488,6 +4695,10 @@
<A HREF="#gdImageCreateFromGd2Part">gdImageCreateFromGd2Part</A> |
<A HREF="#gdImageCreateFromGd2PartCtx">gdImageCreateFromGd2PartCtx</A> |
+ <A HREF="#gdImageCreateFromGd2PartPtr">gdImageCreateFromGd2PartPtr</A> |
+<A HREF="#gdImageCreateFromGif">gdImageCreateFromGif</A> |
+<A HREF="#gdImageCreateFromGifCtx">gdImageCreateFromGifCtx</A> |
++<A HREF="#gdImageCreateFromGifPtr">gdImageCreateFromGifPtr</A> |
+<A HREF="#gdImageCreateFromGifSource">gdImageCreateFromGifSource</A> |
<A HREF="#gdImageCreateFromJpeg">gdImageCreateFromJpeg</A> |
<A HREF="#gdImageCreateFromJpegCtx">gdImageCreateFromJpegCtx</A> |
- <A HREF="#gdImageCreateFromPng">gdImageCreateFromPng</A> |
-@@ -4507,6 +4714,10 @@
+ <A HREF="#gdImageCreateFromJpegPtr">gdImageCreateFromJpegPtr</A> |
+@@ -4507,6 +4718,10 @@
<A HREF="#gdImageGetInterlaced">gdImageGetInterlaced</A> |
<A HREF="#gdImageGetPixel">gdImageGetPixel</A> |
<A HREF="#gdImageGetTransparent">gdImageGetTransparent</A> |
<A HREF="#gdImageGreen">gdImageGreen</A> |
<A HREF="#gdImageInterlace">gdImageInterlace</A> |
<A HREF="#gdImageJpeg">gdImageJpeg</A> |
-@@ -4522,6 +4733,7 @@
+@@ -4522,6 +4737,7 @@
<A HREF="#gdImagePngPtrEx">gdImagePngPtrEx</A> |
<A HREF="#gdImagePngToSink">gdImagePngToSink</A> |
<A HREF="#gdImagePolygon">gdImagePolygon</A> |