xref: /aosp_15_r20/external/pdfium/third_party/libtiff/tif_extension.c (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
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