Line data Source code
1 : /******************************************************************************
2 : *
3 : * Project: GDAL Core
4 : * Purpose: GeoTIFF thread safe reader using libertiff library.
5 : * Author: Even Rouault <even dot rouault at spatialys.com>
6 : *
7 : ******************************************************************************
8 : * Copyright (c) 2024, Even Rouault <even dot rouault at spatialys.com>
9 : *
10 : * SPDX-License-Identifier: MIT
11 : ****************************************************************************/
12 :
13 : #include "tiff_common.h"
14 :
15 : // Use code from internal libtiff for LZW, PackBits and LERC codecs
16 : #define TIFFInitLZW LIBERTIFF_TIFFInitLZW
17 : #define TIFFInitPackBits LIBERTIFF_TIFFInitPackBits
18 : #define TIFFInitLERC LIBERTIFF_TIFFInitLERC
19 : #define _TIFFmallocExt LIBERTIFF_TIFFmallocExt
20 : #define _TIFFreallocExt LIBERTIFF_TIFFreallocExt
21 : #define _TIFFcallocExt LIBERTIFF_TIFFcallocExt
22 : #define _TIFFfreeExt LIBERTIFF_TIFFfreeExt
23 : #define _TIFFmemset LIBERTIFF_TIFFmemset
24 : #define _TIFFmemcpy LIBERTIFF_TIFFmemcpy
25 : #define TIFFPredictorInit LIBERTIFF_TIFFPredictorInit
26 : #define TIFFPredictorCleanup LIBERTIFF_TIFFPredictorCleanup
27 : #define _TIFFSetDefaultCompressionState LIBERTIFF_TIFFSetDefaultCompressionState
28 : #define TIFFFlushData1 LIBERTIFF_TIFFFlushData1_dummy
29 : #define TIFFWarningExtR LIBERTIFF_TIFFWarningExtR
30 : #define TIFFErrorExtR LIBERTIFF_TIFFErrorExtR
31 : #define TIFFTileRowSize LIBERTIFF_TIFFTileRowSize_dummy
32 : #define TIFFScanlineSize LIBERTIFF_TIFFScanlineSize_dummy
33 : #define TIFFSetField LIBERTIFF_TIFFSetField_dummy
34 : #define _TIFFMergeFields LIBERTIFF_TIFFMergeFields_dummy
35 : #define register
36 : extern "C"
37 : {
38 : #if defined(__GNUC__)
39 : #pragma GCC diagnostic push
40 : #pragma GCC diagnostic ignored "-Wold-style-cast"
41 : #endif
42 :
43 : #ifdef __clang__
44 : #pragma clang diagnostic push
45 : #pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
46 : #endif
47 :
48 : #define LZW_READ_ONLY
49 : #include "tif_lzw.c"
50 :
51 : #define PACKBITS_READ_ONLY
52 : #include "tif_packbits.c"
53 :
54 : #ifdef LERC_SUPPORT
55 : #define LERC_READ_ONLY
56 : #include "tif_lerc.c"
57 : #endif
58 :
59 : #ifdef __clang__
60 : #pragma clang diagnostic pop
61 : #endif
62 :
63 : #if defined(__GNUC__)
64 : #pragma GCC diagnostic pop
65 : #endif
66 :
67 221 : void *LIBERTIFF_TIFFmallocExt(TIFF *, tmsize_t s)
68 : {
69 221 : return malloc(s);
70 : }
71 :
72 0 : void *LIBERTIFF_TIFFreallocExt(TIFF *, void *p, tmsize_t s)
73 : {
74 0 : return realloc(p, s);
75 : }
76 :
77 52 : void *LIBERTIFF_TIFFcallocExt(TIFF *, tmsize_t nmemb, tmsize_t siz)
78 : {
79 52 : return calloc(nmemb, siz);
80 : }
81 :
82 471 : void LIBERTIFF_TIFFfreeExt(TIFF *, void *ptr)
83 : {
84 471 : free(ptr);
85 471 : }
86 :
87 1 : void LIBERTIFF_TIFFmemset(void *ptr, int v, tmsize_t s)
88 : {
89 1 : memset(ptr, v, s);
90 1 : }
91 :
92 482 : void LIBERTIFF_TIFFmemcpy(void *d, const void *s, tmsize_t c)
93 : {
94 482 : memcpy(d, s, c);
95 482 : }
96 :
97 117 : void LIBERTIFF_TIFFSetDefaultCompressionState(TIFF *)
98 : {
99 117 : }
100 :
101 104 : int LIBERTIFF_TIFFSetField_dummy(TIFF *, uint32_t, ...)
102 : {
103 104 : return 0;
104 : }
105 :
106 52 : int LIBERTIFF_TIFFMergeFields_dummy(TIFF *, const TIFFField[], uint32_t)
107 : {
108 52 : return 1;
109 : }
110 :
111 67 : int LIBERTIFF_TIFFPredictorInit(TIFF *)
112 : {
113 67 : return 0;
114 : }
115 :
116 67 : int LIBERTIFF_TIFFPredictorCleanup(TIFF *)
117 : {
118 67 : return 0;
119 : }
120 :
121 2 : void LIBERTIFF_TIFFWarningExtR(TIFF *, const char *pszModule,
122 : const char *fmt, ...)
123 : {
124 : char *pszModFmt =
125 2 : gdal::tiff_common::PrepareTIFFErrorFormat(pszModule, fmt);
126 : va_list ap;
127 2 : va_start(ap, fmt);
128 2 : CPLErrorV(CE_Warning, CPLE_AppDefined, pszModFmt, ap);
129 2 : va_end(ap);
130 2 : CPLFree(pszModFmt);
131 2 : }
132 :
133 14 : void LIBERTIFF_TIFFErrorExtR(TIFF *, const char *pszModule, const char *fmt,
134 : ...)
135 : {
136 : char *pszModFmt =
137 14 : gdal::tiff_common::PrepareTIFFErrorFormat(pszModule, fmt);
138 : va_list ap;
139 14 : va_start(ap, fmt);
140 14 : CPLErrorV(CE_Failure, CPLE_AppDefined, pszModFmt, ap);
141 14 : va_end(ap);
142 14 : CPLFree(pszModFmt);
143 14 : }
144 : }
145 : #undef isTiled
|