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
TIFFGetTagListCount(TIFF * tif)34 int TIFFGetTagListCount(TIFF *tif)
35
36 {
37 TIFFDirectory *td = &tif->tif_dir;
38
39 return td->td_customValueCount;
40 }
41
TIFFGetTagListEntry(TIFF * tif,int tag_index)42 uint32_t TIFFGetTagListEntry(TIFF *tif, int tag_index)
43
44 {
45 TIFFDirectory *td = &tif->tif_dir;
46
47 if (tag_index < 0 || tag_index >= td->td_customValueCount)
48 return (uint32_t)(-1);
49 else
50 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 */
TIFFAccessTagMethods(TIFF * tif)58 TIFFTagMethods *TIFFAccessTagMethods(TIFF *tif)
59
60 {
61 return &(tif->tif_tagmethods);
62 }
63
TIFFGetClientInfo(TIFF * tif,const char * name)64 void *TIFFGetClientInfo(TIFF *tif, const char *name)
65
66 {
67 TIFFClientInfoLink *psLink = tif->tif_clientinfo;
68
69 while (psLink != NULL && strcmp(psLink->name, name) != 0)
70 psLink = psLink->next;
71
72 if (psLink != NULL)
73 return psLink->data;
74 else
75 return NULL;
76 }
77
TIFFSetClientInfo(TIFF * tif,void * data,const char * name)78 void TIFFSetClientInfo(TIFF *tif, void *data, const char *name)
79
80 {
81 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 while (psLink != NULL && strcmp(psLink->name, name) != 0)
88 psLink = psLink->next;
89
90 if (psLink != NULL)
91 {
92 psLink->data = data;
93 return;
94 }
95
96 /*
97 ** Create a new link.
98 */
99
100 psLink =
101 (TIFFClientInfoLink *)_TIFFmallocExt(tif, sizeof(TIFFClientInfoLink));
102 assert(psLink != NULL);
103 psLink->next = tif->tif_clientinfo;
104 psLink->name = (char *)_TIFFmallocExt(tif, (tmsize_t)(strlen(name) + 1));
105 assert(psLink->name != NULL);
106 strcpy(psLink->name, name);
107 psLink->data = data;
108
109 tif->tif_clientinfo = psLink;
110 }
111