/src/ghostpdl/tiff/libtiff/tif_dumpmode.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. |
27 | | * |
28 | | * "Null" Compression Algorithm Support. |
29 | | */ |
30 | | #include "tiffiop.h" |
31 | | |
32 | | static int DumpFixupTags(TIFF *tif) |
33 | 0 | { |
34 | 0 | (void)tif; |
35 | 0 | return (1); |
36 | 0 | } |
37 | | |
38 | | /* |
39 | | * Encode a hunk of pixels. |
40 | | */ |
41 | | static int DumpModeEncode(TIFF *tif, uint8_t *pp, tmsize_t cc, uint16_t s) |
42 | 0 | { |
43 | 0 | (void)s; |
44 | 0 | while (cc > 0) |
45 | 0 | { |
46 | 0 | tmsize_t n; |
47 | |
|
48 | 0 | n = cc; |
49 | 0 | if (tif->tif_rawcc + n > tif->tif_rawdatasize) |
50 | 0 | n = tif->tif_rawdatasize - tif->tif_rawcc; |
51 | |
|
52 | 0 | assert(n > 0); |
53 | | |
54 | | /* |
55 | | * Avoid copy if client has setup raw |
56 | | * data buffer to avoid extra copy. |
57 | | */ |
58 | 0 | if (tif->tif_rawcp != pp) |
59 | 0 | _TIFFmemcpy(tif->tif_rawcp, pp, n); |
60 | 0 | tif->tif_rawcp += n; |
61 | 0 | tif->tif_rawcc += n; |
62 | 0 | pp += n; |
63 | 0 | cc -= n; |
64 | 0 | if (tif->tif_rawcc >= tif->tif_rawdatasize && !TIFFFlushData1(tif)) |
65 | 0 | return (0); |
66 | 0 | } |
67 | 0 | return (1); |
68 | 0 | } |
69 | | |
70 | | /* |
71 | | * Decode a hunk of pixels. |
72 | | */ |
73 | | static int DumpModeDecode(TIFF *tif, uint8_t *buf, tmsize_t cc, uint16_t s) |
74 | 0 | { |
75 | 0 | static const char module[] = "DumpModeDecode"; |
76 | 0 | (void)s; |
77 | 0 | if (tif->tif_rawcc < cc) |
78 | 0 | { |
79 | 0 | TIFFErrorExtR(tif, module, |
80 | 0 | "Not enough data for scanline %" PRIu32 |
81 | 0 | ", expected a request for at most %" TIFF_SSIZE_FORMAT |
82 | 0 | " bytes, got a request for %" TIFF_SSIZE_FORMAT " bytes", |
83 | 0 | tif->tif_row, tif->tif_rawcc, cc); |
84 | 0 | return (0); |
85 | 0 | } |
86 | | /* |
87 | | * Avoid copy if client has setup raw |
88 | | * data buffer to avoid extra copy. |
89 | | */ |
90 | 0 | if (tif->tif_rawcp != buf) |
91 | 0 | _TIFFmemcpy(buf, tif->tif_rawcp, cc); |
92 | 0 | tif->tif_rawcp += cc; |
93 | 0 | tif->tif_rawcc -= cc; |
94 | 0 | return (1); |
95 | 0 | } |
96 | | |
97 | | /* |
98 | | * Seek forwards nrows in the current strip. |
99 | | */ |
100 | | static int DumpModeSeek(TIFF *tif, uint32_t nrows) |
101 | 0 | { |
102 | 0 | tif->tif_rawcp += nrows * tif->tif_scanlinesize; |
103 | 0 | tif->tif_rawcc -= nrows * tif->tif_scanlinesize; |
104 | 0 | return (1); |
105 | 0 | } |
106 | | |
107 | | /* |
108 | | * Initialize dump mode. |
109 | | */ |
110 | | int TIFFInitDumpMode(TIFF *tif, int scheme) |
111 | 37.6k | { |
112 | 37.6k | (void)scheme; |
113 | 37.6k | tif->tif_fixuptags = DumpFixupTags; |
114 | 37.6k | tif->tif_decoderow = DumpModeDecode; |
115 | 37.6k | tif->tif_decodestrip = DumpModeDecode; |
116 | 37.6k | tif->tif_decodetile = DumpModeDecode; |
117 | 37.6k | tif->tif_encoderow = DumpModeEncode; |
118 | 37.6k | tif->tif_encodestrip = DumpModeEncode; |
119 | 37.6k | tif->tif_encodetile = DumpModeEncode; |
120 | 37.6k | tif->tif_seek = DumpModeSeek; |
121 | 37.6k | return (1); |
122 | 37.6k | } |