]> git.saurik.com Git - wxWidgets.git/blobdiff - src/tiff/tif_close.c
assert if opening more than one find/replace dialog under the same parent -- this...
[wxWidgets.git] / src / tiff / tif_close.c
index 3704a4bdd431ba34418d4560a49afd912f7c27f2..ab7c6281151d08781c4feee951c8fad40c16846e 100644 (file)
 void
 TIFFClose(TIFF* tif)
 {
-       if (tif->tif_mode != O_RDONLY)
-               /*
-                * Flush buffered data and directory (if dirty).
-                */
-               TIFFFlush(tif);
-       (*tif->tif_cleanup)(tif);
-       TIFFFreeDirectory(tif);
-       if (tif->tif_rawdata && (tif->tif_flags&TIFF_MYBUFFER))
-               _TIFFfree(tif->tif_rawdata);
-       if (isMapped(tif))
-               TIFFUnmapFileContents(tif, tif->tif_base, tif->tif_size);
-       (void) TIFFCloseFile(tif);
-       if (tif->tif_fieldinfo)
-               _TIFFfree(tif->tif_fieldinfo);
-       _TIFFfree(tif);
+    if (tif->tif_mode != O_RDONLY)
+        /*
+         * Flush buffered data and directory (if dirty).
+         */
+        TIFFFlush(tif);
+    (*tif->tif_cleanup)(tif);
+    TIFFFreeDirectory(tif);
+
+    if (tif->tif_dirlist)
+        _TIFFfree(tif->tif_dirlist);
+        
+    /* Clean up client info links */
+    while( tif->tif_clientinfo )
+    {
+        TIFFClientInfoLink *link = tif->tif_clientinfo;
+
+        tif->tif_clientinfo = link->next;
+        _TIFFfree( link->name );
+        _TIFFfree( link );
+    }
+
+    if (tif->tif_rawdata && (tif->tif_flags&TIFF_MYBUFFER))
+        _TIFFfree(tif->tif_rawdata);
+    if (isMapped(tif))
+        TIFFUnmapFileContents(tif, tif->tif_base, tif->tif_size);
+    (void) TIFFCloseFile(tif);
+    if (tif->tif_nfields > 0) 
+    {
+        int  i;
+
+        for (i = 0; i < tif->tif_nfields; i++) 
+       {
+           TIFFFieldInfo *fld = tif->tif_fieldinfo[i];
+           if (fld->field_bit == FIELD_CUSTOM && 
+               strncmp("Tag ", fld->field_name, 4) == 0) 
+           {
+                _TIFFfree(fld->field_name);
+                _TIFFfree(fld);
+           }
+        }   
+      
+        _TIFFfree(tif->tif_fieldinfo);
+    }
+
+    _TIFFfree(tif);
 }