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