1 /* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_extension.c,v 1.8 2015-12-06 11:13:43 erouault Exp $ */ 2 3 /* 4 * Copyright (c) 1988-1997 Sam Leffler 5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. 6 * 7 * Permission to use, copy, modify, distribute, and sell this software and 8 * its documentation for any purpose is hereby granted without fee, provided 9 * that (i) the above copyright notices and this permission notice appear in 10 * all copies of the software and related documentation, and (ii) the names of 11 * Sam Leffler and Silicon Graphics may not be used in any advertising or 12 * publicity relating to the software without the specific, prior written 13 * permission of Sam Leffler and Silicon Graphics. 14 * 15 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 16 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 17 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 18 * 19 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 20 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 21 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 22 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 23 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 24 * OF THIS SOFTWARE. 25 */ 26 27 /* 28 * TIFF Library. 29 * 30 * Various routines support external extension of the tag set, and other 31 * application extension capabilities. 32 */ 33 34 #include <precomp.h> 35 36 int TIFFGetTagListCount( TIFF *tif ) 37 38 { 39 TIFFDirectory* td = &tif->tif_dir; 40 41 return td->td_customValueCount; 42 } 43 44 uint32 TIFFGetTagListEntry( TIFF *tif, int tag_index ) 45 46 { 47 TIFFDirectory* td = &tif->tif_dir; 48 49 if( tag_index < 0 || tag_index >= td->td_customValueCount ) 50 return (uint32)(-1); 51 else 52 return td->td_customValues[tag_index].info->field_tag; 53 } 54 55 /* 56 ** This provides read/write access to the TIFFTagMethods within the TIFF 57 ** structure to application code without giving access to the private 58 ** TIFF structure. 59 */ 60 TIFFTagMethods *TIFFAccessTagMethods( TIFF *tif ) 61 62 { 63 return &(tif->tif_tagmethods); 64 } 65 66 void *TIFFGetClientInfo( TIFF *tif, const char *name ) 67 68 { 69 TIFFClientInfoLink *psLink = tif->tif_clientinfo; 70 71 while( psLink != NULL && strcmp(psLink->name,name) != 0 ) 72 psLink = psLink->next; 73 74 if( psLink != NULL ) 75 return psLink->data; 76 else 77 return NULL; 78 } 79 80 void TIFFSetClientInfo( TIFF *tif, void *data, const char *name ) 81 82 { 83 TIFFClientInfoLink *psLink = tif->tif_clientinfo; 84 85 /* 86 ** Do we have an existing link with this name? If so, just 87 ** set it. 88 */ 89 while( psLink != NULL && strcmp(psLink->name,name) != 0 ) 90 psLink = psLink->next; 91 92 if( psLink != NULL ) 93 { 94 psLink->data = data; 95 return; 96 } 97 98 /* 99 ** Create a new link. 100 */ 101 102 psLink = (TIFFClientInfoLink *) _TIFFmalloc(sizeof(TIFFClientInfoLink)); 103 assert (psLink != NULL); 104 psLink->next = tif->tif_clientinfo; 105 psLink->name = (char *) _TIFFmalloc((tmsize_t)(strlen(name)+1)); 106 assert (psLink->name != NULL); 107 strcpy(psLink->name, name); 108 psLink->data = data; 109 110 tif->tif_clientinfo = psLink; 111 } 112 /* 113 * Local Variables: 114 * mode: c 115 * c-basic-offset: 8 116 * fill-column: 78 117 * End: 118 */ 119