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