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