[2/9] windowscodecs: Create global metadata blocks in the GIF decoder.

Dmitry Timoshkov dmitry at baikal.ru
Mon Sep 17 22:57:19 CDT 2012


---
 dlls/windowscodecs/ungif.c | 15 +++++++++++++--
 dlls/windowscodecs/ungif.h |  1 +
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/dlls/windowscodecs/ungif.c b/dlls/windowscodecs/ungif.c
index 97038d9..66310cb 100644
--- a/dlls/windowscodecs/ungif.c
+++ b/dlls/windowscodecs/ungif.c
@@ -884,13 +884,21 @@ DGifSlurp(GifFileType * GifFile) {
               break;
 
           case EXTENSION_RECORD_TYPE:
-              if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) ==
+          {
+              Extensions *Extensions;
+
+              if (GifFile->ImageCount)
+                  Extensions = &temp_save;
+              else
+                  Extensions = &GifFile->Extensions;
+
+              if (DGifGetExtension(GifFile, &Extensions->Function, &ExtData) ==
                   GIF_ERROR)
                   return (GIF_ERROR);
               while (ExtData != NULL) {
 
                   /* Create an extension block with our data */
-                  if (AddExtensionBlock(&temp_save, ExtData[0], &ExtData[1])
+                  if (AddExtensionBlock(Extensions, ExtData[0], &ExtData[1])
                       == GIF_ERROR)
                       return (GIF_ERROR);
 
@@ -899,6 +907,7 @@ DGifSlurp(GifFileType * GifFile) {
                   temp_save.Function = 0;
               }
               break;
+          }
 
           case TERMINATE_RECORD_TYPE:
               break;
@@ -1003,6 +1012,8 @@ DGifCloseFile(GifFileType * GifFile) {
         GifFile->SavedImages = NULL;
     }
 
+    FreeExtension(&GifFile->Extensions);
+
     ungif_free(GifFile);
 
     return GIF_OK;
diff --git a/dlls/windowscodecs/ungif.h b/dlls/windowscodecs/ungif.h
index 6c9f418..6caa600 100644
--- a/dlls/windowscodecs/ungif.h
+++ b/dlls/windowscodecs/ungif.h
@@ -117,6 +117,7 @@ typedef struct GifFileType {
       SBackGroundColor,         /* I hope you understand this one... */
       SAspectRatio;             /* Pixel aspect ratio, in 1/64 units, starting at 1:4. */
     ColorMapObject *SColorMap;  /* NULL if not exists. */
+    Extensions Extensions;
     int ImageCount;             /* Number of current image */
     GifImageDesc Image;         /* Block describing current image */
     struct SavedImage *SavedImages; /* Use this to accumulate file state */
-- 
1.7.11.6




More information about the wine-patches mailing list