Coverage Report

Created: 2022-10-31 07:00

/src/ghostpdl/tiff/libtiff/tif_swab.c
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 1988-1997 Sam Leffler
3
 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
4
 *
5
 * Permission to use, copy, modify, distribute, and sell this software and 
6
 * its documentation for any purpose is hereby granted without fee, provided
7
 * that (i) the above copyright notices and this permission notice appear in
8
 * all copies of the software and related documentation, and (ii) the names of
9
 * Sam Leffler and Silicon Graphics may not be used in any advertising or
10
 * publicity relating to the software without the specific, prior written
11
 * permission of Sam Leffler and Silicon Graphics.
12
 * 
13
 * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
14
 * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
15
 * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
16
 * 
17
 * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
18
 * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
19
 * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20
 * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
21
 * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
22
 * OF THIS SOFTWARE.
23
 */
24
25
/*
26
 * TIFF Library Bit & Byte Swapping Support.
27
 *
28
 * XXX We assume short = 16-bits and long = 32-bits XXX
29
 */
30
#include "tiffiop.h"
31
32
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabShort)
33
void
34
TIFFSwabShort(uint16_t* wp)
35
0
{
36
0
  register unsigned char* cp = (unsigned char*) wp;
37
0
  unsigned char t;
38
0
  assert(sizeof(uint16_t) == 2);
39
0
  t = cp[1]; cp[1] = cp[0]; cp[0] = t;
40
0
}
41
#endif
42
43
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabLong)
44
void
45
TIFFSwabLong(uint32_t* lp)
46
0
{
47
0
  register unsigned char* cp = (unsigned char*) lp;
48
0
  unsigned char t;
49
0
  assert(sizeof(uint32_t) == 4);
50
0
  t = cp[3]; cp[3] = cp[0]; cp[0] = t;
51
0
  t = cp[2]; cp[2] = cp[1]; cp[1] = t;
52
0
}
53
#endif
54
55
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabLong8)
56
void
57
TIFFSwabLong8(uint64_t* lp)
58
0
{
59
0
  register unsigned char* cp = (unsigned char*) lp;
60
0
  unsigned char t;
61
0
  assert(sizeof(uint64_t) == 8);
62
0
  t = cp[7]; cp[7] = cp[0]; cp[0] = t;
63
0
  t = cp[6]; cp[6] = cp[1]; cp[1] = t;
64
0
  t = cp[5]; cp[5] = cp[2]; cp[2] = t;
65
0
  t = cp[4]; cp[4] = cp[3]; cp[3] = t;
66
0
}
67
#endif
68
69
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfShort)
70
void
71
TIFFSwabArrayOfShort(register uint16_t* wp, tmsize_t n)
72
0
{
73
0
  register unsigned char* cp;
74
0
  register unsigned char t;
75
0
  assert(sizeof(uint16_t) == 2);
76
  /* XXX unroll loop some */
77
0
  while (n-- > 0) {
78
0
    cp = (unsigned char*) wp;
79
0
    t = cp[1]; cp[1] = cp[0]; cp[0] = t;
80
0
    wp++;
81
0
  }
82
0
}
83
#endif
84
85
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfTriples)
86
void
87
TIFFSwabArrayOfTriples(register uint8_t* tp, tmsize_t n)
88
0
{
89
0
  unsigned char* cp;
90
0
  unsigned char t;
91
92
  /* XXX unroll loop some */
93
0
  while (n-- > 0) {
94
0
    cp = (unsigned char*) tp;
95
0
    t = cp[2]; cp[2] = cp[0]; cp[0] = t;
96
0
    tp += 3;
97
0
  }
98
0
}
99
#endif
100
101
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfLong)
102
void
103
TIFFSwabArrayOfLong(register uint32_t* lp, tmsize_t n)
104
0
{
105
0
  register unsigned char *cp;
106
0
  register unsigned char t;
107
0
  assert(sizeof(uint32_t) == 4);
108
  /* XXX unroll loop some */
109
0
  while (n-- > 0) {
110
0
    cp = (unsigned char *)lp;
111
0
    t = cp[3]; cp[3] = cp[0]; cp[0] = t;
112
0
    t = cp[2]; cp[2] = cp[1]; cp[1] = t;
113
0
    lp++;
114
0
  }
115
0
}
116
#endif
117
118
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfLong8)
119
void
120
TIFFSwabArrayOfLong8(register uint64_t* lp, tmsize_t n)
121
0
{
122
0
  register unsigned char *cp;
123
0
  register unsigned char t;
124
0
  assert(sizeof(uint64_t) == 8);
125
  /* XXX unroll loop some */
126
0
  while (n-- > 0) {
127
0
    cp = (unsigned char *)lp;
128
0
    t = cp[7]; cp[7] = cp[0]; cp[0] = t;
129
0
    t = cp[6]; cp[6] = cp[1]; cp[1] = t;
130
0
    t = cp[5]; cp[5] = cp[2]; cp[2] = t;
131
0
    t = cp[4]; cp[4] = cp[3]; cp[3] = t;
132
0
    lp++;
133
0
  }
134
0
}
135
#endif
136
137
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabFloat)
138
void
139
TIFFSwabFloat(float* fp)
140
0
{
141
0
  register unsigned char* cp = (unsigned char*) fp;
142
0
  unsigned char t;
143
0
  assert(sizeof(float)==4);
144
0
  t = cp[3]; cp[3] = cp[0]; cp[0] = t;
145
0
  t = cp[2]; cp[2] = cp[1]; cp[1] = t;
146
0
}
147
#endif
148
149
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfFloat)
150
void
151
TIFFSwabArrayOfFloat(register float* fp, tmsize_t n)
152
0
{
153
0
  register unsigned char *cp;
154
0
  register unsigned char t;
155
0
  assert(sizeof(float)==4);
156
  /* XXX unroll loop some */
157
0
  while (n-- > 0) {
158
0
    cp = (unsigned char *)fp;
159
0
    t = cp[3]; cp[3] = cp[0]; cp[0] = t;
160
0
    t = cp[2]; cp[2] = cp[1]; cp[1] = t;
161
0
    fp++;
162
0
  }
163
0
}
164
#endif
165
166
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabDouble)
167
void
168
TIFFSwabDouble(double *dp)
169
0
{
170
0
  register unsigned char* cp = (unsigned char*) dp;
171
0
  unsigned char t;
172
0
  assert(sizeof(double)==8);
173
0
  t = cp[7]; cp[7] = cp[0]; cp[0] = t;
174
0
  t = cp[6]; cp[6] = cp[1]; cp[1] = t;
175
0
  t = cp[5]; cp[5] = cp[2]; cp[2] = t;
176
0
  t = cp[4]; cp[4] = cp[3]; cp[3] = t;
177
0
}
178
#endif
179
180
#if defined(DISABLE_CHECK_TIFFSWABMACROS) || !defined(TIFFSwabArrayOfDouble)
181
void
182
TIFFSwabArrayOfDouble(double* dp, tmsize_t n)
183
0
{
184
0
  register unsigned char *cp;
185
0
  register unsigned char t;
186
0
  assert(sizeof(double)==8);
187
  /* XXX unroll loop some */
188
0
  while (n-- > 0) {
189
0
    cp = (unsigned char *)dp;
190
0
    t = cp[7]; cp[7] = cp[0]; cp[0] = t;
191
0
    t = cp[6]; cp[6] = cp[1]; cp[1] = t;
192
0
    t = cp[5]; cp[5] = cp[2]; cp[2] = t;
193
0
    t = cp[4]; cp[4] = cp[3]; cp[3] = t;
194
0
    dp++;
195
0
  }
196
0
}
197
#endif
198
199
/*
200
 * Bit reversal tables.  TIFFBitRevTable[<byte>] gives
201
 * the bit reversed value of <byte>.  Used in various
202
 * places in the library when the FillOrder requires
203
 * bit reversal of byte values (e.g. CCITT Fax 3
204
 * encoding/decoding).  TIFFNoBitRevTable is provided
205
 * for algorithms that want an equivalent table that
206
 * do not reverse bit values.
207
 */
208
static const unsigned char TIFFBitRevTable[256] = {
209
    0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
210
    0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
211
    0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
212
    0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
213
    0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
214
    0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
215
    0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
216
    0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
217
    0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
218
    0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
219
    0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
220
    0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
221
    0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
222
    0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
223
    0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
224
    0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
225
    0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
226
    0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
227
    0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
228
    0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
229
    0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
230
    0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
231
    0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
232
    0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
233
    0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
234
    0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
235
    0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
236
    0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
237
    0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
238
    0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
239
    0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
240
    0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
241
};
242
static const unsigned char TIFFNoBitRevTable[256] = {
243
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 
244
    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 
245
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 
246
    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 
247
    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 
248
    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 
249
    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 
250
    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 
251
    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 
252
    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 
253
    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 
254
    0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 
255
    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 
256
    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 
257
    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 
258
    0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 
259
    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 
260
    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 
261
    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 
262
    0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 
263
    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 
264
    0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 
265
    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 
266
    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 
267
    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 
268
    0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 
269
    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 
270
    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 
271
    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 
272
    0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 
273
    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 
274
    0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 
275
};
276
277
const unsigned char*
278
TIFFGetBitRevTable(int reversed)
279
0
{
280
0
  return (reversed ? TIFFBitRevTable : TIFFNoBitRevTable);
281
0
}
282
283
void
284
TIFFReverseBits(uint8_t* cp, tmsize_t n)
285
0
{
286
0
  for (; n > 8; n -= 8) {
287
0
    cp[0] = TIFFBitRevTable[cp[0]];
288
0
    cp[1] = TIFFBitRevTable[cp[1]];
289
0
    cp[2] = TIFFBitRevTable[cp[2]];
290
0
    cp[3] = TIFFBitRevTable[cp[3]];
291
0
    cp[4] = TIFFBitRevTable[cp[4]];
292
0
    cp[5] = TIFFBitRevTable[cp[5]];
293
0
    cp[6] = TIFFBitRevTable[cp[6]];
294
0
    cp[7] = TIFFBitRevTable[cp[7]];
295
0
    cp += 8;
296
0
  }
297
0
  while (n-- > 0) {
298
0
    *cp = TIFFBitRevTable[*cp];
299
0
    cp++;
300
0
  }
301
0
}
302
303
/* vim: set ts=8 sts=8 sw=8 noet: */
304
/*
305
 * Local Variables:
306
 * mode: c
307
 * c-basic-offset: 8
308
 * fill-column: 78
309
 * End:
310
 */