# TIFFOpenOptions

## Synopsis

    #include <tiffio.h>

typedef TIFFOpenOptions TIFFOpenOptions

TIFFOpenOptions *TIFFOpenOptionsAlloc(void)

void TIFFOpenOptionsFree(TIFFOpenOptions*)

void TIFFOpenOptionsSetMaxSingleMemAlloc(TIFFOpenOptions *opts, tmsize_t max_single_mem_alloc)

void TIFFOpenOptionsSetMaxCumulatedMemAlloc(TIFFOpenOptions *opts, tmsize_t max_cumulated_mem_alloc)

void TIFFOpenOptionsSetErrorHandlerExtR(TIFFOpenOptions *opts, TIFFErrorHandlerExtR handler, void *errorhandler_user_data)

void TIFFOpenOptionsSetWarningHandlerExtR(TIFFOpenOptions *opts, TIFFErrorHandlerExtR handler, void *warnhandler_user_data)

## Description

`TIFFOpenOptions` is an opaque structure which can be passed to the TIFF open"Ext" functions to define some `libtiff` internal settings. The settings are the maximum single memory allocation limit and per-TIFF handle (re-entrant) error handler and warning handler functions. For those handler a pointer to a custom defined data structure user_data can be given along.

`TIFFOpenOptionsAlloc()` allocates memory for the `TIFFOpenOptions` opaque structure and returns a `TIFFOpenOptions` pointer.

`TIFFOpenOptionsFree()` releases the allocated memory for `TIFFOpenOptions`. The allocated memory for `TIFFOpenOptions` can be released straight after successful execution of the related TIFFOpen"Ext" functions like `TIFFOpenExt()`.

`TIFFOpenOptionsSetMaxSingleMemAlloc()` (added in libtiff 4.5.0) sets the value for the maximum single memory limit in byte that `libtiff` internal memory allocation functions are allowed to request per call.

Note

However, the `libtiff` external functions `_TIFFmalloc()` and `_TIFFrealloc()` do not apply this internal memory allocation limit set by `TIFFOpenOptionsSetMaxSingleMemAlloc()`!

`TIFFOpenOptionsSetMaxCumulatedMemAlloc()` (added in libtiff 4.6.1) sets the maximum cumulated memory allocations in byte, for a given TIFF handle, that `libtiff` internal memory allocation functions are allowed.

Note

However, the `libtiff` external functions `_TIFFmalloc()` and `_TIFFrealloc()` do not apply this internal memory allocation limit set by `TIFFOpenOptionsSetMaxCumulatedMemAlloc()`!

`TIFFOpenOptionsSetErrorHandlerExtR()` sets the function pointer to an application-specific and per-TIFF handle (re-entrant) error handler. Furthermore, a pointer to a custom defined data structure errorhandler_user_data can be passed. This error handler is invoked through `TIFFErrorExtR()` and the errorhandler_user_data pointer is given along. The errorhandler_user_data argument may be NULL.

`TIFFOpenOptionsSetWarningHandlerExtR()` works like `TIFFOpenOptionsSetErrorHandlerExtR()` but for the warning handler, which is invoked through `TIFFWarningExtR()`

## Example

    #include "tiffio.h"

    typedef struct MyErrorHandlerUserDataStruct
    {
        /* ... any user data structure ... */
    } MyErrorHandlerUserDataStruct;

    static int myErrorHandler(TIFF *tiff, void *user_data, const char *module,
                          const char *fmt, va_list ap)
    {
        MyErrorHandlerUserDataStruct *errorhandler_user_data =
            (MyErrorHandlerUserDataStruct *)user_data;
        /*... code of myErrorHandler ...*/
        return 1;
    }

    main()
    {
        tmsize_t limit = (256 * 1024 * 1024);
        MyErrorHandlerUserDataStruct user_data = { /* ... any data ... */};

        TIFFOpenOptions *opts = TIFFOpenOptionsAlloc();
        TIFFOpenOptionsSetMaxSingleMemAlloc(opts, limit);
        TIFFOpenOptionsSetErrorHandlerExtR(opts, myErrorHandler, &user_data);
        TIFF *tif = TIFFOpenExt("foo.tif", "r", opts);
        TIFFOpenOptionsFree(opts);
        /* ... go on here ... */

        TIFFClose(tif);
    }

## Note

This functionality was introduced with libtiff 4.5.

## See also

libtiff (3tiff), TIFFOpen (3tiff), TIFFError (3tiff), TIFFWarning (3tiff)