# TIFFStrileQuery

## Synopsis

    #include <tiffio.h>

uint64_t TIFFGetStrileByteCount(TIFF *tif, uint32_t strile);

uint64_t TIFFGetStrileOffset(TIFF *tif, uint32_t strile);

uint64_t TIFFGetStrileByteCountWithErr(TIFF *tif, uint32_t strile, int *pbErr);

uint64_t TIFFGetStrileOffsetWithErr(TIFF *tif, uint32_t strile, int *pbErr);

## Description

Make defer strile offset/bytecount loading available at runtime and add per-strile offset/bytecount loading capabilities. Part of this commit makes the behaviour that was previously met when `libtiff` was compiled with `-DDEFER_STRILE_LOAD` available for default builds.

When specifying the new `D` (Deferred) `TIFFOpen()` flag, the loading of strile offset/bytecount is defered. In that mode, the `StripOffsets` / `StripByteCounts` or `TileOffsets` / `TileByteCounts` arrays are only loaded when first accessed. This can speed-up the opening of files stored on the network when just metadata retrieval is needed.

Another addition is the capability of loading only the values of the offset/bytecount of the strile of interest instead of the whole array. This is enabled with the new `O` (Ondemand) flag of `TIFFOpen()` (which implies `D`).

The public `TIFFGetStrileOffset()`, `TIFFGetStrileOffsetWithErr()`, `TIFFGetStrileByteCount()` and `TIFFGetStrileByteCountWithErr()` functions have been added to API. They are of particular interest when using sparse files (with `offset == bytecount == 0`) and you want to detect if a strile is present or not without decompressing the data, or updating an existing sparse file.

`TIFFGetStrileByteCount()` returns the value of the TileByteCounts / StripByteCounts array for the specified tile/strile.

`TIFFGetStrileByteCountWithErr()` additionally provides pbErr as an int pointer to an error return variable, which is set to “0” for successful return or to “1” for an error return.

`TIFFGetStrileOffset()` returns the value of the TileOffsets / StripOffsets array for the specified tile/strile.

`TIFFGetStrileOffsetWithErr()` additionally provides pbErr as an int pointer to an error return variable, which is set to “0” for successful return or to “1” for an error return.

## Diagnostics

All error messages are directed to the `TIFFErrorExtR()` routine. Likewise, warning messages are directed to the `TIFFWarningExtR()` routine.

## See also

libtiff (3tiff), TIFFOpen (3tiff), TIFFDeferStrileArrayWriting (3tiff)