ReactOS 0.4.16-dev-2574-g474348f
tif_dir.h File Reference
#include "tiff.h"
#include "tiffio.h"
Include dependency graph for tif_dir.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  TIFFTagValue
 
struct  TIFFDirEntry
 
struct  TIFFEntryOffsetAndLength
 
struct  TIFFDirectory
 
struct  _TIFFFieldArray
 
struct  _TIFFField
 

Macros

#define FIELDSET_ITEMS   4
 
#define FIELD_IGNORE   0
 
#define FIELD_IMAGEDIMENSIONS   1
 
#define FIELD_TILEDIMENSIONS   2
 
#define FIELD_RESOLUTION   3
 
#define FIELD_POSITION   4
 
#define FIELD_SUBFILETYPE   5
 
#define FIELD_BITSPERSAMPLE   6
 
#define FIELD_COMPRESSION   7
 
#define FIELD_PHOTOMETRIC   8
 
#define FIELD_THRESHHOLDING   9
 
#define FIELD_FILLORDER   10
 
#define FIELD_ORIENTATION   15
 
#define FIELD_SAMPLESPERPIXEL   16
 
#define FIELD_ROWSPERSTRIP   17
 
#define FIELD_MINSAMPLEVALUE   18
 
#define FIELD_MAXSAMPLEVALUE   19
 
#define FIELD_PLANARCONFIG   20
 
#define FIELD_RESOLUTIONUNIT   22
 
#define FIELD_PAGENUMBER   23
 
#define FIELD_STRIPBYTECOUNTS   24
 
#define FIELD_STRIPOFFSETS   25
 
#define FIELD_COLORMAP   26
 
#define FIELD_EXTRASAMPLES   31
 
#define FIELD_SAMPLEFORMAT   32
 
#define FIELD_SMINSAMPLEVALUE   33
 
#define FIELD_SMAXSAMPLEVALUE   34
 
#define FIELD_IMAGEDEPTH   35
 
#define FIELD_TILEDEPTH   36
 
#define FIELD_HALFTONEHINTS   37
 
#define FIELD_YCBCRSUBSAMPLING   39
 
#define FIELD_YCBCRPOSITIONING   40
 
#define FIELD_REFBLACKWHITE   41
 
#define FIELD_TRANSFERFUNCTION   44
 
#define FIELD_INKNAMES   46
 
#define FIELD_SUBIFD   49
 
#define FIELD_NUMBEROFINKS   50
 
#define FIELD_CODEC   66 /* base of codec-private tags */
 
#define FIELD_PSEUDO   0
 
#define FIELD_LAST   (32 * FIELDSET_ITEMS - 1)
 
#define BITn(n)   (((uint32_t)1L) << ((n)&0x1f))
 
#define BITFIELDn(tif, n)   ((tif)->tif_dir.td_fieldsset[(n) / 32])
 
#define TIFFFieldSet(tif, field)   (BITFIELDn(tif, field) & BITn(field))
 
#define TIFFSetFieldBit(tif, field)   (BITFIELDn(tif, field) |= BITn(field))
 
#define TIFFClrFieldBit(tif, field)   (BITFIELDn(tif, field) &= ~BITn(field))
 
#define FieldSet(fields, f)   (fields[(f) / 32] & BITn(f))
 
#define ResetFieldBit(fields, f)   (fields[(f) / 32] &= ~BITn(f))
 

Enumerations

enum  TIFFSetGetFieldType {
  TIFF_SETGET_UNDEFINED = 0 , TIFF_SETGET_ASCII = 1 , TIFF_SETGET_UINT8 = 2 , TIFF_SETGET_SINT8 = 3 ,
  TIFF_SETGET_UINT16 = 4 , TIFF_SETGET_SINT16 = 5 , TIFF_SETGET_UINT32 = 6 , TIFF_SETGET_SINT32 = 7 ,
  TIFF_SETGET_UINT64 = 8 , TIFF_SETGET_SINT64 = 9 , TIFF_SETGET_FLOAT = 10 , TIFF_SETGET_DOUBLE = 11 ,
  TIFF_SETGET_IFD8 = 12 , TIFF_SETGET_INT = 13 , TIFF_SETGET_UINT16_PAIR = 14 , TIFF_SETGET_C0_ASCII = 15 ,
  TIFF_SETGET_C0_UINT8 = 16 , TIFF_SETGET_C0_SINT8 = 17 , TIFF_SETGET_C0_UINT16 = 18 , TIFF_SETGET_C0_SINT16 = 19 ,
  TIFF_SETGET_C0_UINT32 = 20 , TIFF_SETGET_C0_SINT32 = 21 , TIFF_SETGET_C0_UINT64 = 22 , TIFF_SETGET_C0_SINT64 = 23 ,
  TIFF_SETGET_C0_FLOAT = 24 , TIFF_SETGET_C0_DOUBLE = 25 , TIFF_SETGET_C0_IFD8 = 26 , TIFF_SETGET_C16_ASCII = 27 ,
  TIFF_SETGET_C16_UINT8 = 28 , TIFF_SETGET_C16_SINT8 = 29 , TIFF_SETGET_C16_UINT16 = 30 , TIFF_SETGET_C16_SINT16 = 31 ,
  TIFF_SETGET_C16_UINT32 = 32 , TIFF_SETGET_C16_SINT32 = 33 , TIFF_SETGET_C16_UINT64 = 34 , TIFF_SETGET_C16_SINT64 = 35 ,
  TIFF_SETGET_C16_FLOAT = 36 , TIFF_SETGET_C16_DOUBLE = 37 , TIFF_SETGET_C16_IFD8 = 38 , TIFF_SETGET_C32_ASCII = 39 ,
  TIFF_SETGET_C32_UINT8 = 40 , TIFF_SETGET_C32_SINT8 = 41 , TIFF_SETGET_C32_UINT16 = 42 , TIFF_SETGET_C32_SINT16 = 43 ,
  TIFF_SETGET_C32_UINT32 = 44 , TIFF_SETGET_C32_SINT32 = 45 , TIFF_SETGET_C32_UINT64 = 46 , TIFF_SETGET_C32_SINT64 = 47 ,
  TIFF_SETGET_C32_FLOAT = 48 , TIFF_SETGET_C32_DOUBLE = 49 , TIFF_SETGET_C32_IFD8 = 50 , TIFF_SETGET_OTHER = 51
}
 
enum  TIFFFieldArrayType { tfiatImage , tfiatExif , tfiatGps , tfiatOther }
 

Functions

const TIFFFieldArray_TIFFGetFields (void)
 
const TIFFFieldArray_TIFFGetExifFields (void)
 
const TIFFFieldArray_TIFFGetGpsFields (void)
 
void _TIFFSetupFields (TIFF *tif, const TIFFFieldArray *infoarray)
 
void _TIFFPrintFieldInfo (TIFF *, FILE *)
 
int _TIFFFillStriles (TIFF *)
 
int _TIFFMergeFields (TIFF *, const TIFFField[], uint32_t)
 
const TIFFField_TIFFFindOrRegisterField (TIFF *, uint32_t, TIFFDataType)
 
TIFFField_TIFFCreateAnonField (TIFF *, uint32_t, TIFFDataType)
 
int _TIFFCheckFieldIsValidForCodec (TIFF *tif, ttag_t tag)
 
int _TIFFCheckDirNumberAndOffset (TIFF *tif, tdir_t dirn, uint64_t diroff)
 
int _TIFFGetDirNumberFromOffset (TIFF *tif, uint64_t diroff, tdir_t *dirn)
 
int _TIFFGetOffsetFromDirNumber (TIFF *tif, tdir_t dirn, uint64_t *diroff)
 
int _TIFFRemoveEntryFromDirectoryListByOffset (TIFF *tif, uint64_t diroff)
 

Macro Definition Documentation

◆ BITFIELDn

#define BITFIELDn (   tif,
  n 
)    ((tif)->tif_dir.td_fieldsset[(n) / 32])

Definition at line 235 of file tif_dir.h.

◆ BITn

#define BITn (   n)    (((uint32_t)1L) << ((n)&0x1f))

Definition at line 234 of file tif_dir.h.

◆ FIELD_BITSPERSAMPLE

#define FIELD_BITSPERSAMPLE   6

Definition at line 188 of file tif_dir.h.

◆ FIELD_CODEC

#define FIELD_CODEC   66 /* base of codec-private tags */

Definition at line 220 of file tif_dir.h.

◆ FIELD_COLORMAP

#define FIELD_COLORMAP   26

Definition at line 203 of file tif_dir.h.

◆ FIELD_COMPRESSION

#define FIELD_COMPRESSION   7

Definition at line 189 of file tif_dir.h.

◆ FIELD_EXTRASAMPLES

#define FIELD_EXTRASAMPLES   31

Definition at line 204 of file tif_dir.h.

◆ FIELD_FILLORDER

#define FIELD_FILLORDER   10

Definition at line 192 of file tif_dir.h.

◆ FIELD_HALFTONEHINTS

#define FIELD_HALFTONEHINTS   37

Definition at line 210 of file tif_dir.h.

◆ FIELD_IGNORE

#define FIELD_IGNORE   0

Definition at line 178 of file tif_dir.h.

◆ FIELD_IMAGEDEPTH

#define FIELD_IMAGEDEPTH   35

Definition at line 208 of file tif_dir.h.

◆ FIELD_IMAGEDIMENSIONS

#define FIELD_IMAGEDIMENSIONS   1

Definition at line 181 of file tif_dir.h.

◆ FIELD_INKNAMES

#define FIELD_INKNAMES   46

Definition at line 215 of file tif_dir.h.

◆ FIELD_LAST

#define FIELD_LAST   (32 * FIELDSET_ITEMS - 1)

Definition at line 232 of file tif_dir.h.

◆ FIELD_MAXSAMPLEVALUE

#define FIELD_MAXSAMPLEVALUE   19

Definition at line 197 of file tif_dir.h.

◆ FIELD_MINSAMPLEVALUE

#define FIELD_MINSAMPLEVALUE   18

Definition at line 196 of file tif_dir.h.

◆ FIELD_NUMBEROFINKS

#define FIELD_NUMBEROFINKS   50

Definition at line 217 of file tif_dir.h.

◆ FIELD_ORIENTATION

#define FIELD_ORIENTATION   15

Definition at line 193 of file tif_dir.h.

◆ FIELD_PAGENUMBER

#define FIELD_PAGENUMBER   23

Definition at line 200 of file tif_dir.h.

◆ FIELD_PHOTOMETRIC

#define FIELD_PHOTOMETRIC   8

Definition at line 190 of file tif_dir.h.

◆ FIELD_PLANARCONFIG

#define FIELD_PLANARCONFIG   20

Definition at line 198 of file tif_dir.h.

◆ FIELD_POSITION

#define FIELD_POSITION   4

Definition at line 184 of file tif_dir.h.

◆ FIELD_PSEUDO

#define FIELD_PSEUDO   0

Definition at line 230 of file tif_dir.h.

◆ FIELD_REFBLACKWHITE

#define FIELD_REFBLACKWHITE   41

Definition at line 213 of file tif_dir.h.

◆ FIELD_RESOLUTION

#define FIELD_RESOLUTION   3

Definition at line 183 of file tif_dir.h.

◆ FIELD_RESOLUTIONUNIT

#define FIELD_RESOLUTIONUNIT   22

Definition at line 199 of file tif_dir.h.

◆ FIELD_ROWSPERSTRIP

#define FIELD_ROWSPERSTRIP   17

Definition at line 195 of file tif_dir.h.

◆ FIELD_SAMPLEFORMAT

#define FIELD_SAMPLEFORMAT   32

Definition at line 205 of file tif_dir.h.

◆ FIELD_SAMPLESPERPIXEL

#define FIELD_SAMPLESPERPIXEL   16

Definition at line 194 of file tif_dir.h.

◆ FIELD_SMAXSAMPLEVALUE

#define FIELD_SMAXSAMPLEVALUE   34

Definition at line 207 of file tif_dir.h.

◆ FIELD_SMINSAMPLEVALUE

#define FIELD_SMINSAMPLEVALUE   33

Definition at line 206 of file tif_dir.h.

◆ FIELD_STRIPBYTECOUNTS

#define FIELD_STRIPBYTECOUNTS   24

Definition at line 201 of file tif_dir.h.

◆ FIELD_STRIPOFFSETS

#define FIELD_STRIPOFFSETS   25

Definition at line 202 of file tif_dir.h.

◆ FIELD_SUBFILETYPE

#define FIELD_SUBFILETYPE   5

Definition at line 187 of file tif_dir.h.

◆ FIELD_SUBIFD

#define FIELD_SUBIFD   49

Definition at line 216 of file tif_dir.h.

◆ FIELD_THRESHHOLDING

#define FIELD_THRESHHOLDING   9

Definition at line 191 of file tif_dir.h.

◆ FIELD_TILEDEPTH

#define FIELD_TILEDEPTH   36

Definition at line 209 of file tif_dir.h.

◆ FIELD_TILEDIMENSIONS

#define FIELD_TILEDIMENSIONS   2

Definition at line 182 of file tif_dir.h.

◆ FIELD_TRANSFERFUNCTION

#define FIELD_TRANSFERFUNCTION   44

Definition at line 214 of file tif_dir.h.

◆ FIELD_YCBCRPOSITIONING

#define FIELD_YCBCRPOSITIONING   40

Definition at line 212 of file tif_dir.h.

◆ FIELD_YCBCRSUBSAMPLING

#define FIELD_YCBCRSUBSAMPLING   39

Definition at line 211 of file tif_dir.h.

◆ FieldSet

#define FieldSet (   fields,
  f 
)    (fields[(f) / 32] & BITn(f))

Definition at line 240 of file tif_dir.h.

◆ FIELDSET_ITEMS

#define FIELDSET_ITEMS   4

Definition at line 79 of file tif_dir.h.

◆ ResetFieldBit

#define ResetFieldBit (   fields,
  f 
)    (fields[(f) / 32] &= ~BITn(f))

Definition at line 241 of file tif_dir.h.

◆ TIFFClrFieldBit

#define TIFFClrFieldBit (   tif,
  field 
)    (BITFIELDn(tif, field) &= ~BITn(field))

Definition at line 238 of file tif_dir.h.

◆ TIFFFieldSet

#define TIFFFieldSet (   tif,
  field 
)    (BITFIELDn(tif, field) & BITn(field))

Definition at line 236 of file tif_dir.h.

◆ TIFFSetFieldBit

#define TIFFSetFieldBit (   tif,
  field 
)    (BITFIELDn(tif, field) |= BITn(field))

Definition at line 237 of file tif_dir.h.

Enumeration Type Documentation

◆ TIFFFieldArrayType

Enumerator
tfiatImage 
tfiatExif 
tfiatGps 
tfiatOther 

Definition at line 312 of file tif_dir.h.

313 {
315 tfiatExif,
316 tfiatGps, /* EXIF-GPS fields array type */
TIFFFieldArrayType
Definition: tif_dir.h:313
@ tfiatGps
Definition: tif_dir.h:316
@ tfiatOther
Definition: tif_dir.h:317
@ tfiatImage
Definition: tif_dir.h:314
@ tfiatExif
Definition: tif_dir.h:315

◆ TIFFSetGetFieldType

Enumerator
TIFF_SETGET_UNDEFINED 
TIFF_SETGET_ASCII 
TIFF_SETGET_UINT8 
TIFF_SETGET_SINT8 
TIFF_SETGET_UINT16 
TIFF_SETGET_SINT16 
TIFF_SETGET_UINT32 
TIFF_SETGET_SINT32 
TIFF_SETGET_UINT64 
TIFF_SETGET_SINT64 
TIFF_SETGET_FLOAT 
TIFF_SETGET_DOUBLE 
TIFF_SETGET_IFD8 
TIFF_SETGET_INT 
TIFF_SETGET_UINT16_PAIR 
TIFF_SETGET_C0_ASCII 
TIFF_SETGET_C0_UINT8 
TIFF_SETGET_C0_SINT8 
TIFF_SETGET_C0_UINT16 
TIFF_SETGET_C0_SINT16 
TIFF_SETGET_C0_UINT32 
TIFF_SETGET_C0_SINT32 
TIFF_SETGET_C0_UINT64 
TIFF_SETGET_C0_SINT64 
TIFF_SETGET_C0_FLOAT 
TIFF_SETGET_C0_DOUBLE 
TIFF_SETGET_C0_IFD8 
TIFF_SETGET_C16_ASCII 
TIFF_SETGET_C16_UINT8 
TIFF_SETGET_C16_SINT8 
TIFF_SETGET_C16_UINT16 
TIFF_SETGET_C16_SINT16 
TIFF_SETGET_C16_UINT32 
TIFF_SETGET_C16_SINT32 
TIFF_SETGET_C16_UINT64 
TIFF_SETGET_C16_SINT64 
TIFF_SETGET_C16_FLOAT 
TIFF_SETGET_C16_DOUBLE 
TIFF_SETGET_C16_IFD8 
TIFF_SETGET_C32_ASCII 
TIFF_SETGET_C32_UINT8 
TIFF_SETGET_C32_SINT8 
TIFF_SETGET_C32_UINT16 
TIFF_SETGET_C32_SINT16 
TIFF_SETGET_C32_UINT32 
TIFF_SETGET_C32_SINT32 
TIFF_SETGET_C32_UINT64 
TIFF_SETGET_C32_SINT64 
TIFF_SETGET_C32_FLOAT 
TIFF_SETGET_C32_DOUBLE 
TIFF_SETGET_C32_IFD8 
TIFF_SETGET_OTHER 

Definition at line 243 of file tif_dir.h.

244{
257 TIFF_SETGET_IFD8 = 12,
258 TIFF_SETGET_INT = 13,
TIFFSetGetFieldType
Definition: tif_dir.h:244
@ TIFF_SETGET_C16_UINT8
Definition: tif_dir.h:273
@ TIFF_SETGET_C0_SINT64
Definition: tif_dir.h:268
@ TIFF_SETGET_DOUBLE
Definition: tif_dir.h:256
@ TIFF_SETGET_SINT64
Definition: tif_dir.h:254
@ TIFF_SETGET_C32_SINT32
Definition: tif_dir.h:290
@ TIFF_SETGET_C16_FLOAT
Definition: tif_dir.h:281
@ TIFF_SETGET_UNDEFINED
Definition: tif_dir.h:245
@ TIFF_SETGET_SINT8
Definition: tif_dir.h:248
@ TIFF_SETGET_C32_ASCII
Definition: tif_dir.h:284
@ TIFF_SETGET_INT
Definition: tif_dir.h:258
@ TIFF_SETGET_C32_UINT8
Definition: tif_dir.h:285
@ TIFF_SETGET_IFD8
Definition: tif_dir.h:257
@ TIFF_SETGET_C32_UINT16
Definition: tif_dir.h:287
@ TIFF_SETGET_C16_DOUBLE
Definition: tif_dir.h:282
@ TIFF_SETGET_UINT64
Definition: tif_dir.h:253
@ TIFF_SETGET_C0_UINT32
Definition: tif_dir.h:265
@ TIFF_SETGET_C16_UINT32
Definition: tif_dir.h:277
@ TIFF_SETGET_UINT16_PAIR
Definition: tif_dir.h:259
@ TIFF_SETGET_C32_SINT16
Definition: tif_dir.h:288
@ TIFF_SETGET_C16_UINT16
Definition: tif_dir.h:275
@ TIFF_SETGET_C16_SINT64
Definition: tif_dir.h:280
@ TIFF_SETGET_C0_FLOAT
Definition: tif_dir.h:269
@ TIFF_SETGET_C0_SINT32
Definition: tif_dir.h:266
@ TIFF_SETGET_C16_UINT64
Definition: tif_dir.h:279
@ TIFF_SETGET_C32_UINT32
Definition: tif_dir.h:289
@ TIFF_SETGET_C0_ASCII
Definition: tif_dir.h:260
@ TIFF_SETGET_C32_SINT8
Definition: tif_dir.h:286
@ TIFF_SETGET_UINT16
Definition: tif_dir.h:249
@ TIFF_SETGET_C16_SINT16
Definition: tif_dir.h:276
@ TIFF_SETGET_C0_UINT8
Definition: tif_dir.h:261
@ TIFF_SETGET_ASCII
Definition: tif_dir.h:246
@ TIFF_SETGET_C0_SINT8
Definition: tif_dir.h:262
@ TIFF_SETGET_C16_SINT8
Definition: tif_dir.h:274
@ TIFF_SETGET_OTHER
Definition: tif_dir.h:296
@ TIFF_SETGET_C0_UINT64
Definition: tif_dir.h:267
@ TIFF_SETGET_FLOAT
Definition: tif_dir.h:255
@ TIFF_SETGET_C16_SINT32
Definition: tif_dir.h:278
@ TIFF_SETGET_SINT16
Definition: tif_dir.h:250
@ TIFF_SETGET_C0_SINT16
Definition: tif_dir.h:264
@ TIFF_SETGET_C32_IFD8
Definition: tif_dir.h:295
@ TIFF_SETGET_UINT32
Definition: tif_dir.h:251
@ TIFF_SETGET_C32_SINT64
Definition: tif_dir.h:292
@ TIFF_SETGET_C16_ASCII
Definition: tif_dir.h:272
@ TIFF_SETGET_C32_DOUBLE
Definition: tif_dir.h:294
@ TIFF_SETGET_UINT8
Definition: tif_dir.h:247
@ TIFF_SETGET_C0_UINT16
Definition: tif_dir.h:263
@ TIFF_SETGET_C32_UINT64
Definition: tif_dir.h:291
@ TIFF_SETGET_C0_IFD8
Definition: tif_dir.h:271
@ TIFF_SETGET_C16_IFD8
Definition: tif_dir.h:283
@ TIFF_SETGET_SINT32
Definition: tif_dir.h:252
@ TIFF_SETGET_C32_FLOAT
Definition: tif_dir.h:293
@ TIFF_SETGET_C0_DOUBLE
Definition: tif_dir.h:270

Function Documentation

◆ _TIFFCheckDirNumberAndOffset()

int _TIFFCheckDirNumberAndOffset ( TIFF tif,
tdir_t  dirn,
uint64_t  diroff 
)

Definition at line 5665 of file tif_dirread.c.

5666{
5667 if (diroff == 0) /* no more directories */
5668 return 0;
5669
5671 {
5675 {
5676 TIFFErrorExtR(tif, "_TIFFCheckDirNumberAndOffset",
5677 "Not enough memory");
5678 return 1;
5679 }
5680 }
5681
5683 {
5684 /* No free callback for this map, as it shares the same items as
5685 * tif->tif_map_dir_offset_to_number. */
5689 {
5690 TIFFErrorExtR(tif, "_TIFFCheckDirNumberAndOffset",
5691 "Not enough memory");
5692 return 1;
5693 }
5694 }
5695
5696 /* Check if offset is already in the list:
5697 * - yes: check, if offset is at the same IFD number - if not, it is an IFD
5698 * loop
5699 * - no: add to list or update offset at that IFD number
5700 */
5702 entry.offset = diroff;
5703 entry.dirNumber = dirn;
5704
5705 TIFFOffsetAndDirNumber *foundEntry =
5708 if (foundEntry)
5709 {
5710 if (foundEntry->dirNumber == dirn)
5711 {
5712 return 1;
5713 }
5714 else
5715 {
5716 TIFFWarningExtR(tif, "_TIFFCheckDirNumberAndOffset",
5717 "TIFF directory %d has IFD looping to directory %u "
5718 "at offset 0x%" PRIx64 " (%" PRIu64 ")",
5719 (int)dirn - 1, foundEntry->dirNumber, diroff,
5720 diroff);
5721 return 0;
5722 }
5723 }
5724
5725 /* Check if offset of an IFD has been changed and update offset of that IFD
5726 * number. */
5729 if (foundEntry)
5730 {
5731 if (foundEntry->offset != diroff)
5732 {
5733 TIFFOffsetAndDirNumber entryOld;
5734 entryOld.offset = foundEntry->offset;
5735 entryOld.dirNumber = dirn;
5736 /* We must remove first from tif_map_dir_number_to_offset as the */
5737 /* entry is owned (and thus freed) by */
5738 /* tif_map_dir_offset_to_number */
5739 TIFFOffsetAndDirNumber *foundEntryOld =
5741 tif->tif_map_dir_number_to_offset, &entryOld);
5742 if (foundEntryOld)
5743 {
5745 foundEntryOld);
5746 }
5747 foundEntryOld = (TIFFOffsetAndDirNumber *)TIFFHashSetLookup(
5748 tif->tif_map_dir_offset_to_number, &entryOld);
5749 if (foundEntryOld)
5750 {
5752 foundEntryOld);
5753 }
5754
5756 sizeof(TIFFOffsetAndDirNumber));
5757 if (entryPtr == NULL)
5758 {
5759 return 0;
5760 }
5761
5762 /* Add IFD offset and dirn to IFD directory list */
5763 *entryPtr = entry;
5764
5766 {
5768 tif, "_TIFFCheckDirNumberAndOffset",
5769 "Insertion in tif_map_dir_offset_to_number failed");
5770 return 0;
5771 }
5773 {
5775 tif, "_TIFFCheckDirNumberAndOffset",
5776 "Insertion in tif_map_dir_number_to_offset failed");
5777 return 0;
5778 }
5779 }
5780 return 1;
5781 }
5782
5783 /* Arbitrary (hopefully big enough) limit */
5786 {
5787 TIFFErrorExtR(tif, "_TIFFCheckDirNumberAndOffset",
5788 "Cannot handle more than %u TIFF directories",
5790 return 0;
5791 }
5792
5793 TIFFOffsetAndDirNumber *entryPtr =
5795 if (entryPtr == NULL)
5796 {
5797 TIFFErrorExtR(tif, "_TIFFCheckDirNumberAndOffset",
5798 "malloc(sizeof(TIFFOffsetAndDirNumber)) failed");
5799 return 0;
5800 }
5801
5802 /* Add IFD offset and dirn to IFD directory list */
5803 *entryPtr = entry;
5804
5806 {
5807 TIFFErrorExtR(tif, "_TIFFCheckDirNumberAndOffset",
5808 "Insertion in tif_map_dir_offset_to_number failed");
5809 return 0;
5810 }
5812 {
5813 TIFFErrorExtR(tif, "_TIFFCheckDirNumberAndOffset",
5814 "Insertion in tif_map_dir_number_to_offset failed");
5815 return 0;
5816 }
5817
5818 return 1;
5819} /* --- _TIFFCheckDirNumberAndOffset() ---*/
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
#define PRIx64
Definition: inttypes.h:29
#define PRIu64
Definition: inttypes.h:28
uint32_t entry
Definition: isohybrid.c:63
TIFFHashSet * tif_map_dir_number_to_offset
Definition: tiffiop.h:154
TIFFHashSet * tif_map_dir_offset_to_number
Definition: tiffiop.h:153
#define TIFF_MAX_DIR_COUNT
Definition: tif_config.h:130
static bool equalFuncNumberToOffset(const void *elt1, const void *elt2)
Definition: tif_dirread.c:5646
static unsigned long hashFuncOffsetToNumber(const void *elt)
Definition: tif_dirread.c:5621
static bool equalFuncOffsetToNumber(const void *elt1, const void *elt2)
Definition: tif_dirread.c:5630
static unsigned long hashFuncNumberToOffset(const void *elt)
Definition: tif_dirread.c:5639
void TIFFErrorExtR(TIFF *tif, const char *module, const char *fmt,...)
Definition: tif_error.c:107
void * TIFFHashSetLookup(TIFFHashSet *set, const void *elt)
Definition: tif_hash_set.c:502
bool TIFFHashSetInsert(TIFFHashSet *set, void *elt)
Definition: tif_hash_set.c:440
bool TIFFHashSetRemove(TIFFHashSet *set, const void *elt)
Definition: tif_hash_set.c:577
int TIFFHashSetSize(const TIFFHashSet *set)
Definition: tif_hash_set.c:180
TIFFHashSet * TIFFHashSetNew(TIFFHashSetHashFunc fnHashFunc, TIFFHashSetEqualFunc fnEqualFunc, TIFFHashSetFreeEltFunc fnFreeEltFunc)
Definition: tif_hash_set.c:138
void TIFFWarningExtR(TIFF *tif, const char *module, const char *fmt,...)
Definition: tif_warning.c:80

Referenced by TIFFAdvanceDirectory(), TIFFReadDirectory(), TIFFSetSubDirectory(), and TIFFWriteDirectorySec().

◆ _TIFFCheckFieldIsValidForCodec()

int _TIFFCheckFieldIsValidForCodec ( TIFF tif,
ttag_t  tag 
)

Definition at line 1247 of file tif_dirinfo.c.

1248{
1249 /* Filter out non-codec specific tags */
1250 switch (tag)
1251 {
1252 /* Shared tags */
1253 case TIFFTAG_PREDICTOR:
1254 /* JPEG tags */
1255 case TIFFTAG_JPEGTABLES:
1256 /* OJPEG tags */
1262 case TIFFTAG_JPEGPROC:
1264 /* CCITT* */
1270 /* LERC */
1272 break;
1273 default:
1274 return 1;
1275 }
1277 {
1278 return 0;
1279 }
1280 /* Check if codec specific tags are allowed for the current
1281 * compression scheme (codec) */
1282 switch (tif->tif_dir.td_compression)
1283 {
1284 case COMPRESSION_LZW:
1285 if (tag == TIFFTAG_PREDICTOR)
1286 return 1;
1287 break;
1289 /* No codec-specific tags */
1290 break;
1292 /* No codec-specific tags */
1293 break;
1294 case COMPRESSION_NEXT:
1295 /* No codec-specific tags */
1296 break;
1297 case COMPRESSION_JPEG:
1298 if (tag == TIFFTAG_JPEGTABLES)
1299 return 1;
1300 break;
1301 case COMPRESSION_OJPEG:
1302 switch (tag)
1303 {
1309 case TIFFTAG_JPEGPROC:
1311 return 1;
1312 }
1313 break;
1318 switch (tag)
1319 {
1323 return 1;
1326 return 1;
1327 break;
1330 return 1;
1331 break;
1332 }
1333 break;
1334 case COMPRESSION_JBIG:
1335 /* No codec-specific tags */
1336 break;
1339 if (tag == TIFFTAG_PREDICTOR)
1340 return 1;
1341 break;
1343 if (tag == TIFFTAG_PREDICTOR)
1344 return 1;
1345 break;
1346 case COMPRESSION_SGILOG:
1348 /* No codec-specific tags */
1349 break;
1350 case COMPRESSION_LZMA:
1351 if (tag == TIFFTAG_PREDICTOR)
1352 return 1;
1353 break;
1354 case COMPRESSION_ZSTD:
1355 if (tag == TIFFTAG_PREDICTOR)
1356 return 1;
1357 break;
1358 case COMPRESSION_LERC:
1360 return 1;
1361 break;
1362 }
1363 return 0;
1364}
uint16_t td_compression
Definition: tif_dir.h:88
Definition: ecma_167.h:138
TIFFDirectory tif_dir
Definition: tiffiop.h:157
int TIFFIsCODECConfigured(uint16_t scheme)
Definition: tif_codec.c:146
#define COMPRESSION_PIXARLOG
Definition: tiff.h:204
#define COMPRESSION_ZSTD
Definition: tiff.h:216
#define COMPRESSION_CCITTFAX3
Definition: tiff.h:184
#define COMPRESSION_CCITTRLE
Definition: tiff.h:183
#define TIFFTAG_JPEGDCTABLES
Definition: tiff.h:385
#define TIFFTAG_GROUP3OPTIONS
Definition: tiff.h:279
#define TIFFTAG_GROUP4OPTIONS
Definition: tiff.h:284
#define COMPRESSION_OJPEG
Definition: tiff.h:189
#define TIFFTAG_CONSECUTIVEBADFAXLINES
Definition: tiff.h:320
#define COMPRESSION_DEFLATE
Definition: tiff.h:205
#define TIFFTAG_JPEGQTABLES
Definition: tiff.h:384
#define COMPRESSION_SGILOG
Definition: tiff.h:210
#define TIFFTAG_LERC_PARAMETERS
Definition: tiff.h:502
#define COMPRESSION_CCITTRLEW
Definition: tiff.h:194
#define TIFFTAG_JPEGIFBYTECOUNT
Definition: tiff.h:380
#define TIFFTAG_JPEGACTABLES
Definition: tiff.h:386
#define TIFFTAG_JPEGRESTARTINTERVAL
Definition: tiff.h:381
#define COMPRESSION_LZMA
Definition: tiff.h:215
#define COMPRESSION_JBIG
Definition: tiff.h:209
#define COMPRESSION_LERC
Definition: tiff.h:213
#define COMPRESSION_ADOBE_DEFLATE
Definition: tiff.h:206
#define COMPRESSION_PACKBITS
Definition: tiff.h:195
#define COMPRESSION_LZW
Definition: tiff.h:188
#define TIFFTAG_JPEGIFOFFSET
Definition: tiff.h:379
#define TIFFTAG_CLEANFAXDATA
Definition: tiff.h:316
#define COMPRESSION_SGILOG24
Definition: tiff.h:211
#define TIFFTAG_BADFAXLINES
Definition: tiff.h:315
#define TIFFTAG_JPEGPROC
Definition: tiff.h:376
#define COMPRESSION_CCITTFAX4
Definition: tiff.h:186
#define COMPRESSION_NEXT
Definition: tiff.h:193
#define TIFFTAG_PREDICTOR
Definition: tiff.h:303
#define TIFFTAG_JPEGTABLES
Definition: tiff.h:346
#define COMPRESSION_JPEG
Definition: tiff.h:190
#define COMPRESSION_THUNDERSCAN
Definition: tiff.h:196

Referenced by TIFFReadDirectory().

◆ _TIFFCreateAnonField()

TIFFField * _TIFFCreateAnonField ( TIFF tif,
uint32_t  tag,
TIFFDataType  field_type 
)

Definition at line 898 of file tif_dirinfo.c.

900{
901 TIFFField *fld;
902 (void)tif;
903
904 fld = (TIFFField *)_TIFFmallocExt(tif, sizeof(TIFFField));
905 if (fld == NULL)
906 return NULL;
907 _TIFFmemset(fld, 0, sizeof(TIFFField));
908
909 fld->field_tag = tag;
912 fld->field_type = field_type;
913 fld->field_anonymous =
914 1; /* indicate that this is an anonymous / unknown tag */
915 switch (field_type)
916 {
917 case TIFF_BYTE:
918 case TIFF_UNDEFINED:
920 break;
921 case TIFF_ASCII:
923 break;
924 case TIFF_SHORT:
926 break;
927 case TIFF_LONG:
929 break;
930 case TIFF_RATIONAL:
931 case TIFF_SRATIONAL:
932 case TIFF_FLOAT:
934 break;
935 case TIFF_SBYTE:
937 break;
938 case TIFF_SSHORT:
940 break;
941 case TIFF_SLONG:
943 break;
944 case TIFF_DOUBLE:
946 break;
947 case TIFF_IFD:
948 case TIFF_IFD8:
950 break;
951 case TIFF_LONG8:
953 break;
954 case TIFF_SLONG8:
956 break;
957 default:
959 break;
960 }
961 fld->field_bit = FIELD_CUSTOM;
962 fld->field_oktochange = TRUE;
963 fld->field_passcount = TRUE;
964 fld->field_name = (char *)_TIFFmallocExt(tif, 32);
965 if (fld->field_name == NULL)
966 {
967 _TIFFfreeExt(tif, fld);
968 return NULL;
969 }
970 fld->field_subfields = NULL;
971
972 /*
973 * note that this name is a special sign to TIFFClose() and
974 * _TIFFSetupFields() to free the field
975 * Update:
976 * This special sign is replaced by fld->field_anonymous flag.
977 */
978 (void)snprintf(fld->field_name, 32, "Tag %d", (int)tag);
979
980 return fld;
981}
#define TRUE
Definition: types.h:120
unsigned char field_oktochange
Definition: tif_dir.h:341
TIFFDataType field_type
Definition: tif_dir.h:335
unsigned char field_passcount
Definition: tif_dir.h:342
char * field_name
Definition: tif_dir.h:343
unsigned short field_bit
Definition: tif_dir.h:340
uint32_t field_anonymous
Definition: tif_dir.h:336
uint32_t field_tag
Definition: tif_dir.h:332
short field_readcount
Definition: tif_dir.h:333
TIFFSetGetFieldType set_get_field_type
Definition: tif_dir.h:338
TIFFFieldArray * field_subfields
Definition: tif_dir.h:344
short field_writecount
Definition: tif_dir.h:334
void _TIFFfreeExt(TIFF *tif, void *p)
Definition: tif_open.c:275
void * _TIFFmallocExt(TIFF *tif, tmsize_t s)
Definition: tif_open.c:173
void _TIFFmemset(void *p, int v, tmsize_t c)
Definition: tif_unix.c:353
@ TIFF_SSHORT
Definition: tiff.h:155
@ TIFF_SLONG
Definition: tiff.h:156
@ TIFF_BYTE
Definition: tiff.h:148
@ TIFF_SBYTE
Definition: tiff.h:153
@ TIFF_IFD
Definition: tiff.h:160
@ TIFF_SHORT
Definition: tiff.h:150
@ TIFF_UNDEFINED
Definition: tiff.h:154
@ TIFF_LONG
Definition: tiff.h:151
@ TIFF_SLONG8
Definition: tiff.h:162
@ TIFF_LONG8
Definition: tiff.h:161
@ TIFF_ASCII
Definition: tiff.h:149
@ TIFF_FLOAT
Definition: tiff.h:158
@ TIFF_DOUBLE
Definition: tiff.h:159
@ TIFF_IFD8
Definition: tiff.h:163
@ TIFF_SRATIONAL
Definition: tiff.h:157
@ TIFF_RATIONAL
Definition: tiff.h:152
#define FIELD_CUSTOM
Definition: tiffio.h:346
#define TIFF_VARIABLE2
Definition: tiffio.h:344
#define snprintf
Definition: wintirpc.h:48

Referenced by _TIFFFindOrRegisterField(), TIFFReadCustomDirectory(), and TIFFReadDirectory().

◆ _TIFFFillStriles()

int _TIFFFillStriles ( TIFF tif)

Definition at line 8381 of file tif_dirread.c.

8381{ return _TIFFFillStrilesInternal(tif, 1); }
static int _TIFFFillStrilesInternal(TIFF *tif, int loadStripByteCount)
Definition: tif_dirread.c:8383

Referenced by _TIFFGetStrileOffsetOrByteCountValue(), _TIFFVGetField(), TIFFReadDirectory(), TIFFWriteCheck(), and TIFFWriteDirectorySec().

◆ _TIFFFindOrRegisterField()

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

Definition at line 881 of file tif_dirinfo.c.

884{
885 const TIFFField *fld;
886
887 fld = TIFFFindField(tif, tag, dt);
888 if (fld == NULL)
889 {
890 fld = _TIFFCreateAnonField(tif, tag, dt);
891 if (fld == NULL || !_TIFFMergeFields(tif, fld, 1))
892 return NULL;
893 }
894
895 return fld;
896}
int _TIFFMergeFields(TIFF *tif, const TIFFField info[], uint32_t n)
Definition: tif_dirinfo.c:573
TIFFField * _TIFFCreateAnonField(TIFF *tif, uint32_t tag, TIFFDataType field_type)
Definition: tif_dirinfo.c:898
const TIFFField * TIFFFindField(TIFF *tif, uint32_t tag, TIFFDataType dt)
Definition: tif_dirinfo.c:795

◆ _TIFFGetDirNumberFromOffset()

int _TIFFGetDirNumberFromOffset ( TIFF tif,
uint64_t  diroff,
tdir_t dirn 
)

Definition at line 5828 of file tif_dirread.c.

5829{
5830 if (diroff == 0) /* no more directories */
5831 return 0;
5832
5833 /* Check if offset is already in the list and return matching directory
5834 * number. Otherwise update IFD list using TIFFNumberOfDirectories() and
5835 * search again in IFD list.
5836 */
5838 return 0;
5840 entry.offset = diroff;
5841 entry.dirNumber = 0; /* not used */
5842
5843 TIFFOffsetAndDirNumber *foundEntry =
5846 if (foundEntry)
5847 {
5848 *dirn = foundEntry->dirNumber;
5849 return 1;
5850 }
5851
5852 /* This updates the directory list for all main-IFDs in the file. */
5854
5857 if (foundEntry)
5858 {
5859 *dirn = foundEntry->dirNumber;
5860 return 1;
5861 }
5862
5863 return 0;
5864} /*--- _TIFFGetDirNumberFromOffset() ---*/
tdir_t TIFFNumberOfDirectories(TIFF *tif)
Definition: tif_dir.c:2032

Referenced by TIFFLinkDirectory(), and TIFFSetSubDirectory().

◆ _TIFFGetExifFields()

const TIFFFieldArray * _TIFFGetExifFields ( void  )

Definition at line 509 of file tif_dirinfo.c.

509{ return (&exifFieldArray); }
static const TIFFFieldArray exifFieldArray
Definition: tif_dirinfo.c:49

Referenced by TIFFCreateEXIFDirectory(), and TIFFReadEXIFDirectory().

◆ _TIFFGetFields()

const TIFFFieldArray * _TIFFGetFields ( void  )

Definition at line 507 of file tif_dirinfo.c.

507{ return (&tiffFieldArray); }
static const TIFFFieldArray tiffFieldArray
Definition: tif_dirinfo.c:48

Referenced by TIFFDefaultDirectory().

◆ _TIFFGetGpsFields()

const TIFFFieldArray * _TIFFGetGpsFields ( void  )

Definition at line 511 of file tif_dirinfo.c.

511{ return (&gpsFieldArray); }
static const TIFFFieldArray gpsFieldArray
Definition: tif_dirinfo.c:50

Referenced by TIFFCreateGPSDirectory(), and TIFFReadGPSDirectory().

◆ _TIFFGetOffsetFromDirNumber()

int _TIFFGetOffsetFromDirNumber ( TIFF tif,
tdir_t  dirn,
uint64_t diroff 
)

Definition at line 5873 of file tif_dirread.c.

5874{
5875
5877 return 0;
5879 entry.offset = 0; /* not used */
5880 entry.dirNumber = dirn;
5881
5882 TIFFOffsetAndDirNumber *foundEntry =
5885 if (foundEntry)
5886 {
5887 *diroff = foundEntry->offset;
5888 return 1;
5889 }
5890
5891 return 0;
5892} /*--- _TIFFGetOffsetFromDirNumber() ---*/

Referenced by TIFFSetDirectory().

◆ _TIFFMergeFields()

int _TIFFMergeFields ( TIFF tif,
const  TIFFField[],
uint32_t  n 
)

Definition at line 573 of file tif_dirinfo.c.

574{
575 static const char module[] = "_TIFFMergeFields";
576 static const char reason[] = "for fields array";
577 /* TIFFField** tp; */
578 uint32_t i;
579
580 tif->tif_foundfield = NULL;
581
582 if (tif->tif_fields && tif->tif_nfields > 0)
583 {
585 tif, tif->tif_fields, (tif->tif_nfields + n), sizeof(TIFFField *),
586 reason);
587 }
588 else
589 {
590 tif->tif_fields =
591 (TIFFField **)_TIFFCheckMalloc(tif, n, sizeof(TIFFField *), reason);
592 }
593 if (!tif->tif_fields)
594 {
595 TIFFErrorExtR(tif, module, "Failed to allocate fields array");
596 return 0;
597 }
598
599 /* tp = tif->tif_fields + tif->tif_nfields; */
600 for (i = 0; i < n; i++)
601 {
602 const TIFFField *fip = TIFFFindField(tif, info[i].field_tag, TIFF_ANY);
603
604 /* only add definitions that aren't already present */
605 if (!fip)
606 {
607 tif->tif_fields[tif->tif_nfields] = (TIFFField *)(info + i);
608 tif->tif_nfields++;
609 }
610 }
611
612 /* Sort the field info by tag number */
613 qsort(tif->tif_fields, tif->tif_nfields, sizeof(TIFFField *), tagCompare);
614
615 return n;
616}
UINT32 uint32_t
Definition: types.h:75
static WCHAR reason[MAX_STRING_RESOURCE_LEN]
Definition: object.c:1904
_ACRTIMP void __cdecl qsort(void *, size_t, size_t, int(__cdecl *)(const void *, const void *))
GLdouble n
Definition: glext.h:7729
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
const TIFFField * tif_foundfield
Definition: tiffiop.h:243
size_t tif_nfields
Definition: tiffiop.h:242
TIFFField ** tif_fields
Definition: tiffiop.h:241
void * _TIFFCheckRealloc(TIFF *tif, void *buffer, tmsize_t nmemb, tmsize_t elem_size, const char *what)
Definition: tif_aux.c:97
void * _TIFFCheckMalloc(TIFF *tif, tmsize_t nmemb, tmsize_t elem_size, const char *what)
Definition: tif_aux.c:122
static int tagCompare(const void *a, const void *b)
Definition: tif_dirinfo.c:546
#define TIFF_ANY
Definition: tiffio.h:341

Referenced by _TIFFFindOrRegisterField(), _TIFFSetupFields(), TIFFMergeFieldInfo(), TIFFPredictorInit(), TIFFReadCustomDirectory(), and TIFFReadDirectory().

◆ _TIFFPrintFieldInfo()

void _TIFFPrintFieldInfo ( TIFF tif,
FILE fd 
)

Definition at line 618 of file tif_dirinfo.c.

619{
620 uint32_t i;
621
622 fprintf(fd, "%s: \n", tif->tif_name);
623 for (i = 0; i < tif->tif_nfields; i++)
624 {
625 const TIFFField *fip = tif->tif_fields[i];
626 fprintf(fd, "field[%2d] %5lu, %2d, %2d, %d, %2d, %5s, %5s, %s\n",
627 (int)i, (unsigned long)fip->field_tag, fip->field_readcount,
628 fip->field_writecount, fip->field_type, fip->field_bit,
629 fip->field_oktochange ? "TRUE" : "FALSE",
630 fip->field_passcount ? "TRUE" : "FALSE", fip->field_name);
631 }
632}
int WINAPIV fprintf(FILE *file, const char *format,...)
Definition: file.c:5549
static int fd
Definition: io.c:51
char * tif_name
Definition: tiffiop.h:114

◆ _TIFFRemoveEntryFromDirectoryListByOffset()

int _TIFFRemoveEntryFromDirectoryListByOffset ( TIFF tif,
uint64_t  diroff 
)

Definition at line 5900 of file tif_dirread.c.

5901{
5903 return 1;
5904
5905 TIFFOffsetAndDirNumber entryOld;
5906 entryOld.offset = diroff;
5907 entryOld.dirNumber = 0;
5908 /* We must remove first from tif_map_dir_number_to_offset as the
5909 * entry is owned (and thus freed) by tif_map_dir_offset_to_number.
5910 * However, we need firstly to find the directory number from offset. */
5911
5912 TIFFOffsetAndDirNumber *foundEntryOldOff =
5914 tif->tif_map_dir_offset_to_number, &entryOld);
5915 if (foundEntryOldOff)
5916 {
5917 entryOld.dirNumber = foundEntryOldOff->dirNumber;
5919 {
5920 TIFFOffsetAndDirNumber *foundEntryOldDir =
5922 tif->tif_map_dir_number_to_offset, &entryOld);
5923 if (foundEntryOldDir)
5924 {
5926 foundEntryOldDir);
5928 foundEntryOldOff);
5929 return 1;
5930 }
5931 }
5932 else
5933 {
5934 TIFFErrorExtR(tif, "_TIFFRemoveEntryFromDirectoryListByOffset",
5935 "Unexpectedly tif_map_dir_number_to_offset is "
5936 "missing but tif_map_dir_offset_to_number exists.");
5937 return 0;
5938 }
5939 }
5940 return 1;
5941} /*--- _TIFFRemoveEntryFromDirectoryListByOffset() ---*/

Referenced by TIFFRewriteDirectorySec().

◆ _TIFFSetupFields()

void _TIFFSetupFields ( TIFF tif,
const TIFFFieldArray infoarray 
)

Definition at line 513 of file tif_dirinfo.c.

514{
515 if (tif->tif_fields && tif->tif_nfields > 0)
516 {
517 uint32_t i;
518
519 for (i = 0; i < tif->tif_nfields; i++)
520 {
521 TIFFField *fld = tif->tif_fields[i];
522 if (fld->field_name != NULL)
523 {
524 if (fld->field_bit == FIELD_CUSTOM && TIFFFieldIsAnonymous(fld))
525 {
526 _TIFFfreeExt(tif, fld->field_name);
527 /* caution: tif_fields[i] must not be the beginning of a
528 * fields-array. Otherwise the following tags are also freed
529 * with the first free().
530 */
531 _TIFFfreeExt(tif, fld);
532 }
533 }
534 }
535
536 _TIFFfreeExt(tif, tif->tif_fields);
537 tif->tif_fields = NULL;
538 tif->tif_nfields = 0;
539 }
540 if (!_TIFFMergeFields(tif, fieldarray->fields, fieldarray->count))
541 {
542 TIFFErrorExtR(tif, "_TIFFSetupFields", "Setting up field info failed");
543 }
544}
int TIFFFieldIsAnonymous(const TIFFField *fip)
Definition: tif_dirinfo.c:879

Referenced by TIFFCreateCustomDirectory(), TIFFDefaultDirectory(), and TIFFReadCustomDirectory().