1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* $Id: tif_close.c,v 1.19 2010-03-10 18:56:48 bfriesen Exp $ */ 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Copyright (c) 1988-1997 Sam Leffler 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Copyright (c) 1991-1997 Silicon Graphics, Inc. 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Permission to use, copy, modify, distribute, and sell this software and 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * its documentation for any purpose is hereby granted without fee, provided 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * that (i) the above copyright notices and this permission notice appear in 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * all copies of the software and related documentation, and (ii) the names of 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Sam Leffler and Silicon Graphics may not be used in any advertising or 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * publicity relating to the software without the specific, prior written 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * permission of Sam Leffler and Silicon Graphics. 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * OF THIS SOFTWARE. 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * TIFF Library. 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "tiffiop.h" 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <string.h> 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/************************************************************************/ 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* TIFFCleanup() */ 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/************************************************************************/ 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/** 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Auxiliary function to free the TIFF structure. Given structure will be 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * completetly freed, so you should save opened file handle and pointer 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * to the close procedure in external variables before calling 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * _TIFFCleanup(), if you will need these ones to close the file. 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * @param tif A TIFF pointer. 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannTIFFCleanup(TIFF* tif) 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann{ 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Flush buffered data and directory (if dirty). 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (tif->tif_mode != O_RDONLY) 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFFlush(tif); 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (*tif->tif_cleanup)(tif); 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFFreeDirectory(tif); 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (tif->tif_dirlist) 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(tif->tif_dirlist); 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Clean up client info links. 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while( tif->tif_clientinfo ) 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann { 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFClientInfoLink *link = tif->tif_clientinfo; 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann tif->tif_clientinfo = link->next; 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree( link->name ); 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree( link ); 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (tif->tif_rawdata && (tif->tif_flags&TIFF_MYBUFFER)) 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(tif->tif_rawdata); 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (isMapped(tif)) 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFUnmapFileContents(tif, tif->tif_base, (toff_t)tif->tif_size); 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Clean up custom fields. 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (tif->tif_fields && tif->tif_nfields > 0) { 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 i; 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < tif->tif_nfields; i++) { 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFField *fld = tif->tif_fields[i]; 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (fld->field_bit == FIELD_CUSTOM && 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann strncmp("Tag ", fld->field_name, 4) == 0) { 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(fld->field_name); 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(fld); 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(tif->tif_fields); 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (tif->tif_nfieldscompat > 0) { 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann uint32 i; 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (i = 0; i < tif->tif_nfieldscompat; i++) { 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (tif->tif_fieldscompat[i].allocated_size) 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(tif->tif_fieldscompat[i].fields); 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(tif->tif_fieldscompat); 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _TIFFfree(tif); 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/************************************************************************/ 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* TIFFClose() */ 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/************************************************************************/ 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/** 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Close a previously opened TIFF file. 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * TIFFClose closes a file that was previously opened with TIFFOpen(). 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Any buffered data are flushed to the file, including the contents of 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * the current directory (if modified); and all resources are reclaimed. 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * @param tif A TIFF pointer. 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannTIFFClose(TIFF* tif) 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann{ 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFCloseProc closeproc = tif->tif_closeproc; 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann thandle_t fd = tif->tif_clientdata; 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TIFFCleanup(tif); 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (void) (*closeproc)(fd); 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* vim: set ts=8 sts=8 sw=8 noet: */ 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * Local Variables: 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * mode: c 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * c-basic-offset: 8 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * fill-column: 78 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann * End: 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann */ 141