[trunk] Update libtiff to 4.0.1 to support BigTIFF. openjpeg/tiff 4.0.1 currently...
[openjpeg.git] / thirdparty / libtiff / tif_close.c
index 02591ba978f5ba37bd7be286fccb63d6c5a975af..13d2bab5ce956e85c0154bda4fcdecd79e8ebd53 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: tif_close.c,v 1.10.2.1 2010-06-08 18:50:41 bfriesen Exp $ */
+/* $Id: tif_close.c,v 1.19 2010-03-10 18:56:48 bfriesen Exp $ */
 
 /*
  * Copyright (c) 1988-1997 Sam Leffler
@@ -28,6 +28,7 @@
  * TIFF Library.
  */
 #include "tiffiop.h"
+#include <string.h>
 
 /************************************************************************/
 /*                            TIFFCleanup()                             */
 void
 TIFFCleanup(TIFF* tif)
 {
+       /*
+         * Flush buffered data and directory (if dirty).
+         */
        if (tif->tif_mode != O_RDONLY)
-           /*
-            * Flush buffered data and directory (if dirty).
-            */
-           TIFFFlush(tif);
+               TIFFFlush(tif);
        (*tif->tif_cleanup)(tif);
        TIFFFreeDirectory(tif);
 
        if (tif->tif_dirlist)
                _TIFFfree(tif->tif_dirlist);
 
-       /* Clean up client info links */
+       /*
+         * Clean up client info links.
+         */
        while( tif->tif_clientinfo )
        {
                TIFFClientInfoLink *link = tif->tif_clientinfo;
@@ -69,27 +72,36 @@ TIFFCleanup(TIFF* 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);
-
-       /* Clean up custom fields */
-       if (tif->tif_nfields > 0)
-       {
-               size_t  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);
+               TIFFUnmapFileContents(tif, tif->tif_base, (toff_t)tif->tif_size);
+
+       /*
+         * Clean up custom fields.
+         */
+       if (tif->tif_fields && tif->tif_nfields > 0) {
+               uint32 i;
+
+               for (i = 0; i < tif->tif_nfields; i++) {
+                       TIFFField *fld = tif->tif_fields[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->tif_fields);
        }
 
+        if (tif->tif_nfieldscompat > 0) {
+                uint32 i;
+
+                for (i = 0; i < tif->tif_nfieldscompat; i++) {
+                        if (tif->tif_fieldscompat[i].allocated_size)
+                                _TIFFfree(tif->tif_fieldscompat[i].fields);
+                }
+                _TIFFfree(tif->tif_fieldscompat);
+        }
+
        _TIFFfree(tif);
 }
 
@@ -117,6 +129,8 @@ TIFFClose(TIFF* tif)
        (void) (*closeproc)(fd);
 }
 
+/* vim: set ts=8 sts=8 sw=8 noet: */
+
 /*
  * Local Variables:
  * mode: c