tif_extension.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. * TIFF Library.
  26. *
  27. * Various routines support external extension of the tag set, and other
  28. * application extension capabilities.
  29. */
  30. #include "tiffiop.h"
  31. int TIFFGetTagListCount(TIFF *tif)
  32. {
  33. TIFFDirectory *td = &tif->tif_dir;
  34. return td->td_customValueCount;
  35. }
  36. uint32_t TIFFGetTagListEntry(TIFF *tif, int tag_index)
  37. {
  38. TIFFDirectory *td = &tif->tif_dir;
  39. if (tag_index < 0 || tag_index >= td->td_customValueCount)
  40. return (uint32_t)(-1);
  41. else
  42. return td->td_customValues[tag_index].info->field_tag;
  43. }
  44. /*
  45. ** This provides read/write access to the TIFFTagMethods within the TIFF
  46. ** structure to application code without giving access to the private
  47. ** TIFF structure.
  48. */
  49. TIFFTagMethods *TIFFAccessTagMethods(TIFF *tif)
  50. {
  51. return &(tif->tif_tagmethods);
  52. }
  53. void *TIFFGetClientInfo(TIFF *tif, const char *name)
  54. {
  55. TIFFClientInfoLink *psLink = tif->tif_clientinfo;
  56. while (psLink != NULL && strcmp(psLink->name, name) != 0)
  57. psLink = psLink->next;
  58. if (psLink != NULL)
  59. return psLink->data;
  60. else
  61. return NULL;
  62. }
  63. void TIFFSetClientInfo(TIFF *tif, void *data, const char *name)
  64. {
  65. TIFFClientInfoLink *psLink = tif->tif_clientinfo;
  66. /*
  67. ** Do we have an existing link with this name? If so, just
  68. ** set it.
  69. */
  70. while (psLink != NULL && strcmp(psLink->name, name) != 0)
  71. psLink = psLink->next;
  72. if (psLink != NULL)
  73. {
  74. psLink->data = data;
  75. return;
  76. }
  77. /*
  78. ** Create a new link.
  79. */
  80. psLink =
  81. (TIFFClientInfoLink *)_TIFFmallocExt(tif, sizeof(TIFFClientInfoLink));
  82. assert(psLink != NULL);
  83. psLink->next = tif->tif_clientinfo;
  84. psLink->name = (char *)_TIFFmallocExt(tif, (tmsize_t)(strlen(name) + 1));
  85. assert(psLink->name != NULL);
  86. strcpy(psLink->name, name);
  87. psLink->data = data;
  88. tif->tif_clientinfo = psLink;
  89. }