1/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_extension.c,v 1.4.2.1 2010-06-08 18:50:42 bfriesen 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 "tiffiop.h"
35
36int TIFFGetTagListCount( TIFF *tif )
37
38{
39    TIFFDirectory* td = &tif->tif_dir;
40
41    return td->td_customValueCount;
42}
43
44ttag_t 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 (ttag_t) -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*/
60TIFFTagMethods *TIFFAccessTagMethods( TIFF *tif )
61
62{
63    return &(tif->tif_tagmethods);
64}
65
66void *TIFFGetClientInfo( TIFF *tif, const char *name )
67
68{
69    TIFFClientInfoLink *link = tif->tif_clientinfo;
70
71    while( link != NULL && strcmp(link->name,name) != 0 )
72        link = link->next;
73
74    if( link != NULL )
75        return link->data;
76    else
77        return NULL;
78}
79
80void TIFFSetClientInfo( TIFF *tif, void *data, const char *name )
81
82{
83    TIFFClientInfoLink *link = tif->tif_clientinfo;
84
85    /*
86    ** Do we have an existing link with this name?  If so, just
87    ** set it.
88    */
89    while( link != NULL && strcmp(link->name,name) != 0 )
90        link = link->next;
91
92    if( link != NULL )
93    {
94        link->data = data;
95        return;
96    }
97
98    /*
99    ** Create a new link.
100    */
101
102    link = (TIFFClientInfoLink *) _TIFFmalloc(sizeof(TIFFClientInfoLink));
103    assert (link != NULL);
104    link->next = tif->tif_clientinfo;
105    link->name = (char *) _TIFFmalloc(strlen(name)+1);
106    assert (link->name != NULL);
107    strcpy(link->name, name);
108    link->data = data;
109
110    tif->tif_clientinfo = link;
111}
112/*
113 * Local Variables:
114 * mode: c
115 * c-basic-offset: 8
116 * fill-column: 78
117 * End:
118 */
119