/*
 * Copyright (c) 1988-1997 Sam Leffler
 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
 *
 * Permission to use, copy, modify, distribute, and sell this software and
 * its documentation for any purpose is hereby granted without fee, provided
 * that (i) the above copyright notices and this permission notice appear in
 * all copies of the software and related documentation, and (ii) the names of
 * Sam Leffler and Silicon Graphics may not be used in any advertising or
 * publicity relating to the software without the specific, prior written
 * permission of Sam Leffler and Silicon Graphics.
 *
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
 *
 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
 * OF THIS SOFTWARE.
 */

/*
 * TIFF Library.
 *
 * Core Directory Tag Support.
 */
#include "tiffiop.h"
#include <stdlib.h>

/*
 * NOTE: THIS ARRAY IS ASSUMED TO BE SORTED BY TAG.
 *
 * NOTE: The second field (field_readcount) and third field (field_writecount)
 *       sometimes use the values TIFF_VARIABLE (-1), TIFF_VARIABLE2 (-3)
 *       and TIFF_SPP (-2). The macros should be used but would throw off
 *       the formatting of the code, so please interpret the -1, -2 and -3
 *       values accordingly.
 */

/* const object should be initialized */
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable : 4132)
#endif
static const TIFFFieldArray tiffFieldArray;
static const TIFFFieldArray exifFieldArray;
static const TIFFFieldArray gpsFieldArray;
#ifdef _MSC_VER
#pragma warning(pop)
#endif
/*--: Rational2Double: --
 * The Rational2Double upgraded libtiff functionality allows the definition and
 * achievement of true double-precision accuracy for TIFF tags of RATIONAL type
 * and field_bit=FIELD_CUSTOM using the set_get_field_type = TIFF_SETGET_DOUBLE.
 * Unfortunately, that changes the old implemented interface for TIFFGetField().
 * In order to keep the old TIFFGetField() interface behavior those tags have to
 * be redefined with set_get_field_type = TIFF_SETGET_FLOAT!
 *
 *  Rational custom arrays are already defined as _Cxx_FLOAT, thus can stay.
 *
 */

/* clang-format off */ /* for better readability of tag comments */
static const TIFFField tiffFields[] = {
    {TIFFTAG_SUBFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32, FIELD_SUBFILETYPE, 1, 0, "SubfileType", NULL},
    {TIFFTAG_OSUBFILETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED,  FIELD_IGNORE, 1, 0, "OldSubfileType", NULL},
    {TIFFTAG_IMAGEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_IMAGEDIMENSIONS, 0, 0, "ImageWidth", NULL},
    {TIFFTAG_IMAGELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_IMAGEDIMENSIONS, 1, 0, "ImageLength", NULL},
    {TIFFTAG_BITSPERSAMPLE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_BITSPERSAMPLE, 0, 0, "BitsPerSample", NULL},
    {TIFFTAG_COMPRESSION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_COMPRESSION, 0, 0, "Compression", NULL},
    {TIFFTAG_PHOTOMETRIC, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_PHOTOMETRIC, 0, 0, "PhotometricInterpretation", NULL},
    {TIFFTAG_THRESHHOLDING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_THRESHHOLDING, 1, 0, "Threshholding", NULL},
    {TIFFTAG_CELLWIDTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CellWidth", NULL},
    {TIFFTAG_CELLLENGTH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CellLength", NULL},
    {TIFFTAG_FILLORDER, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_FILLORDER, 0, 0, "FillOrder", NULL},
    {TIFFTAG_DOCUMENTNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DocumentName", NULL},
    {TIFFTAG_IMAGEDESCRIPTION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "ImageDescription", NULL},
    {TIFFTAG_MAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "Make", NULL},
    {TIFFTAG_MODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "Model", NULL},
    {TIFFTAG_STRIPOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED,  FIELD_STRIPOFFSETS, 0, 0, "StripOffsets", NULL},
    {TIFFTAG_ORIENTATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_ORIENTATION, 0, 0, "Orientation", NULL},
    {TIFFTAG_SAMPLESPERPIXEL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_SAMPLESPERPIXEL, 0, 0, "SamplesPerPixel", NULL},
    {TIFFTAG_ROWSPERSTRIP, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_ROWSPERSTRIP, 0, 0, "RowsPerStrip", NULL},
    {TIFFTAG_STRIPBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED,  FIELD_STRIPBYTECOUNTS, 0, 0, "StripByteCounts", NULL},
    {TIFFTAG_MINSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_MINSAMPLEVALUE, 1, 0, "MinSampleValue", NULL},
    {TIFFTAG_MAXSAMPLEVALUE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_MAXSAMPLEVALUE, 1, 0, "MaxSampleValue", NULL},
    {TIFFTAG_XRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_RESOLUTION, 1, 0, "XResolution", NULL},
    {TIFFTAG_YRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_RESOLUTION, 1, 0, "YResolution", NULL},
    {TIFFTAG_PLANARCONFIG, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_PLANARCONFIG, 0, 0, "PlanarConfiguration", NULL},
    {TIFFTAG_PAGENAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "PageName", NULL},
    {TIFFTAG_XPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_POSITION, 1, 0, "XPosition", NULL},
    {TIFFTAG_YPOSITION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_POSITION, 1, 0, "YPosition", NULL},
    {TIFFTAG_FREEOFFSETS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED,  FIELD_IGNORE, 0, 0, "FreeOffsets", NULL},
    {TIFFTAG_FREEBYTECOUNTS, -1, -1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED,  FIELD_IGNORE, 0, 0, "FreeByteCounts", NULL},
    {TIFFTAG_GRAYRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED,  FIELD_IGNORE, 1, 0, "GrayResponseUnit", NULL},
    {TIFFTAG_GRAYRESPONSECURVE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED,  FIELD_IGNORE, 1, 0, "GrayResponseCurve", NULL},
    {TIFFTAG_RESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_RESOLUTIONUNIT, 1, 0, "ResolutionUnit", NULL},
    {TIFFTAG_PAGENUMBER, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR,  FIELD_PAGENUMBER, 1, 0, "PageNumber", NULL},
    {TIFFTAG_COLORRESPONSEUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED,  FIELD_IGNORE, 1, 0, "ColorResponseUnit", NULL},
    {TIFFTAG_TRANSFERFUNCTION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER,  FIELD_TRANSFERFUNCTION, 1, 0, "TransferFunction", NULL},
    {TIFFTAG_SOFTWARE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "Software", NULL},
    {TIFFTAG_DATETIME, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DateTime", NULL},
    {TIFFTAG_ARTIST, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "Artist", NULL},
    {TIFFTAG_HOSTCOMPUTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "HostComputer", NULL},
    {TIFFTAG_WHITEPOINT, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "WhitePoint", NULL},
    {TIFFTAG_PRIMARYCHROMATICITIES, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "PrimaryChromaticities", NULL},
    {TIFFTAG_COLORMAP, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_OTHER,  FIELD_COLORMAP, 1, 0, "ColorMap", NULL},
    {TIFFTAG_HALFTONEHINTS, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR,  FIELD_HALFTONEHINTS, 1, 0, "HalftoneHints", NULL},
    {TIFFTAG_TILEWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_TILEDIMENSIONS, 0, 0, "TileWidth", NULL},
    {TIFFTAG_TILELENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_TILEDIMENSIONS, 0, 0, "TileLength", NULL},
    {TIFFTAG_TILEOFFSETS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED,  FIELD_STRIPOFFSETS, 0, 0, "TileOffsets", NULL},
    {TIFFTAG_TILEBYTECOUNTS, -1, 1, TIFF_LONG8, 0, TIFF_SETGET_UNDEFINED,  FIELD_STRIPBYTECOUNTS, 0, 0, "TileByteCounts", NULL},
    {TIFFTAG_SUBIFD, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8,  FIELD_SUBIFD, 1, 1, "SubIFD", (TIFFFieldArray *)&tiffFieldArray},
    {TIFFTAG_INKSET, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 0, 0, "InkSet", NULL},
    {TIFFTAG_INKNAMES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_C16_ASCII,  FIELD_INKNAMES, 1, 1, "InkNames", NULL},
    {TIFFTAG_NUMBEROFINKS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_NUMBEROFINKS, 1, 0, "NumberOfInks", NULL},
    {TIFFTAG_DOTRANGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR,  FIELD_CUSTOM, 0, 0, "DotRange", NULL},
    {TIFFTAG_TARGETPRINTER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "TargetPrinter", NULL},
    {TIFFTAG_EXTRASAMPLES, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16,  FIELD_EXTRASAMPLES, 0, 1, "ExtraSamples", NULL},
    {TIFFTAG_SAMPLEFORMAT, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_SAMPLEFORMAT, 0, 0, "SampleFormat", NULL},
    {TIFFTAG_SMINSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE,  FIELD_SMINSAMPLEVALUE, 1, 0, "SMinSampleValue", NULL},
    {TIFFTAG_SMAXSAMPLEVALUE, -2, -1, TIFF_ANY, 0, TIFF_SETGET_DOUBLE,  FIELD_SMAXSAMPLEVALUE, 1, 0, "SMaxSampleValue", NULL},
    {TIFFTAG_CLIPPATH, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 0, 1, "ClipPath", NULL},
    {TIFFTAG_XCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 0, 0, "XClipPathUnits", NULL},
    {TIFFTAG_YCLIPPATHUNITS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 0, 0, "YClipPathUnits", NULL},
    {TIFFTAG_YCBCRCOEFFICIENTS, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 0, 0, "YCbCrCoefficients", NULL},
    {TIFFTAG_YCBCRSUBSAMPLING, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_UINT16_PAIR,  FIELD_YCBCRSUBSAMPLING, 0, 0, "YCbCrSubsampling", NULL},
    {TIFFTAG_YCBCRPOSITIONING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_YCBCRPOSITIONING, 0, 0, "YCbCrPositioning", NULL},
    {TIFFTAG_REFERENCEBLACKWHITE, 6, 6, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_REFBLACKWHITE, 1, 0, "ReferenceBlackWhite", NULL},
    {TIFFTAG_XMLPACKET, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "XMLPacket", NULL},
    /* begin SGI tags */
    {TIFFTAG_MATTEING, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_EXTRASAMPLES, 0, 0, "Matteing", NULL},
    {TIFFTAG_DATATYPE, -2, -1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_SAMPLEFORMAT, 0, 0, "DataType", NULL},
    {TIFFTAG_IMAGEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_IMAGEDEPTH, 0, 0, "ImageDepth", NULL},
    {TIFFTAG_TILEDEPTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_TILEDEPTH, 0, 0, "TileDepth", NULL},
    /* end SGI tags */
    /* begin Pixar tags */
    {TIFFTAG_PIXAR_IMAGEFULLWIDTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ImageFullWidth", NULL},
    {TIFFTAG_PIXAR_IMAGEFULLLENGTH, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ImageFullLength", NULL},
    {TIFFTAG_PIXAR_TEXTUREFORMAT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "TextureFormat", NULL},
    {TIFFTAG_PIXAR_WRAPMODES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "TextureWrapModes", NULL},
    {TIFFTAG_PIXAR_FOVCOT, 1, 1, TIFF_FLOAT, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "FieldOfViewCotangent", NULL},
    {TIFFTAG_PIXAR_MATRIX_WORLDTOSCREEN, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "MatrixWorldToScreen", NULL},
    {TIFFTAG_PIXAR_MATRIX_WORLDTOCAMERA, 16, 16, TIFF_FLOAT, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "MatrixWorldToCamera", NULL},
    {TIFFTAG_COPYRIGHT, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "Copyright", NULL},
    /* end Pixar tags */
    {TIFFTAG_RICHTIFFIPTC, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "RichTIFFIPTC", NULL},
    {TIFFTAG_PHOTOSHOP, -3, -3, TIFF_BYTE, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "Photoshop", NULL},
    /*--: EXIFIFD and GPSIFD specified as TIFF_LONG by Aware-Systems and not TIFF_IFD8 as in original LibTiff. However, for IFD-like tags,
     * libtiff uses the data type TIFF_IFD8 in tiffFields[]-tag definition combined with a special handling procedure in order to write either
     * a 32-bit value and the TIFF_IFD type-id into ClassicTIFF files or a 64-bit value and the TIFF_IFD8 type-id into BigTIFF files. */
    {TIFFTAG_EXIFIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8,  FIELD_CUSTOM, 1, 0, "EXIFIFDOffset", (TIFFFieldArray *)&exifFieldArray},
    {TIFFTAG_ICCPROFILE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "ICC Profile", NULL},
    {TIFFTAG_GPSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8,  FIELD_CUSTOM, 1, 0, "GPSIFDOffset", (TIFFFieldArray *)&gpsFieldArray},
    {TIFFTAG_FAXRECVPARAMS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, TRUE, FALSE, "FaxRecvParams", NULL},
    {TIFFTAG_FAXSUBADDRESS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, TRUE, FALSE, "FaxSubAddress", NULL},
    {TIFFTAG_FAXRECVTIME, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, TRUE, FALSE, "FaxRecvTime", NULL},
    {TIFFTAG_FAXDCS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, TRUE, FALSE, "FaxDcs", NULL},
    {TIFFTAG_STONITS, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 0, 0, "StoNits", NULL},
    {TIFFTAG_IMAGESOURCEDATA, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "Adobe Photoshop Document Data Block", NULL},
    {TIFFTAG_INTEROPERABILITYIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8,  FIELD_CUSTOM, 0, 0, "InteroperabilityIFDOffset", NULL},
    /* begin DNG tags */
    {TIFFTAG_DNGVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "DNGVersion", NULL},
    {TIFFTAG_DNGBACKWARDVERSION, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "DNGBackwardVersion", NULL},
    {TIFFTAG_UNIQUECAMERAMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "UniqueCameraModel", NULL},
    {TIFFTAG_LOCALIZEDCAMERAMODEL, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "LocalizedCameraModel", NULL},
    {TIFFTAG_CFAPLANECOLOR, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "CFAPlaneColor", NULL},
    {TIFFTAG_CFALAYOUT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CFALayout", NULL},
    {TIFFTAG_LINEARIZATIONTABLE, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16,  FIELD_CUSTOM, 1, 1, "LinearizationTable", NULL},
    {TIFFTAG_BLACKLEVELREPEATDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16,  FIELD_CUSTOM, 1, 0, "BlackLevelRepeatDim", NULL},
    {TIFFTAG_BLACKLEVEL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "BlackLevel", NULL},
    {TIFFTAG_BLACKLEVELDELTAH, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "BlackLevelDeltaH", NULL},
    {TIFFTAG_BLACKLEVELDELTAV, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "BlackLevelDeltaV", NULL},
    {TIFFTAG_WHITELEVEL, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32,  FIELD_CUSTOM, 1, 1, "WhiteLevel", NULL},
    {TIFFTAG_DEFAULTSCALE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "DefaultScale", NULL},
    {TIFFTAG_BESTQUALITYSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "BestQualityScale", NULL},
    {TIFFTAG_DEFAULTCROPORIGIN, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "DefaultCropOrigin", NULL},
    {TIFFTAG_DEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "DefaultCropSize", NULL},
    {TIFFTAG_COLORMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ColorMatrix1", NULL},
    {TIFFTAG_COLORMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ColorMatrix2", NULL},
    {TIFFTAG_CAMERACALIBRATION1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "CameraCalibration1", NULL},
    {TIFFTAG_CAMERACALIBRATION2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "CameraCalibration2", NULL},
    {TIFFTAG_REDUCTIONMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ReductionMatrix1", NULL},
    {TIFFTAG_REDUCTIONMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ReductionMatrix2", NULL},
    {TIFFTAG_ANALOGBALANCE, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "AnalogBalance", NULL},
    {TIFFTAG_ASSHOTNEUTRAL, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "AsShotNeutral", NULL},
    {TIFFTAG_ASSHOTWHITEXY, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "AsShotWhiteXY", NULL},
    {TIFFTAG_BASELINEEXPOSURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "BaselineExposure", NULL},
    {TIFFTAG_BASELINENOISE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "BaselineNoise", NULL},
    {TIFFTAG_BASELINESHARPNESS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "BaselineSharpness", NULL},
    {TIFFTAG_BAYERGREENSPLIT, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "BayerGreenSplit", NULL},
    {TIFFTAG_LINEARRESPONSELIMIT, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "LinearResponseLimit", NULL},
    {TIFFTAG_CAMERASERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "CameraSerialNumber", NULL},
    {TIFFTAG_LENSINFO, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "LensInfo", NULL},
    {TIFFTAG_CHROMABLURRADIUS, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "ChromaBlurRadius", NULL},
    {TIFFTAG_ANTIALIASSTRENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "AntiAliasStrength", NULL},
    {TIFFTAG_SHADOWSCALE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "ShadowScale", NULL},
    {TIFFTAG_DNGPRIVATEDATA, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "DNGPrivateData", NULL},
    {TIFFTAG_MAKERNOTESAFETY, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "MakerNoteSafety", NULL},
    {TIFFTAG_CALIBRATIONILLUMINANT1, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CalibrationIlluminant1", NULL},
    {TIFFTAG_CALIBRATIONILLUMINANT2, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CalibrationIlluminant2", NULL},
    {TIFFTAG_RAWDATAUNIQUEID, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "RawDataUniqueID", NULL},
    {TIFFTAG_ORIGINALRAWFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "OriginalRawFileName", NULL},
    {TIFFTAG_ORIGINALRAWFILEDATA, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "OriginalRawFileData", NULL},
    {TIFFTAG_ACTIVEAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "ActiveArea", NULL},
    {TIFFTAG_MASKEDAREAS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32,  FIELD_CUSTOM, 1, 1, "MaskedAreas", NULL},
    {TIFFTAG_ASSHOTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "AsShotICCProfile", NULL},
    {TIFFTAG_ASSHOTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "AsShotPreProfileMatrix", NULL},
    {TIFFTAG_CURRENTICCPROFILE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "CurrentICCProfile", NULL},
    {TIFFTAG_CURRENTPREPROFILEMATRIX, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "CurrentPreProfileMatrix", NULL},
    {TIFFTAG_PERSAMPLE, 0, 0, TIFF_SHORT, 0, TIFF_SETGET_UNDEFINED,  FIELD_PSEUDO, TRUE, FALSE, "PerSample", NULL},
#if 0
    /* begin DNG 1.2.0.0 tags */
    {TIFFTAG_COLORIMETRICREFERENCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "ColorimetricReference", NULL},
    {TIFFTAG_CAMERACALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "CameraCalibrationSignature", NULL},
    {TIFFTAG_PROFILECALIBRATIONSIGNATURE, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "ProfileCalibrationSignature", NULL},
    {TIFFTAG_EXTRACAMERAPROFILES, -1, -1, TIFF_IFD8, 0, TIFF_SETGET_C16_IFD8,  FIELD_CUSTOM, 1, 1, "ExtraCameraProfiles", NULL},
    {TIFFTAG_ASSHOTPROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "AsShotProfileName", NULL},
    {TIFFTAG_NOISEREDUCTIONAPPLIED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "NoiseReductionApplied", NULL},
    {TIFFTAG_PROFILENAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "ProfileName", NULL},
    {TIFFTAG_PROFILEHUESATMAPDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "ProfileHueSatMapDims", NULL},
    {TIFFTAG_PROFILEHUESATMAPDATA1, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData1", NULL},
    {TIFFTAG_PROFILEHUESATMAPDATA2, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData2", NULL},
    {TIFFTAG_PROFILETONECURVE, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ProfileToneCurve", NULL},
    {TIFFTAG_PROFILEEMBEDPOLICY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ProfileEmbedPolicy", NULL},
    {TIFFTAG_PROFILECOPYRIGHT, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "ProfileCopyright", NULL},
    {TIFFTAG_FORWARDMATRIX1, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ForwardMatrix1", NULL},
    {TIFFTAG_FORWARDMATRIX2, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ForwardMatrix2", NULL},
    {TIFFTAG_PREVIEWAPPLICATIONNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "PreviewApplicationName", NULL},
    {TIFFTAG_PREVIEWAPPLICATIONVERSION, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "PreviewApplicationVersion", NULL},
    {TIFFTAG_PREVIEWSETTINGSNAME, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "PreviewSettingsName", NULL},
    {TIFFTAG_PREVIEWSETTINGSDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "PreviewSettingsDigest", NULL},
    {TIFFTAG_PREVIEWCOLORSPACE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "PreviewColorSpace", NULL},
    {TIFFTAG_PREVIEWDATETIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "PreviewDateTime", NULL},
    {TIFFTAG_RAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "RawImageDigest", NULL},
    {TIFFTAG_ORIGINALRAWFILEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "OriginalRawFileDigest", NULL},
    {TIFFTAG_SUBTILEBLOCKSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "SubTileBlockSize", NULL},
    {TIFFTAG_ROWINTERLEAVEFACTOR, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "RowInterleaveFactor", NULL},
    {TIFFTAG_PROFILELOOKTABLEDIMS, 3, 3, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "ProfileLookTableDims", NULL},
    {TIFFTAG_PROFILELOOKTABLEDATA, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ProfileLookTableData", NULL},
    /* begin DNG 1.3.0.0 tags */
    {TIFFTAG_OPCODELIST1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "OpcodeList1", NULL},
    {TIFFTAG_OPCODELIST2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "OpcodeList2", NULL},
    {TIFFTAG_OPCODELIST3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "OpcodeList3", NULL},
    {TIFFTAG_NOISEPROFILE, -1, -1, TIFF_DOUBLE, 0, TIFF_SETGET_C16_DOUBLE,  FIELD_CUSTOM, 1, 1, "NoiseProfile", NULL},
    /* begin DNG 1.4.0.0 tags */
    {TIFFTAG_DEFAULTUSERCROP, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "DefaultUserCrop", NULL},
    {TIFFTAG_DEFAULTBLACKRENDER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "DefaultBlackRender", NULL},
    {TIFFTAG_BASELINEEXPOSUREOFFSET, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "BaselineExposureOffset", NULL},
    {TIFFTAG_PROFILELOOKTABLEENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ProfileLookTableEncoding", NULL},
    {TIFFTAG_PROFILEHUESATMAPENCODING, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ProfileHueSatMapEncoding", NULL},
    {TIFFTAG_ORIGINALDEFAULTFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "OriginalDefaultFinalSize", NULL},
    {TIFFTAG_ORIGINALBESTQUALITYFINALSIZE, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "OriginalBestQualityFinalSize", NULL},
    {TIFFTAG_ORIGINALDEFAULTCROPSIZE, 2, 2, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "OriginalDefaultCropSize", NULL}, /* could also be rational */
    {TIFFTAG_NEWRAWIMAGEDIGEST, 16, 16, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "NewRawImageDigest", NULL},
    {TIFFTAG_RAWTOPREVIEWGAIN, 1, 1, TIFF_DOUBLE, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "RawToPreviewGain", NULL},
    /* begin DNG 1.5.0.0 tags */
    {TIFFTAG_DEPTHFORMAT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "DepthFormat", NULL},
    {TIFFTAG_DEPTHNEAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "DepthNear", NULL},
    {TIFFTAG_DEPTHFAR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "DepthFar", NULL},
    {TIFFTAG_DEPTHUNITS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "DepthUnits", NULL},
    {TIFFTAG_DEPTHMEASURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "DepthMeasureType", NULL},
    {TIFFTAG_ENHANCEPARAMS, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "EnhanceParams", NULL},
    /* begin DNG 1.6.0.0 tags */
    {TIFFTAG_PROFILEGAINTABLEMAP, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "ProfileGainTableMap", NULL},
    {TIFFTAG_SEMANTICNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "SemanticName", NULL},
    {TIFFTAG_SEMANTICINSTANCEID, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "SemanticInstanceID", NULL},
    {TIFFTAG_MASKSUBAREA, 4, 4, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "MaskSubArea", NULL},
    {TIFFTAG_RGBTABLES, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "RGBTables", NULL},
    {TIFFTAG_CALIBRATIONILLUMINANT3, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CalibrationIlluminant3", NULL},
    {TIFFTAG_COLORMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ColorMatrix3", NULL},
    {TIFFTAG_CAMERACALIBRATION3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "CameraCalibration3", NULL},
    {TIFFTAG_REDUCTIONMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ReductionMatrix3", NULL},
    {TIFFTAG_PROFILEHUESATMAPDATA3, -1, -1, TIFF_FLOAT, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ProfileHueSatMapData3", NULL},
    {TIFFTAG_FORWARDMATRIX3, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "ForwardMatrix3", NULL},
    {TIFFTAG_ILLUMINANTDATA1, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "IlluminantData1", NULL},
    {TIFFTAG_ILLUMINANTDATA2, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "IlluminantData2", NULL},
    {TIFFTAG_ILLUMINANTDATA3, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "IlluminantData3", NULL},
    /* end DNG tags */
#endif
    /* begin TIFF/EP tags */
    {TIFFTAG_EP_CFAREPEATPATTERNDIM, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16,  FIELD_CUSTOM, 1, 0, "EP CFARepeatPatternDim", NULL},
    {TIFFTAG_EP_CFAPATTERN, -1, -1, TIFF_BYTE, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "EP CFAPattern", NULL},
#if 0
    /* TIFFTAG_EP_BATTERYLEVEL can be RATIONAL or ASCII.
     * LibTiff defines it as ASCII and converts RATIONAL to an ASCII string. */
    {TIFFTAG_EP_BATTERYLEVEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "EP BatteryLevel", NULL},
    {TIFFTAG_EP_INTERLACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP Interlace", NULL},
    /* TIFFTAG_EP_IPTC_NAA and TIFFTAG_RICHTIFFIPTC share the same tag number (33723)
     *   LibTIFF type is UNDEFINED or BYTE, but often times incorrectly specified as LONG, because TIFF/EP (ISO/DIS 12234-2) specifies type LONG or ASCII. */
    {TIFFTAG_EP_TIMEZONEOFFSET, -1, -1, TIFF_SSHORT, 0, TIFF_SETGET_C16_UINT16,  FIELD_CUSTOM, 1, 1, "EP TimeZoneOffset", NULL},
    {TIFFTAG_EP_SELFTIMERMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP SelfTimerMode", NULL},
    {TIFFTAG_EP_FLASHENERGY, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP FlashEnergy", NULL},
    {TIFFTAG_EP_SPATIALFREQUENCYRESPONSE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "EP SpatialFrequencyResponse", NULL},
    {TIFFTAG_EP_NOISE, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "EP Noise", NULL},
    {TIFFTAG_EP_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "EP FocalPlaneXResolution", NULL},
    {TIFFTAG_EP_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "EP FocalPlaneYResolution", NULL},
    {TIFFTAG_EP_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP FocalPlaneResolutionUnit", NULL},
    {TIFFTAG_EP_IMAGENUMBER, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "EP ImageNumber", NULL}, /* or SHORT */
    {TIFFTAG_EP_SECURITYCLASSIFICATION, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "EP SecurityClassification", NULL},
    {TIFFTAG_EP_IMAGEHISTORY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "EP ImageHistory", NULL},
    {TIFFTAG_EP_EXPOSUREINDEX, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP ExposureIndex", NULL},
    {TIFFTAG_EP_STANDARDID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "EP StandardId", NULL},
    {TIFFTAG_EP_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP SensingMethod", NULL},
    /* TIFF/EP tags equivalent to EXIF tags, sometimes defined differently. */
    {TIFFTAG_EP_EXPOSURETIME, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP ExposureTime", NULL}, /*N=1 or 2 */
    {TIFFTAG_EP_FNUMBER, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP FNumber", NULL},
    {TIFFTAG_EP_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP ExposureProgram", NULL},
    {TIFFTAG_EP_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "EP SpectralSensitivity", NULL},
    {TIFFTAG_EP_ISOSPEEDRATINGS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP ISOSpeedRatings", NULL},
    {TIFFTAG_EP_OECF, -3, -3, TIFF_UNDEFINED, 0, TIFF_SETGET_C32_UINT8,  FIELD_CUSTOM, 1, 1, "EP OptoelectricConversionFactor", NULL},
    {TIFFTAG_EP_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "EP DateTimeOriginal", NULL},
    {TIFFTAG_EP_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "EP CompressedBitsPerPixel", NULL},
    {TIFFTAG_EP_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "EP ShutterSpeedValue", NULL},
    {TIFFTAG_EP_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "EP ApertureValue", NULL},
    {TIFFTAG_EP_BRIGHTNESSVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP BrightnessValue", NULL},
    {TIFFTAG_EP_EXPOSUREBIASVALUE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP ExposureBiasValue", NULL}, /*N=1 or 2 */
    {TIFFTAG_EP_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "EP MaxApertureValue", NULL},
    {TIFFTAG_EP_SUBJECTDISTANCE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP SubjectDistance", NULL},
    {TIFFTAG_EP_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP MeteringMode", NULL},
    {TIFFTAG_EP_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP LightSource", NULL},
    {TIFFTAG_EP_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "EP Flash", NULL},
    {TIFFTAG_EP_FOCALLENGTH, -1, -1, TIFF_RATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "EP FocalLength", NULL},
    {TIFFTAG_EP_SUBJECTLOCATION, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16,  FIELD_CUSTOM, 1, 1, "EP SubjectLocation", NULL},
    /* end TIFF/EP tags */
#endif
    /* begin TIFF/FX tags */
    {TIFFTAG_INDEXED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "Indexed", NULL},
    {TIFFTAG_GLOBALPARAMETERSIFD, 1, 1, TIFF_IFD8, 0, TIFF_SETGET_IFD8,  FIELD_CUSTOM, 1, 0, "GlobalParametersIFD", NULL},
    {TIFFTAG_PROFILETYPE, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ProfileType", NULL},
    {TIFFTAG_FAXPROFILE, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8,  FIELD_CUSTOM, 1, 0, "FaxProfile", NULL},
    {TIFFTAG_CODINGMETHODS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "CodingMethods", NULL},
    {TIFFTAG_VERSIONYEAR, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "VersionYear", NULL},
    {TIFFTAG_MODENUMBER, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8,  FIELD_CUSTOM, 1, 0, "ModeNumber", NULL},
    {TIFFTAG_DECODE, -1, -1, TIFF_SRATIONAL, 0, TIFF_SETGET_C16_FLOAT,  FIELD_CUSTOM, 1, 1, "Decode", NULL},
    {TIFFTAG_IMAGEBASECOLOR, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16,  FIELD_CUSTOM, 1, 1, "ImageBaseColor", NULL},
    {TIFFTAG_T82OPTIONS, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "T82Options", NULL},
    {TIFFTAG_STRIPROWCOUNTS, -1, -1, TIFF_LONG, 0, TIFF_SETGET_C16_UINT32,  FIELD_CUSTOM, 1, 1, "StripRowCounts", NULL},
    {TIFFTAG_IMAGELAYER, 2, 2, TIFF_LONG, 0, TIFF_SETGET_C0_UINT32,  FIELD_CUSTOM, 1, 0, "ImageLayer", NULL},
    /* end TIFF/FX tags */
    /* begin pseudo tags */
};

/*
 * EXIF tags  (Version 2.31, July 2016 plus version 2.32 May 2019)
 */
static const TIFFField exifFields[] = {
    {EXIFTAG_EXPOSURETIME, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "ExposureTime", NULL},
    {EXIFTAG_FNUMBER, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "FNumber", NULL},
    {EXIFTAG_EXPOSUREPROGRAM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "ExposureProgram", NULL},
    {EXIFTAG_SPECTRALSENSITIVITY, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "SpectralSensitivity", NULL},
    /* After EXIF 2.2.1 ISOSpeedRatings is named PhotographicSensitivity. In addition, while "Count=Any", only 1 count should be used. */
    {EXIFTAG_ISOSPEEDRATINGS, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16,  FIELD_CUSTOM, 1, 1, "ISOSpeedRatings", NULL},
    {EXIFTAG_OECF, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "OptoelectricConversionFactor", NULL},
    {EXIFTAG_SENSITIVITYTYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "SensitivityType", NULL},
    {EXIFTAG_STANDARDOUTPUTSENSITIVITY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "StandardOutputSensitivity", NULL},
    {EXIFTAG_RECOMMENDEDEXPOSUREINDEX, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "RecommendedExposureIndex", NULL},
    {EXIFTAG_ISOSPEED, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ISOSpeed", NULL},
    {EXIFTAG_ISOSPEEDLATITUDEYYY, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudeyyy", NULL},
    {EXIFTAG_ISOSPEEDLATITUDEZZZ, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "ISOSpeedLatitudezzz", NULL},
    {EXIFTAG_EXIFVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "ExifVersion", NULL},
    {EXIFTAG_DATETIMEORIGINAL, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DateTimeOriginal", NULL},
    {EXIFTAG_DATETIMEDIGITIZED, 20, 20, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DateTimeDigitized", NULL},
    {EXIFTAG_OFFSETTIME, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "OffsetTime", NULL},
    {EXIFTAG_OFFSETTIMEORIGINAL, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "OffsetTimeOriginal", NULL},
    {EXIFTAG_OFFSETTIMEDIGITIZED, 7, 7, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "OffsetTimeDigitized", NULL},
    {EXIFTAG_COMPONENTSCONFIGURATION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "ComponentsConfiguration", NULL},
    {EXIFTAG_COMPRESSEDBITSPERPIXEL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "CompressedBitsPerPixel", NULL},
    {EXIFTAG_SHUTTERSPEEDVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "ShutterSpeedValue", NULL},
    {EXIFTAG_APERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "ApertureValue", NULL},
    {EXIFTAG_BRIGHTNESSVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "BrightnessValue", NULL},
    {EXIFTAG_EXPOSUREBIASVALUE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "ExposureBiasValue", NULL},
    {EXIFTAG_MAXAPERTUREVALUE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "MaxApertureValue", NULL},
    /*--: EXIFTAG_SUBJECTDISTANCE: LibTiff returns value of "-1" if numerator equals 4294967295 (0xFFFFFFFF) to indicate infinite distance!
     *    However, there are two other EXIF tags where numerator indicates a special value and six other cases where the denominator indicates special values,
     *    which are not treated within LibTiff!! */
    {EXIFTAG_SUBJECTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "SubjectDistance", NULL},
    {EXIFTAG_METERINGMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "MeteringMode", NULL},
    {EXIFTAG_LIGHTSOURCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "LightSource", NULL},
    {EXIFTAG_FLASH, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "Flash", NULL},
    {EXIFTAG_FOCALLENGTH, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "FocalLength", NULL},
    {EXIFTAG_SUBJECTAREA, -1, -1, TIFF_SHORT, 0, TIFF_SETGET_C16_UINT16,  FIELD_CUSTOM, 1, 1, "SubjectArea", NULL},
    {EXIFTAG_MAKERNOTE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "MakerNote", NULL},
    {EXIFTAG_USERCOMMENT, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "UserComment", NULL},
    {EXIFTAG_SUBSECTIME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "SubSecTime", NULL},
    {EXIFTAG_SUBSECTIMEORIGINAL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "SubSecTimeOriginal", NULL},
    {EXIFTAG_SUBSECTIMEDIGITIZED, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "SubSecTimeDigitized", NULL},
    {EXIFTAG_TEMPERATURE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "Temperature", NULL},
    {EXIFTAG_HUMIDITY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "Humidity", NULL},
    {EXIFTAG_PRESSURE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "Pressure", NULL},
    {EXIFTAG_WATERDEPTH, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "WaterDepth", NULL},
    {EXIFTAG_ACCELERATION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "Acceleration", NULL},
    {EXIFTAG_CAMERAELEVATIONANGLE, 1, 1, TIFF_SRATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "CameraElevationAngle", NULL},
    {EXIFTAG_FLASHPIXVERSION, 4, 4, TIFF_UNDEFINED, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "FlashpixVersion", NULL},
    {EXIFTAG_COLORSPACE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "ColorSpace", NULL},
    {EXIFTAG_PIXELXDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "PixelXDimension", NULL},
    {EXIFTAG_PIXELYDIMENSION, 1, 1, TIFF_LONG, 0, TIFF_SETGET_UINT32,  FIELD_CUSTOM, 1, 0, "PixelYDimension", NULL},
    {EXIFTAG_RELATEDSOUNDFILE, 13, 13, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "RelatedSoundFile", NULL},
    {EXIFTAG_FLASHENERGY, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "FlashEnergy", NULL},
    {EXIFTAG_SPATIALFREQUENCYRESPONSE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "SpatialFrequencyResponse", NULL},
    {EXIFTAG_FOCALPLANEXRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "FocalPlaneXResolution", NULL},
    {EXIFTAG_FOCALPLANEYRESOLUTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "FocalPlaneYResolution", NULL},
    {EXIFTAG_FOCALPLANERESOLUTIONUNIT, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "FocalPlaneResolutionUnit", NULL},
    {EXIFTAG_SUBJECTLOCATION, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16,  FIELD_CUSTOM, 1, 0, "SubjectLocation", NULL},
    {EXIFTAG_EXPOSUREINDEX, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "ExposureIndex", NULL},
    {EXIFTAG_SENSINGMETHOD, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "SensingMethod", NULL},
    {EXIFTAG_FILESOURCE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8,  FIELD_CUSTOM, 1, 0, "FileSource", NULL},
    {EXIFTAG_SCENETYPE, 1, 1, TIFF_UNDEFINED, 0, TIFF_SETGET_UINT8,  FIELD_CUSTOM, 1, 0, "SceneType", NULL},
    {EXIFTAG_CFAPATTERN, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "CFAPattern", NULL},
    {EXIFTAG_CUSTOMRENDERED, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CustomRendered", NULL},
    {EXIFTAG_EXPOSUREMODE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "ExposureMode", NULL},
    {EXIFTAG_WHITEBALANCE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "WhiteBalance", NULL},
    {EXIFTAG_DIGITALZOOMRATIO, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "DigitalZoomRatio", NULL},
    {EXIFTAG_FOCALLENGTHIN35MMFILM, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "FocalLengthIn35mmFilm", NULL},
    {EXIFTAG_SCENECAPTURETYPE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "SceneCaptureType", NULL},
    {EXIFTAG_GAINCONTROL, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "GainControl", NULL},
    {EXIFTAG_CONTRAST, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "Contrast", NULL},
    {EXIFTAG_SATURATION, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "Saturation", NULL},
    {EXIFTAG_SHARPNESS, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "Sharpness", NULL},
    {EXIFTAG_DEVICESETTINGDESCRIPTION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "DeviceSettingDescription", NULL},
    {EXIFTAG_SUBJECTDISTANCERANGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "SubjectDistanceRange", NULL},
    {EXIFTAG_IMAGEUNIQUEID, 33, 33, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "ImageUniqueID", NULL},
    {EXIFTAG_CAMERAOWNERNAME, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "CameraOwnerName", NULL},
    {EXIFTAG_BODYSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "BodySerialNumber", NULL},
    {EXIFTAG_LENSSPECIFICATION, 4, 4, TIFF_RATIONAL, 0, TIFF_SETGET_C0_FLOAT,  FIELD_CUSTOM, 1, 0, "LensSpecification", NULL},
    {EXIFTAG_LENSMAKE, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "LensMake", NULL},
    {EXIFTAG_LENSMODEL, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "LensModel", NULL},
    {EXIFTAG_LENSSERIALNUMBER, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "LensSerialNumber", NULL},
    {EXIFTAG_GAMMA, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_FLOAT,  FIELD_CUSTOM, 1, 0, "Gamma", NULL},
    {EXIFTAG_COMPOSITEIMAGE, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "CompositeImage", NULL},
    {EXIFTAG_SOURCEIMAGENUMBEROFCOMPOSITEIMAGE, 2, 2, TIFF_SHORT, 0, TIFF_SETGET_C0_UINT16,  FIELD_CUSTOM, 1, 0, "SourceImageNumberOfCompositeImage", NULL},
    {EXIFTAG_SOURCEEXPOSURETIMESOFCOMPOSITEIMAGE, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1,
     "SourceExposureTimesOfCompositeImage", NULL}};
/*
 * EXIF-GPS tags  (Version 2.31, July 2016; nothing changed for version 2.32 May
 * 2019)
 */

static const TIFFField gpsFields[] = {
    /*  For the GPS tag definitions in gpsFields[] the standard definition for Rationals is TIFF_SETGET_DOUBLE and TIFF_SETGET_C0_FLOAT.
     *-- ATTENTION: After the upgrade with Rational2Double, the GPSTAG values can now be written and also read in double precision!
     *              In order to achieve double precision for GPS tags: Standard definitions for GPSTAG is kept to TIFF_SETGET_DOUBLE
     *              and TIFF_SETGET_C0_FLOAT is changed to TIFF_SETGET_C0_DOUBLE.
     */
    {GPSTAG_VERSIONID, 4, 4, TIFF_BYTE, 0, TIFF_SETGET_C0_UINT8,  FIELD_CUSTOM, 1, 0, "VersionID", NULL},
    {GPSTAG_LATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "LatitudeRef", NULL},
    {GPSTAG_LATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE,  FIELD_CUSTOM, 1, 0, "Latitude", NULL},
    {GPSTAG_LONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "LongitudeRef", NULL},
    {GPSTAG_LONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE,  FIELD_CUSTOM, 1, 0, "Longitude", NULL},
    {GPSTAG_ALTITUDEREF, 1, 1, TIFF_BYTE, 0, TIFF_SETGET_UINT8,  FIELD_CUSTOM, 1, 0, "AltitudeRef", NULL},
    {GPSTAG_ALTITUDE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "Altitude", NULL},
    {GPSTAG_TIMESTAMP, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE,  FIELD_CUSTOM, 1, 0, "TimeStamp", NULL},
    {GPSTAG_SATELLITES, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "Satellites", NULL},
    {GPSTAG_STATUS, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "Status", NULL},
    {GPSTAG_MEASUREMODE, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "MeasureMode", NULL},
    {GPSTAG_DOP, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "DOP", NULL},
    {GPSTAG_SPEEDREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "SpeedRef", NULL},
    {GPSTAG_SPEED, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "Speed", NULL},
    {GPSTAG_TRACKREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "TrackRef", NULL},
    {GPSTAG_TRACK, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "Track", NULL},
    {GPSTAG_IMGDIRECTIONREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "ImgDirectionRef", NULL},
    {GPSTAG_IMGDIRECTION, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "ImgDirection", NULL},
    {GPSTAG_MAPDATUM, -1, -1, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "MapDatum", NULL},
    {GPSTAG_DESTLATITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DestLatitudeRef", NULL},
    {GPSTAG_DESTLATITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE,  FIELD_CUSTOM, 1, 0, "DestLatitude", NULL},
    {GPSTAG_DESTLONGITUDEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DestLongitudeRef", NULL},
    {GPSTAG_DESTLONGITUDE, 3, 3, TIFF_RATIONAL, 0, TIFF_SETGET_C0_DOUBLE,  FIELD_CUSTOM, 1, 0, "DestLongitude", NULL},
    {GPSTAG_DESTBEARINGREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DestBearingRef", NULL},
    {GPSTAG_DESTBEARING, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "DestBearing", NULL},
    {GPSTAG_DESTDISTANCEREF, 2, 2, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DestDistanceRef", NULL},
    {GPSTAG_DESTDISTANCE, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "DestDistance", NULL},
    {GPSTAG_PROCESSINGMETHOD, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "ProcessingMethod", NULL},
    {GPSTAG_AREAINFORMATION, -1, -1, TIFF_UNDEFINED, 0, TIFF_SETGET_C16_UINT8,  FIELD_CUSTOM, 1, 1, "AreaInformation", NULL},
    {GPSTAG_DATESTAMP, 11, 11, TIFF_ASCII, 0, TIFF_SETGET_ASCII,  FIELD_CUSTOM, 1, 0, "DateStamp", NULL},
    {GPSTAG_DIFFERENTIAL, 1, 1, TIFF_SHORT, 0, TIFF_SETGET_UINT16,  FIELD_CUSTOM, 1, 0, "Differential", NULL},
    {GPSTAG_GPSHPOSITIONINGERROR, 1, 1, TIFF_RATIONAL, 0, TIFF_SETGET_DOUBLE,  FIELD_CUSTOM, 1, 0, "HorizontalPositioningError", NULL}};
/* clang-format on */ /* was off for better readability of tag comments */

static const TIFFFieldArray tiffFieldArray = {
    tfiatImage, 0, TIFFArrayCount(tiffFields), (TIFFField *)tiffFields};
static const TIFFFieldArray exifFieldArray = {
    tfiatExif, 0, TIFFArrayCount(exifFields), (TIFFField *)exifFields};
static const TIFFFieldArray gpsFieldArray = {
    tfiatGps, 0, TIFFArrayCount(gpsFields), (TIFFField *)gpsFields};

/*
 *  We have our own local lfind() equivalent to avoid subtle differences
 *  in types passed to lfind() on different systems.
 */

static void *td_lfind(const void *key, const void *base, size_t *nmemb,
                      size_t size, int (*compar)(const void *, const void *))
{
    char *element, *end;

    end = (char *)base + *nmemb * size;
    for (element = (char *)base; element < end; element += size)
        if (!compar(key, element)) /* key found */
            return element;

    return NULL;
}

const TIFFFieldArray *_TIFFGetFields(void) { return (&tiffFieldArray); }

const TIFFFieldArray *_TIFFGetExifFields(void) { return (&exifFieldArray); }

const TIFFFieldArray *_TIFFGetGpsFields(void) { return (&gpsFieldArray); }

void _TIFFSetupFields(TIFF *tif, const TIFFFieldArray *fieldarray)
{
    if (tif->tif_fields && tif->tif_nfields > 0)
    {
        uint32_t i;

        for (i = 0; i < tif->tif_nfields; i++)
        {
            TIFFField *fld = tif->tif_fields[i];
            if (fld->field_name != NULL)
            {
                if (fld->field_bit == FIELD_CUSTOM && TIFFFieldIsAnonymous(fld))
                {
                    _TIFFfreeExt(tif, fld->field_name);
                    /* caution: tif_fields[i] must not be the beginning of a
                     * fields-array. Otherwise the following tags are also freed
                     * with the first free().
                     */
                    _TIFFfreeExt(tif, fld);
                }
            }
        }

        _TIFFfreeExt(tif, tif->tif_fields);
        tif->tif_fields = NULL;
        tif->tif_nfields = 0;
    }
    if (!_TIFFMergeFields(tif, fieldarray->fields, fieldarray->count))
    {
        TIFFErrorExtR(tif, "_TIFFSetupFields", "Setting up field info failed");
    }
}

static int tagCompare(const void *a, const void *b)
{
    const TIFFField *ta = *(const TIFFField **)a;
    const TIFFField *tb = *(const TIFFField **)b;
    /* NB: be careful of return values for 16-bit platforms */
    if (ta->field_tag != tb->field_tag)
        return (int)ta->field_tag - (int)tb->field_tag;
    else
        return (ta->field_type == TIFF_ANY)
                   ? 0
                   : ((int)tb->field_type - (int)ta->field_type);
}

static int tagNameCompare(const void *a, const void *b)
{
    const TIFFField *ta = *(const TIFFField **)a;
    const TIFFField *tb = *(const TIFFField **)b;
    int ret = strcmp(ta->field_name, tb->field_name);

    if (ret)
        return ret;
    else
        return (ta->field_type == TIFF_ANY)
                   ? 0
                   : ((int)tb->field_type - (int)ta->field_type);
}

int _TIFFMergeFields(TIFF *tif, const TIFFField info[], uint32_t n)
{
    static const char module[] = "_TIFFMergeFields";
    static const char reason[] = "for fields array";
    /* TIFFField** tp; */
    uint32_t i;

    tif->tif_foundfield = NULL;

    if (tif->tif_fields && tif->tif_nfields > 0)
    {
        tif->tif_fields = (TIFFField **)_TIFFCheckRealloc(
            tif, tif->tif_fields, (tif->tif_nfields + n), sizeof(TIFFField *),
            reason);
    }
    else
    {
        tif->tif_fields =
            (TIFFField **)_TIFFCheckMalloc(tif, n, sizeof(TIFFField *), reason);
    }
    if (!tif->tif_fields)
    {
        TIFFErrorExtR(tif, module, "Failed to allocate fields array");
        return 0;
    }

    /* tp = tif->tif_fields + tif->tif_nfields; */
    for (i = 0; i < n; i++)
    {
        const TIFFField *fip = TIFFFindField(tif, info[i].field_tag, TIFF_ANY);

        /* only add definitions that aren't already present */
        if (!fip)
        {
            tif->tif_fields[tif->tif_nfields] = (TIFFField *)(info + i);
            tif->tif_nfields++;
        }
    }

    /* Sort the field info by tag number */
    qsort(tif->tif_fields, tif->tif_nfields, sizeof(TIFFField *), tagCompare);

    return n;
}

void _TIFFPrintFieldInfo(TIFF *tif, FILE *fd)
{
    uint32_t i;

    fprintf(fd, "%s: \n", tif->tif_name);
    for (i = 0; i < tif->tif_nfields; i++)
    {
        const TIFFField *fip = tif->tif_fields[i];
        fprintf(fd, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n",
                (int)i, (unsigned long)fip->field_tag, fip->field_readcount,
                fip->field_writecount, fip->field_type, fip->field_bit,
                fip->field_oktochange ? "TRUE" : "FALSE",
                fip->field_passcount ? "TRUE" : "FALSE", fip->field_name);
    }
}

/*
 * Return size of TIFFDataType within TIFF-file in bytes
 */
int TIFFDataWidth(TIFFDataType type)
{
    switch (type)
    {
        case 0: /* nothing */
        case TIFF_BYTE:
        case TIFF_ASCII:
        case TIFF_SBYTE:
        case TIFF_UNDEFINED:
            return 1;
        case TIFF_SHORT:
        case TIFF_SSHORT:
            return 2;
        case TIFF_LONG:
        case TIFF_SLONG:
        case TIFF_FLOAT:
        case TIFF_IFD:
            return 4;
        case TIFF_RATIONAL:
        case TIFF_SRATIONAL:
        case TIFF_DOUBLE:
        case TIFF_LONG8:
        case TIFF_SLONG8:
        case TIFF_IFD8:
            return 8;
        default:
            return 0; /* will return 0 for unknown types */
    }
}

/*
 * Return internal storage size of TIFFSetGetFieldType in bytes.
 * TIFFSetField() and TIFFGetField() have to provide the parameter accordingly.
 * Replaces internal functions _TIFFDataSize() and _TIFFSetGetFieldSize()
 * with now extern available function TIFFFieldSetGetSize().
 */
int TIFFFieldSetGetSize(const TIFFField *fip)
{
    /*
     * TIFFSetField() and TIFFGetField() must provide the parameter accordingly
     * to the definition of "set_get_field_type" of the tag definition in
     * dir_info.c. This function returns the data size for that purpose.
     *
     * Furthermore, this data size is also used for the internal storage,
     * even for TIFF_RATIONAL values for FIELD_CUSTOM, which are stored
     * internally as 4-byte float, but some of them should be stored internally
     * as 8-byte double, depending on the "set_get_field_type" _FLOAT_ or
     * _DOUBLE_.
     */
    if (fip == NULL)
        return 0;

    switch (fip->set_get_field_type)
    {
        case TIFF_SETGET_UNDEFINED:
        case TIFF_SETGET_ASCII:
        case TIFF_SETGET_C0_ASCII:
        case TIFF_SETGET_C16_ASCII:
        case TIFF_SETGET_C32_ASCII:
        case TIFF_SETGET_OTHER:
            return 1;
        case TIFF_SETGET_UINT8:
        case TIFF_SETGET_SINT8:
        case TIFF_SETGET_C0_UINT8:
        case TIFF_SETGET_C0_SINT8:
        case TIFF_SETGET_C16_UINT8:
        case TIFF_SETGET_C16_SINT8:
        case TIFF_SETGET_C32_UINT8:
        case TIFF_SETGET_C32_SINT8:
            return 1;
        case TIFF_SETGET_UINT16:
        case TIFF_SETGET_SINT16:
        case TIFF_SETGET_C0_UINT16:
        case TIFF_SETGET_C0_SINT16:
        case TIFF_SETGET_C16_UINT16:
        case TIFF_SETGET_C16_SINT16:
        case TIFF_SETGET_C32_UINT16:
        case TIFF_SETGET_C32_SINT16:
            return 2;
        case TIFF_SETGET_INT:
        case TIFF_SETGET_UINT32:
        case TIFF_SETGET_SINT32:
        case TIFF_SETGET_FLOAT:
        case TIFF_SETGET_UINT16_PAIR:
        case TIFF_SETGET_C0_UINT32:
        case TIFF_SETGET_C0_SINT32:
        case TIFF_SETGET_C0_FLOAT:
        case TIFF_SETGET_C16_UINT32:
        case TIFF_SETGET_C16_SINT32:
        case TIFF_SETGET_C16_FLOAT:
        case TIFF_SETGET_C32_UINT32:
        case TIFF_SETGET_C32_SINT32:
        case TIFF_SETGET_C32_FLOAT:
            return 4;
        case TIFF_SETGET_UINT64:
        case TIFF_SETGET_SINT64:
        case TIFF_SETGET_DOUBLE:
        case TIFF_SETGET_IFD8:
        case TIFF_SETGET_C0_UINT64:
        case TIFF_SETGET_C0_SINT64:
        case TIFF_SETGET_C0_DOUBLE:
        case TIFF_SETGET_C0_IFD8:
        case TIFF_SETGET_C16_UINT64:
        case TIFF_SETGET_C16_SINT64:
        case TIFF_SETGET_C16_DOUBLE:
        case TIFF_SETGET_C16_IFD8:
        case TIFF_SETGET_C32_UINT64:
        case TIFF_SETGET_C32_SINT64:
        case TIFF_SETGET_C32_DOUBLE:
        case TIFF_SETGET_C32_IFD8:
            return 8;
        default:
            return 0;
    }
} /*-- TIFFFieldSetGetSize() --- */

/*
 * Return size of count parameter of TIFFSetField() and TIFFGetField()
 * and also if it is required:  0=none, 2=uint16_t, 4=uint32_t
 */
int TIFFFieldSetGetCountSize(const TIFFField *fip)
{
    if (fip == NULL)
        return 0;

    switch (fip->set_get_field_type)
    {
        case TIFF_SETGET_C16_ASCII:
        case TIFF_SETGET_C16_UINT8:
        case TIFF_SETGET_C16_SINT8:
        case TIFF_SETGET_C16_UINT16:
        case TIFF_SETGET_C16_SINT16:
        case TIFF_SETGET_C16_UINT32:
        case TIFF_SETGET_C16_SINT32:
        case TIFF_SETGET_C16_FLOAT:
        case TIFF_SETGET_C16_UINT64:
        case TIFF_SETGET_C16_SINT64:
        case TIFF_SETGET_C16_DOUBLE:
        case TIFF_SETGET_C16_IFD8:
            return 2;
        case TIFF_SETGET_C32_ASCII:
        case TIFF_SETGET_C32_UINT8:
        case TIFF_SETGET_C32_SINT8:
        case TIFF_SETGET_C32_UINT16:
        case TIFF_SETGET_C32_SINT16:
        case TIFF_SETGET_C32_UINT32:
        case TIFF_SETGET_C32_SINT32:
        case TIFF_SETGET_C32_FLOAT:
        case TIFF_SETGET_C32_UINT64:
        case TIFF_SETGET_C32_SINT64:
        case TIFF_SETGET_C32_DOUBLE:
        case TIFF_SETGET_C32_IFD8:
            return 4;
        default:
            return 0;
    }
} /*-- TIFFFieldSetGetCountSize() --- */

const TIFFField *TIFFFindField(TIFF *tif, uint32_t tag, TIFFDataType dt)
{
    TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, NULL, NULL};
    TIFFField *pkey = &key;
    const TIFFField **ret;
    if (tif->tif_foundfield && tif->tif_foundfield->field_tag == tag &&
        (dt == TIFF_ANY || dt == tif->tif_foundfield->field_type))
        return tif->tif_foundfield;

    /* If we are invoked with no field information, then just return. */
    if (!tif->tif_fields)
        return NULL;

    /* NB: use sorted search (e.g. binary search) */

    key.field_tag = tag;
    key.field_type = dt;

    ret = (const TIFFField **)bsearch(&pkey, tif->tif_fields, tif->tif_nfields,
                                      sizeof(TIFFField *), tagCompare);
    return tif->tif_foundfield = (ret ? *ret : NULL);
}

static const TIFFField *_TIFFFindFieldByName(TIFF *tif, const char *field_name,
                                             TIFFDataType dt)
{
    TIFFField key = {0, 0, 0, TIFF_NOTYPE, 0, 0, 0, 0, 0, NULL, NULL};
    TIFFField *pkey = &key;
    const TIFFField **ret;
    if (tif->tif_foundfield &&
        streq(tif->tif_foundfield->field_name, field_name) &&
        (dt == TIFF_ANY || dt == tif->tif_foundfield->field_type))
        return (tif->tif_foundfield);

    /* If we are invoked with no field information, then just return. */
    if (!tif->tif_fields)
        return NULL;

    /* NB: use linear search since list is sorted by key#, not name */

    key.field_name = (char *)field_name;
    key.field_type = dt;

    ret =
        (const TIFFField **)td_lfind(&pkey, tif->tif_fields, &tif->tif_nfields,
                                     sizeof(TIFFField *), tagNameCompare);

    return tif->tif_foundfield = (ret ? *ret : NULL);
}

const TIFFField *TIFFFieldWithTag(TIFF *tif, uint32_t tag)
{
    const TIFFField *fip = TIFFFindField(tif, tag, TIFF_ANY);
    if (!fip)
    {
        TIFFWarningExtR(tif, "TIFFFieldWithTag", "Warning, unknown tag 0x%x",
                        (unsigned int)tag);
    }
    return (fip);
}

const TIFFField *TIFFFieldWithName(TIFF *tif, const char *field_name)
{
    const TIFFField *fip = _TIFFFindFieldByName(tif, field_name, TIFF_ANY);
    if (!fip)
    {
        TIFFWarningExtR(tif, "TIFFFieldWithName", "Warning, unknown tag %s",
                        field_name);
    }
    return (fip);
}

uint32_t TIFFFieldTag(const TIFFField *fip) { return fip->field_tag; }

const char *TIFFFieldName(const TIFFField *fip) { return fip->field_name; }

TIFFDataType TIFFFieldDataType(const TIFFField *fip) { return fip->field_type; }

int TIFFFieldPassCount(const TIFFField *fip) { return fip->field_passcount; }

int TIFFFieldReadCount(const TIFFField *fip) { return fip->field_readcount; }

int TIFFFieldWriteCount(const TIFFField *fip) { return fip->field_writecount; }

int TIFFFieldIsAnonymous(const TIFFField *fip) { return fip->field_anonymous; }

const TIFFField *_TIFFFindOrRegisterField(TIFF *tif, uint32_t tag,
                                          TIFFDataType dt)

{
    const TIFFField *fld;

    fld = TIFFFindField(tif, tag, dt);
    if (fld == NULL)
    {
        fld = _TIFFCreateAnonField(tif, tag, dt);
        if (fld == NULL || !_TIFFMergeFields(tif, fld, 1))
            return NULL;
    }

    return fld;
}

TIFFField *_TIFFCreateAnonField(TIFF *tif, uint32_t tag,
                                TIFFDataType field_type)
{
    TIFFField *fld;
    (void)tif;

    fld = (TIFFField *)_TIFFmallocExt(tif, sizeof(TIFFField));
    if (fld == NULL)
        return NULL;
    _TIFFmemset(fld, 0, sizeof(TIFFField));

    fld->field_tag = tag;
    fld->field_readcount = TIFF_VARIABLE2;
    fld->field_writecount = TIFF_VARIABLE2;
    fld->field_type = field_type;
    fld->field_anonymous =
        1; /* indicate that this is an anonymous / unknown tag */
    switch (field_type)
    {
        case TIFF_BYTE:
        case TIFF_UNDEFINED:
            fld->set_get_field_type = TIFF_SETGET_C32_UINT8;
            break;
        case TIFF_ASCII:
            fld->set_get_field_type = TIFF_SETGET_C32_ASCII;
            break;
        case TIFF_SHORT:
            fld->set_get_field_type = TIFF_SETGET_C32_UINT16;
            break;
        case TIFF_LONG:
            fld->set_get_field_type = TIFF_SETGET_C32_UINT32;
            break;
        case TIFF_RATIONAL:
        case TIFF_SRATIONAL:
        case TIFF_FLOAT:
            fld->set_get_field_type = TIFF_SETGET_C32_FLOAT;
            break;
        case TIFF_SBYTE:
            fld->set_get_field_type = TIFF_SETGET_C32_SINT8;
            break;
        case TIFF_SSHORT:
            fld->set_get_field_type = TIFF_SETGET_C32_SINT16;
            break;
        case TIFF_SLONG:
            fld->set_get_field_type = TIFF_SETGET_C32_SINT32;
            break;
        case TIFF_DOUBLE:
            fld->set_get_field_type = TIFF_SETGET_C32_DOUBLE;
            break;
        case TIFF_IFD:
        case TIFF_IFD8:
            fld->set_get_field_type = TIFF_SETGET_C32_IFD8;
            break;
        case TIFF_LONG8:
            fld->set_get_field_type = TIFF_SETGET_C32_UINT64;
            break;
        case TIFF_SLONG8:
            fld->set_get_field_type = TIFF_SETGET_C32_SINT64;
            break;
        default:
            fld->set_get_field_type = TIFF_SETGET_UNDEFINED;
            break;
    }
    fld->field_bit = FIELD_CUSTOM;
    fld->field_oktochange = TRUE;
    fld->field_passcount = TRUE;
    fld->field_name = (char *)_TIFFmallocExt(tif, 32);
    if (fld->field_name == NULL)
    {
        _TIFFfreeExt(tif, fld);
        return NULL;
    }
    fld->field_subfields = NULL;

    /*
     * note that this name is a special sign to TIFFClose() and
     * _TIFFSetupFields() to free the field
     * Update:
     *   This special sign is replaced by fld->field_anonymous  flag.
     */
    (void)snprintf(fld->field_name, 32, "Tag %d", (int)tag);

    return fld;
}

/****************************************************************************
 *               O B S O L E T E D    I N T E R F A C E S
 *
 * Don't use this stuff in your applications, it may be removed in the future
 * libtiff versions.
 ****************************************************************************/

static TIFFSetGetFieldType _TIFFSetGetType(TIFFDataType type, short count,
                                           unsigned char passcount)
{
    if (type == TIFF_ASCII && count == TIFF_VARIABLE && passcount == 0)
        return TIFF_SETGET_ASCII;

    else if (count == 1 && passcount == 0)
    {
        switch (type)
        {
            case TIFF_BYTE:
            case TIFF_UNDEFINED:
                return TIFF_SETGET_UINT8;
            case TIFF_ASCII:
                return TIFF_SETGET_ASCII;
            case TIFF_SHORT:
                return TIFF_SETGET_UINT16;
            case TIFF_LONG:
                return TIFF_SETGET_UINT32;
            case TIFF_RATIONAL:
            case TIFF_SRATIONAL:
            case TIFF_FLOAT:
                return TIFF_SETGET_FLOAT;
            case TIFF_SBYTE:
                return TIFF_SETGET_SINT8;
            case TIFF_SSHORT:
                return TIFF_SETGET_SINT16;
            case TIFF_SLONG:
                return TIFF_SETGET_SINT32;
            case TIFF_DOUBLE:
                return TIFF_SETGET_DOUBLE;
            case TIFF_IFD:
            case TIFF_IFD8:
                return TIFF_SETGET_IFD8;
            case TIFF_LONG8:
                return TIFF_SETGET_UINT64;
            case TIFF_SLONG8:
                return TIFF_SETGET_SINT64;
            default:
                return TIFF_SETGET_UNDEFINED;
        }
    }

    else if (count >= 1 && passcount == 0)
    {
        switch (type)
        {
            case TIFF_BYTE:
            case TIFF_UNDEFINED:
                return TIFF_SETGET_C0_UINT8;
            case TIFF_ASCII:
                return TIFF_SETGET_C0_ASCII;
            case TIFF_SHORT:
                return TIFF_SETGET_C0_UINT16;
            case TIFF_LONG:
                return TIFF_SETGET_C0_UINT32;
            case TIFF_RATIONAL:
            case TIFF_SRATIONAL:
            case TIFF_FLOAT:
                return TIFF_SETGET_C0_FLOAT;
            case TIFF_SBYTE:
                return TIFF_SETGET_C0_SINT8;
            case TIFF_SSHORT:
                return TIFF_SETGET_C0_SINT16;
            case TIFF_SLONG:
                return TIFF_SETGET_C0_SINT32;
            case TIFF_DOUBLE:
                return TIFF_SETGET_C0_DOUBLE;
            case TIFF_IFD:
            case TIFF_IFD8:
                return TIFF_SETGET_C0_IFD8;
            case TIFF_LONG8:
                return TIFF_SETGET_C0_UINT64;
            case TIFF_SLONG8:
                return TIFF_SETGET_C0_SINT64;
            default:
                return TIFF_SETGET_UNDEFINED;
        }
    }

    else if (count == TIFF_VARIABLE && passcount == 1)
    {
        switch (type)
        {
            case TIFF_BYTE:
            case TIFF_UNDEFINED:
                return TIFF_SETGET_C16_UINT8;
            case TIFF_ASCII:
                return TIFF_SETGET_C16_ASCII;
            case TIFF_SHORT:
                return TIFF_SETGET_C16_UINT16;
            case TIFF_LONG:
                return TIFF_SETGET_C16_UINT32;
            case TIFF_RATIONAL:
            case TIFF_SRATIONAL:
            case TIFF_FLOAT:
                return TIFF_SETGET_C16_FLOAT;
            case TIFF_SBYTE:
                return TIFF_SETGET_C16_SINT8;
            case TIFF_SSHORT:
                return TIFF_SETGET_C16_SINT16;
            case TIFF_SLONG:
                return TIFF_SETGET_C16_SINT32;
            case TIFF_DOUBLE:
                return TIFF_SETGET_C16_DOUBLE;
            case TIFF_IFD:
            case TIFF_IFD8:
                return TIFF_SETGET_C16_IFD8;
            case TIFF_LONG8:
                return TIFF_SETGET_C16_UINT64;
            case TIFF_SLONG8:
                return TIFF_SETGET_C16_SINT64;
            default:
                return TIFF_SETGET_UNDEFINED;
        }
    }

    else if (count == TIFF_VARIABLE2 && passcount == 1)
    {
        switch (type)
        {
            case TIFF_BYTE:
            case TIFF_UNDEFINED:
                return TIFF_SETGET_C32_UINT8;
            case TIFF_ASCII:
                return TIFF_SETGET_C32_ASCII;
            case TIFF_SHORT:
                return TIFF_SETGET_C32_UINT16;
            case TIFF_LONG:
                return TIFF_SETGET_C32_UINT32;
            case TIFF_RATIONAL:
            case TIFF_SRATIONAL:
            case TIFF_FLOAT:
                return TIFF_SETGET_C32_FLOAT;
            case TIFF_SBYTE:
                return TIFF_SETGET_C32_SINT8;
            case TIFF_SSHORT:
                return TIFF_SETGET_C32_SINT16;
            case TIFF_SLONG:
                return TIFF_SETGET_C32_SINT32;
            case TIFF_DOUBLE:
                return TIFF_SETGET_C32_DOUBLE;
            case TIFF_IFD:
            case TIFF_IFD8:
                return TIFF_SETGET_C32_IFD8;
            case TIFF_LONG8:
                return TIFF_SETGET_C32_UINT64;
            case TIFF_SLONG8:
                return TIFF_SETGET_C32_SINT64;
            default:
                return TIFF_SETGET_UNDEFINED;
        }
    }

    return TIFF_SETGET_UNDEFINED;
}

int TIFFMergeFieldInfo(TIFF *tif, const TIFFFieldInfo info[], uint32_t n)
{
    static const char module[] = "TIFFMergeFieldInfo";
    static const char reason[] = "for fields array";
    TIFFField *tp;
    size_t nfields;
    uint32_t i;

    if (tif->tif_nfieldscompat > 0)
    {
        tif->tif_fieldscompat = (TIFFFieldArray *)_TIFFCheckRealloc(
            tif, tif->tif_fieldscompat, tif->tif_nfieldscompat + 1,
            sizeof(TIFFFieldArray), reason);
    }
    else
    {
        tif->tif_fieldscompat = (TIFFFieldArray *)_TIFFCheckMalloc(
            tif, 1, sizeof(TIFFFieldArray), reason);
    }
    if (!tif->tif_fieldscompat)
    {
        TIFFErrorExtR(tif, module, "Failed to allocate fields array");
        return -1;
    }
    nfields = tif->tif_nfieldscompat++;

    tif->tif_fieldscompat[nfields].type = tfiatOther;
    tif->tif_fieldscompat[nfields].allocated_size = n;
    tif->tif_fieldscompat[nfields].count = n;
    tif->tif_fieldscompat[nfields].fields =
        (TIFFField *)_TIFFCheckMalloc(tif, n, sizeof(TIFFField), reason);
    if (!tif->tif_fieldscompat[nfields].fields)
    {
        TIFFErrorExtR(tif, module, "Failed to allocate fields array");
        return -1;
    }

    tp = tif->tif_fieldscompat[nfields].fields;
    for (i = 0; i < n; i++)
    {
        tp->field_tag = info[i].field_tag;
        if (info[i].field_readcount < TIFF_VARIABLE2 ||
            info[i].field_writecount < TIFF_VARIABLE2)
        {
            /* The fields (field_readcount) and (field_writecount) may use the
             * values TIFF_VARIABLE (-1), TIFF_SPP (-2), TIFF_VARIABLE2 (-3). */
            TIFFErrorExtR(
                tif, module,
                "The value of field_readcount %d and field_writecount %d "
                "must be greater than or equal to -3.",
                info[i].field_readcount, info[i].field_writecount);
            return -1;
        }
        if ((info[i].field_readcount == 0 || info[i].field_writecount == 0) &&
            info[i].field_bit != FIELD_IGNORE)
        {
            /* The fields (field_readcount) and (field_writecount) may only
            be zero for pseudo_tags or ignored tags. */
            TIFFErrorExtR(
                tif, module,
                "The value of field_readcount %d and field_writecount %d "
                "may only be zero for field_bit = 0 (i.e. ignored tags).",
                info[i].field_readcount, info[i].field_writecount);
            return -1;
        }
        tp->field_readcount = info[i].field_readcount;
        tp->field_writecount = info[i].field_writecount;
        tp->field_type = info[i].field_type;
        tp->field_anonymous = 0;
        tp->set_get_field_type =
            _TIFFSetGetType(info[i].field_type, info[i].field_writecount,
                            info[i].field_passcount);
        tp->field_bit = info[i].field_bit;
        tp->field_oktochange = info[i].field_oktochange;
        tp->field_passcount = info[i].field_passcount;
        /* Define an empty static string to be passed as field_name where a NULL
         * pointer is passed in. Otherwise, this will lead to buffer overflow
         * furtheron. */
        if (info[i].field_name == NULL)
        {
            static const char *string_static_empty = "";
            tp->field_name = (char *)string_static_empty;
        }
        else
        {
            tp->field_name = info[i].field_name;
        }
        tp->field_subfields = NULL;
        tp++;
    }

    if (!_TIFFMergeFields(tif, tif->tif_fieldscompat[nfields].fields, n))
    {
        TIFFErrorExtR(tif, module, "Setting up field info failed");
        return -1;
    }

    return 0;
}

int _TIFFCheckFieldIsValidForCodec(TIFF *tif, ttag_t tag)
{
    /* Filter out non-codec specific tags */
    switch (tag)
    {
        /* Shared tags */
        case TIFFTAG_PREDICTOR:
        /* JPEG tags */
        case TIFFTAG_JPEGTABLES:
        /* OJPEG tags */
        case TIFFTAG_JPEGIFOFFSET:
        case TIFFTAG_JPEGIFBYTECOUNT:
        case TIFFTAG_JPEGQTABLES:
        case TIFFTAG_JPEGDCTABLES:
        case TIFFTAG_JPEGACTABLES:
        case TIFFTAG_JPEGPROC:
        case TIFFTAG_JPEGRESTARTINTERVAL:
        /* CCITT* */
        case TIFFTAG_BADFAXLINES:
        case TIFFTAG_CLEANFAXDATA:
        case TIFFTAG_CONSECUTIVEBADFAXLINES:
        case TIFFTAG_GROUP3OPTIONS:
        case TIFFTAG_GROUP4OPTIONS:
        /* LERC */
        case TIFFTAG_LERC_PARAMETERS:
            break;
        default:
            return 1;
    }
    if (!TIFFIsCODECConfigured(tif->tif_dir.td_compression))
    {
        return 0;
    }
    /* Check if codec specific tags are allowed for the current
     * compression scheme (codec) */
    switch (tif->tif_dir.td_compression)
    {
        case COMPRESSION_LZW:
            if (tag == TIFFTAG_PREDICTOR)
                return 1;
            break;
        case COMPRESSION_PACKBITS:
            /* No codec-specific tags */
            break;
        case COMPRESSION_THUNDERSCAN:
            /* No codec-specific tags */
            break;
        case COMPRESSION_NEXT:
            /* No codec-specific tags */
            break;
        case COMPRESSION_JPEG:
            if (tag == TIFFTAG_JPEGTABLES)
                return 1;
            break;
        case COMPRESSION_OJPEG:
            switch (tag)
            {
                case TIFFTAG_JPEGIFOFFSET:
                case TIFFTAG_JPEGIFBYTECOUNT:
                case TIFFTAG_JPEGQTABLES:
                case TIFFTAG_JPEGDCTABLES:
                case TIFFTAG_JPEGACTABLES:
                case TIFFTAG_JPEGPROC:
                case TIFFTAG_JPEGRESTARTINTERVAL:
                    return 1;
            }
            break;
        case COMPRESSION_CCITTRLE:
        case COMPRESSION_CCITTRLEW:
        case COMPRESSION_CCITTFAX3:
        case COMPRESSION_CCITTFAX4:
            switch (tag)
            {
                case TIFFTAG_BADFAXLINES:
                case TIFFTAG_CLEANFAXDATA:
                case TIFFTAG_CONSECUTIVEBADFAXLINES:
                    return 1;
                case TIFFTAG_GROUP3OPTIONS:
                    if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX3)
                        return 1;
                    break;
                case TIFFTAG_GROUP4OPTIONS:
                    if (tif->tif_dir.td_compression == COMPRESSION_CCITTFAX4)
                        return 1;
                    break;
            }
            break;
        case COMPRESSION_JBIG:
            /* No codec-specific tags */
            break;
        case COMPRESSION_DEFLATE:
        case COMPRESSION_ADOBE_DEFLATE:
            if (tag == TIFFTAG_PREDICTOR)
                return 1;
            break;
        case COMPRESSION_PIXARLOG:
            if (tag == TIFFTAG_PREDICTOR)
                return 1;
            break;
        case COMPRESSION_SGILOG:
        case COMPRESSION_SGILOG24:
            /* No codec-specific tags */
            break;
        case COMPRESSION_LZMA:
            if (tag == TIFFTAG_PREDICTOR)
                return 1;
            break;
        case COMPRESSION_ZSTD:
            if (tag == TIFFTAG_PREDICTOR)
                return 1;
            break;
        case COMPRESSION_LERC:
            if (tag == TIFFTAG_LERC_PARAMETERS)
                return 1;
            break;
    }
    return 0;
}
