| /* | 
 |  * 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 | 
 |  * | 
 |  * Builtin Compression Scheme Configuration Support. | 
 |  */ | 
 | #include "tiffiop.h" | 
 |  | 
 | static int NotConfigured(TIFF *, int); | 
 |  | 
 | #ifndef LZW_SUPPORT | 
 | #define TIFFInitLZW NotConfigured | 
 | #endif | 
 | #ifndef PACKBITS_SUPPORT | 
 | #define TIFFInitPackBits NotConfigured | 
 | #endif | 
 | #ifndef THUNDER_SUPPORT | 
 | #define TIFFInitThunderScan NotConfigured | 
 | #endif | 
 | #ifndef NEXT_SUPPORT | 
 | #define TIFFInitNeXT NotConfigured | 
 | #endif | 
 | #ifndef JPEG_SUPPORT | 
 | #define TIFFInitJPEG NotConfigured | 
 | #endif | 
 | #ifndef OJPEG_SUPPORT | 
 | #define TIFFInitOJPEG NotConfigured | 
 | #endif | 
 | #ifndef CCITT_SUPPORT | 
 | #define TIFFInitCCITTRLE NotConfigured | 
 | #define TIFFInitCCITTRLEW NotConfigured | 
 | #define TIFFInitCCITTFax3 NotConfigured | 
 | #define TIFFInitCCITTFax4 NotConfigured | 
 | #endif | 
 | #ifndef JBIG_SUPPORT | 
 | #define TIFFInitJBIG NotConfigured | 
 | #endif | 
 | #ifndef ZIP_SUPPORT | 
 | #define TIFFInitZIP NotConfigured | 
 | #endif | 
 | #ifndef PIXARLOG_SUPPORT | 
 | #define TIFFInitPixarLog NotConfigured | 
 | #endif | 
 | #ifndef LOGLUV_SUPPORT | 
 | #define TIFFInitSGILog NotConfigured | 
 | #endif | 
 | #ifndef LERC_SUPPORT | 
 | #define TIFFInitLERC NotConfigured | 
 | #endif | 
 | #ifndef LZMA_SUPPORT | 
 | #define TIFFInitLZMA NotConfigured | 
 | #endif | 
 | #ifndef ZSTD_SUPPORT | 
 | #define TIFFInitZSTD NotConfigured | 
 | #endif | 
 | #ifndef WEBP_SUPPORT | 
 | #define TIFFInitWebP NotConfigured | 
 | #endif | 
 |  | 
 | /* | 
 |  * Compression schemes statically built into the library. | 
 |  */ | 
 | const TIFFCodec _TIFFBuiltinCODECS[] = { | 
 |     {"None", COMPRESSION_NONE, TIFFInitDumpMode}, | 
 |     {"LZW", COMPRESSION_LZW, TIFFInitLZW}, | 
 |     {"PackBits", COMPRESSION_PACKBITS, TIFFInitPackBits}, | 
 |     {"ThunderScan", COMPRESSION_THUNDERSCAN, TIFFInitThunderScan}, | 
 |     {"NeXT", COMPRESSION_NEXT, TIFFInitNeXT}, | 
 |     {"JPEG", COMPRESSION_JPEG, TIFFInitJPEG}, | 
 |     {"Old-style JPEG", COMPRESSION_OJPEG, TIFFInitOJPEG}, | 
 |     {"CCITT RLE", COMPRESSION_CCITTRLE, TIFFInitCCITTRLE}, | 
 |     {"CCITT RLE/W", COMPRESSION_CCITTRLEW, TIFFInitCCITTRLEW}, | 
 |     {"CCITT Group 3", COMPRESSION_CCITTFAX3, TIFFInitCCITTFax3}, | 
 |     {"CCITT Group 4", COMPRESSION_CCITTFAX4, TIFFInitCCITTFax4}, | 
 |     {"ISO JBIG", COMPRESSION_JBIG, TIFFInitJBIG}, | 
 |     {"Deflate", COMPRESSION_DEFLATE, TIFFInitZIP}, | 
 |     {"AdobeDeflate", COMPRESSION_ADOBE_DEFLATE, TIFFInitZIP}, | 
 |     {"PixarLog", COMPRESSION_PIXARLOG, TIFFInitPixarLog}, | 
 |     {"SGILog", COMPRESSION_SGILOG, TIFFInitSGILog}, | 
 |     {"SGILog24", COMPRESSION_SGILOG24, TIFFInitSGILog}, | 
 |     {"LZMA", COMPRESSION_LZMA, TIFFInitLZMA}, | 
 |     {"ZSTD", COMPRESSION_ZSTD, TIFFInitZSTD}, | 
 |     {"WEBP", COMPRESSION_WEBP, TIFFInitWebP}, | 
 |     {"LERC", COMPRESSION_LERC, TIFFInitLERC}, | 
 |     {NULL, 0, NULL}}; | 
 |  | 
 | static int _notConfigured(TIFF *tif) | 
 | { | 
 |     const TIFFCodec *c = TIFFFindCODEC(tif->tif_dir.td_compression); | 
 |     char compression_code[20]; | 
 |  | 
 |     snprintf(compression_code, sizeof(compression_code), "%" PRIu16, | 
 |              tif->tif_dir.td_compression); | 
 |     TIFFErrorExtR(tif, tif->tif_name, | 
 |                   "%s compression support is not configured", | 
 |                   c ? c->name : compression_code); | 
 |     return (0); | 
 | } | 
 |  | 
 | static int NotConfigured(TIFF *tif, int scheme) | 
 | { | 
 |     (void)scheme; | 
 |  | 
 |     tif->tif_fixuptags = _notConfigured; | 
 |     tif->tif_decodestatus = FALSE; | 
 |     tif->tif_setupdecode = _notConfigured; | 
 |     tif->tif_encodestatus = FALSE; | 
 |     tif->tif_setupencode = _notConfigured; | 
 |     return (1); | 
 | } | 
 |  | 
 | /************************************************************************/ | 
 | /*                       TIFFIsCODECConfigured()                        */ | 
 | /************************************************************************/ | 
 |  | 
 | /** | 
 |  * Check whether we have working codec for the specific coding scheme. | 
 |  * | 
 |  * @return returns 1 if the codec is configured and working. Otherwise | 
 |  * 0 will be returned. | 
 |  */ | 
 |  | 
 | int TIFFIsCODECConfigured(uint16_t scheme) | 
 | { | 
 |     const TIFFCodec *codec = TIFFFindCODEC(scheme); | 
 |  | 
 |     if (codec == NULL) | 
 |     { | 
 |         return 0; | 
 |     } | 
 |     if (codec->init == NULL) | 
 |     { | 
 |         return 0; | 
 |     } | 
 |     if (codec->init != NotConfigured) | 
 |     { | 
 |         return 1; | 
 |     } | 
 |     return 0; | 
 | } |