OLD | NEW |
1 /* $Id: tif_read.c,v 1.41 2012-07-06 19:22:58 bfriesen Exp $ */ | 1 /* $Id: tif_read.c,v 1.45 2015-06-07 22:35:40 bfriesen Exp $ */ |
2 | 2 |
3 /* | 3 /* |
4 * Copyright (c) 1988-1997 Sam Leffler | 4 * Copyright (c) 1988-1997 Sam Leffler |
5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. | 5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. |
6 * | 6 * |
7 * Permission to use, copy, modify, distribute, and sell this software and | 7 * Permission to use, copy, modify, distribute, and sell this software and |
8 * its documentation for any purpose is hereby granted without fee, provided | 8 * its documentation for any purpose is hereby granted without fee, provided |
9 * that (i) the above copyright notices and this permission notice appear in | 9 * that (i) the above copyright notices and this permission notice appear in |
10 * all copies of the software and related documentation, and (ii) the names of | 10 * all copies of the software and related documentation, and (ii) the names of |
11 * Sam Leffler and Silicon Graphics may not be used in any advertising or | 11 * Sam Leffler and Silicon Graphics may not be used in any advertising or |
(...skipping 28 matching lines...) Expand all Loading... |
40 TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size,const char*
module); | 40 TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size,const char*
module); |
41 | 41 |
42 #define NOSTRIP ((uint32)(-1)) /* undefined state */ | 42 #define NOSTRIP ((uint32)(-1)) /* undefined state */ |
43 #define NOTILE ((uint32)(-1)) /* undefined state */ | 43 #define NOTILE ((uint32)(-1)) /* undefined state */ |
44 | 44 |
45 static int | 45 static int |
46 TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart ) | 46 TIFFFillStripPartial( TIFF *tif, int strip, tmsize_t read_ahead, int restart ) |
47 { | 47 { |
48 static const char module[] = "TIFFFillStripPartial"; | 48 static const char module[] = "TIFFFillStripPartial"; |
49 register TIFFDirectory *td = &tif->tif_dir; | 49 register TIFFDirectory *td = &tif->tif_dir; |
50 uint64 unused_data; | 50 tmsize_t unused_data; |
51 uint64 read_offset; | 51 uint64 read_offset; |
52 tmsize_t cc, to_read; | 52 tmsize_t cc, to_read; |
53 /* tmsize_t bytecountm; */ | 53 /* tmsize_t bytecountm; */ |
54 | 54 |
55 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) | 55 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) |
56 return 0; | 56 return 0; |
57 | 57 |
58 /* | 58 /* |
59 * Expand raw data buffer, if needed, to hold data | 59 * Expand raw data buffer, if needed, to hold data |
60 * strip coming from file (perhaps should set upper | 60 * strip coming from file (perhaps should set upper |
(...skipping 26 matching lines...) Expand all Loading... |
87 ** start of the buffer. | 87 ** start of the buffer. |
88 */ | 88 */ |
89 if( tif->tif_rawdataloaded > 0 ) | 89 if( tif->tif_rawdataloaded > 0 ) |
90 unused_data = tif->tif_rawdataloaded - (tif->tif_rawcp - tif->ti
f_rawdata); | 90 unused_data = tif->tif_rawdataloaded - (tif->tif_rawcp - tif->ti
f_rawdata); |
91 else | 91 else |
92 unused_data = 0; | 92 unused_data = 0; |
93 | 93 |
94 if( unused_data > 0 ) | 94 if( unused_data > 0 ) |
95 { | 95 { |
96 assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); | 96 assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); |
97 memmove( tif->tif_rawdata, tif->tif_rawcp, (size_t)unused_data )
; | 97 memmove( tif->tif_rawdata, tif->tif_rawcp, unused_data ); |
98 } | 98 } |
99 | 99 |
100 /* | 100 /* |
101 ** Seek to the point in the file where more data should be read. | 101 ** Seek to the point in the file where more data should be read. |
102 */ | 102 */ |
103 read_offset = td->td_stripoffset[strip] | 103 read_offset = td->td_stripoffset[strip] |
104 + tif->tif_rawdataoff + tif->tif_rawdataloaded; | 104 + tif->tif_rawdataoff + tif->tif_rawdataloaded; |
105 | 105 |
106 if (!SeekOK(tif, read_offset)) { | 106 if (!SeekOK(tif, read_offset)) { |
107 TIFFErrorExt(tif->tif_clientdata, module, | 107 TIFFErrorExt(tif->tif_clientdata, module, |
108 "Seek error at scanline %lu, strip %lu", | 108 "Seek error at scanline %lu, strip %lu", |
109 (unsigned long) tif->tif_row, (unsigned long) strip
); | 109 (unsigned long) tif->tif_row, (unsigned long) strip
); |
110 return 0; | 110 return 0; |
111 } | 111 } |
112 | 112 |
113 /* | 113 /* |
114 ** How much do we want to read? | 114 ** How much do we want to read? |
115 */ | 115 */ |
116 to_read = (tmsize_t)(tif->tif_rawdatasize - unused_data); | 116 to_read = tif->tif_rawdatasize - unused_data; |
117 if( (uint64) to_read > td->td_stripbytecount[strip] | 117 if( (uint64) to_read > td->td_stripbytecount[strip] |
118 - tif->tif_rawdataoff - tif->tif_rawdataloaded ) | 118 - tif->tif_rawdataoff - tif->tif_rawdataloaded ) |
119 { | 119 { |
120 to_read = (tmsize_t)(td->td_stripbytecount[strip] | 120 to_read = (tmsize_t) td->td_stripbytecount[strip] |
121 - tif->tif_rawdataoff - tif->tif_rawdataloaded); | 121 - tif->tif_rawdataoff - tif->tif_rawdataloaded; |
122 } | 122 } |
123 | 123 |
124 assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); | 124 assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); |
125 cc = TIFFReadFile(tif, tif->tif_rawdata + unused_data, to_read); | 125 cc = TIFFReadFile(tif, tif->tif_rawdata + unused_data, to_read); |
126 | 126 |
127 if (cc != to_read) { | 127 if (cc != to_read) { |
128 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) | 128 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) |
129 TIFFErrorExt(tif->tif_clientdata, module, | 129 TIFFErrorExt(tif->tif_clientdata, module, |
130 "Read error at scanline %lu; got %I64u bytes, expec
ted %I64u", | 130 "Read error at scanline %lu; got %I64u bytes, expec
ted %I64u", |
131 (unsigned long) tif->tif_row, | 131 (unsigned long) tif->tif_row, |
132 (unsigned __int64) cc, | 132 (unsigned __int64) cc, |
133 (unsigned __int64) to_read); | 133 (unsigned __int64) to_read); |
134 #else | 134 #else |
135 TIFFErrorExt(tif->tif_clientdata, module, | 135 TIFFErrorExt(tif->tif_clientdata, module, |
136 "Read error at scanline %lu; got %llu bytes, expect
ed %llu", | 136 "Read error at scanline %lu; got %llu bytes, expect
ed %llu", |
137 (unsigned long) tif->tif_row, | 137 (unsigned long) tif->tif_row, |
138 (unsigned long long) cc, | 138 (unsigned long long) cc, |
139 (unsigned long long) to_read); | 139 (unsigned long long) to_read); |
140 #endif | 140 #endif |
141 return 0; | 141 return 0; |
142 } | 142 } |
143 | 143 |
144 tif->tif_rawdataoff = (tmsize_t)(tif->tif_rawdataoff + tif->tif_rawdatal
oaded - unused_data) ; | 144 tif->tif_rawdataoff = tif->tif_rawdataoff + tif->tif_rawdataloaded - unu
sed_data ; |
145 tif->tif_rawdataloaded = (tmsize_t)unused_data + to_read; | 145 tif->tif_rawdataloaded = unused_data + to_read; |
146 | 146 |
147 tif->tif_rawcp = tif->tif_rawdata; | 147 tif->tif_rawcp = tif->tif_rawdata; |
148 | 148 |
149 if (!isFillOrder(tif, td->td_fillorder) && | 149 if (!isFillOrder(tif, td->td_fillorder) && |
150 (tif->tif_flags & TIFF_NOBITREV) == 0) { | 150 (tif->tif_flags & TIFF_NOBITREV) == 0) { |
151 assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); | 151 assert((tif->tif_flags&TIFF_BUFFERMMAP)==0); |
152 TIFFReverseBits(tif->tif_rawdata + unused_data, to_read ); | 152 TIFFReverseBits(tif->tif_rawdata + unused_data, to_read ); |
153 } | 153 } |
154 | 154 |
155 /* | 155 /* |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 * amount into the user-supplied buffer. | 314 * amount into the user-supplied buffer. |
315 */ | 315 */ |
316 tmsize_t | 316 tmsize_t |
317 TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size) | 317 TIFFReadEncodedStrip(TIFF* tif, uint32 strip, void* buf, tmsize_t size) |
318 { | 318 { |
319 static const char module[] = "TIFFReadEncodedStrip"; | 319 static const char module[] = "TIFFReadEncodedStrip"; |
320 TIFFDirectory *td = &tif->tif_dir; | 320 TIFFDirectory *td = &tif->tif_dir; |
321 uint32 rowsperstrip; | 321 uint32 rowsperstrip; |
322 uint32 stripsperplane; | 322 uint32 stripsperplane; |
323 uint32 stripinplane; | 323 uint32 stripinplane; |
324 » uint16 plane, comp; | 324 » uint16 plane; |
325 uint32 rows; | 325 uint32 rows; |
326 tmsize_t stripsize; | 326 tmsize_t stripsize; |
327 if (!TIFFCheckRead(tif,0)) | 327 if (!TIFFCheckRead(tif,0)) |
328 return((tmsize_t)(-1)); | 328 return((tmsize_t)(-1)); |
329 if (strip>=td->td_nstrips) | 329 if (strip>=td->td_nstrips) |
330 { | 330 { |
331 TIFFErrorExt(tif->tif_clientdata,module, | 331 TIFFErrorExt(tif->tif_clientdata,module, |
332 "%lu: Strip out of range, max %lu",(unsigned long)strip, | 332 "%lu: Strip out of range, max %lu",(unsigned long)strip, |
333 (unsigned long)td->td_nstrips); | 333 (unsigned long)td->td_nstrips); |
334 return((tmsize_t)(-1)); | 334 return((tmsize_t)(-1)); |
(...skipping 10 matching lines...) Expand all Loading... |
345 stripinplane=(strip%stripsperplane); | 345 stripinplane=(strip%stripsperplane); |
346 plane=(strip/stripsperplane); | 346 plane=(strip/stripsperplane); |
347 rows=td->td_imagelength-stripinplane*rowsperstrip; | 347 rows=td->td_imagelength-stripinplane*rowsperstrip; |
348 if (rows>rowsperstrip) | 348 if (rows>rowsperstrip) |
349 rows=rowsperstrip; | 349 rows=rowsperstrip; |
350 stripsize=TIFFVStripSize(tif,rows); | 350 stripsize=TIFFVStripSize(tif,rows); |
351 if (stripsize==0) | 351 if (stripsize==0) |
352 return((tmsize_t)(-1)); | 352 return((tmsize_t)(-1)); |
353 if ((size!=(tmsize_t)(-1))&&(size<stripsize)) | 353 if ((size!=(tmsize_t)(-1))&&(size<stripsize)) |
354 stripsize=size; | 354 stripsize=size; |
355 | 355 » if (!TIFFFillStrip(tif,strip)) |
356 » /* | |
357 » * discard those. | |
358 » * keep code modified by Changjin Gao. | |
359 » * Xiaochuan Liu 20100828. | |
360 » */ | |
361 » /*if (!TIFFFillStrip(tif,strip)) | |
362 return((tmsize_t)(-1)); | 356 return((tmsize_t)(-1)); |
363 if ((*tif->tif_decodestrip)(tif,buf,stripsize,plane)<=0) | 357 if ((*tif->tif_decodestrip)(tif,buf,stripsize,plane)<=0) |
364 return((tmsize_t)(-1)); | 358 return((tmsize_t)(-1)); |
365 (*tif->tif_postdecode)(tif,buf,stripsize); | 359 (*tif->tif_postdecode)(tif,buf,stripsize); |
366 » return(stripsize);*/ | 360 » return(stripsize); |
367 » | |
368 » /* | |
369 » * Changjin Gao 20110726 fixed decode error issue. | |
370 » * Test file: mantis #27308 020511-1158450.tiff. | |
371 » */ | |
372 » comp = COMPRESSION_NONE; | |
373 StripDecode: | |
374 » if (TIFFFillStrip(tif, strip) && (*tif->tif_decodestrip)(tif, buf, strip
size, plane) > 0) | |
375 » { | |
376 » » (*tif->tif_postdecode)(tif, buf, stripsize); | |
377 » » return (stripsize); | |
378 » } | |
379 » else | |
380 » { | |
381 » » if (comp < 9) | |
382 » » { | |
383 » » » TIFFSetField(tif, TIFFTAG_COMPRESSION, comp); | |
384 » » » TIFFSetField(tif, TIFFTAG_FAXMODE,FAXMODE_CLASSIC); | |
385 » » » comp++; | |
386 » » » goto StripDecode; | |
387 » » } | |
388 | |
389 » » return ((tsize_t) -1); | |
390 » } | |
391 } | 361 } |
392 | 362 |
393 static tmsize_t | 363 static tmsize_t |
394 TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size, | 364 TIFFReadRawStrip1(TIFF* tif, uint32 strip, void* buf, tmsize_t size, |
395 const char* module) | 365 const char* module) |
396 { | 366 { |
397 TIFFDirectory *td = &tif->tif_dir; | 367 TIFFDirectory *td = &tif->tif_dir; |
398 | 368 |
399 if (!_TIFFFillStriles( tif )) | 369 if (!_TIFFFillStriles( tif )) |
400 return ((tmsize_t)(-1)); | 370 return ((tmsize_t)(-1)); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
481 (unsigned long) td->td_nstrips); | 451 (unsigned long) td->td_nstrips); |
482 return ((tmsize_t)(-1)); | 452 return ((tmsize_t)(-1)); |
483 } | 453 } |
484 if (tif->tif_flags&TIFF_NOREADRAW) | 454 if (tif->tif_flags&TIFF_NOREADRAW) |
485 { | 455 { |
486 TIFFErrorExt(tif->tif_clientdata, module, | 456 TIFFErrorExt(tif->tif_clientdata, module, |
487 "Compression scheme does not support access to raw uncompres
sed data"); | 457 "Compression scheme does not support access to raw uncompres
sed data"); |
488 return ((tmsize_t)(-1)); | 458 return ((tmsize_t)(-1)); |
489 } | 459 } |
490 bytecount = td->td_stripbytecount[strip]; | 460 bytecount = td->td_stripbytecount[strip]; |
491 » if (bytecount <= 0) { | 461 » if ((int64)bytecount <= 0) { |
492 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) | 462 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) |
493 TIFFErrorExt(tif->tif_clientdata, module, | 463 TIFFErrorExt(tif->tif_clientdata, module, |
494 "%I64u: Invalid strip byte count, strip %lu", | 464 "%I64u: Invalid strip byte count, strip %lu", |
495 (unsigned __int64) bytecount, | 465 (unsigned __int64) bytecount, |
496 (unsigned long) strip); | 466 (unsigned long) strip); |
497 #else | 467 #else |
498 TIFFErrorExt(tif->tif_clientdata, module, | 468 TIFFErrorExt(tif->tif_clientdata, module, |
499 "%llu: Invalid strip byte count, strip %lu", | 469 "%llu: Invalid strip byte count, strip %lu", |
500 (unsigned long long) bytecount, | 470 (unsigned long long) bytecount, |
501 (unsigned long) strip); | 471 (unsigned long) strip); |
(...skipping 19 matching lines...) Expand all Loading... |
521 { | 491 { |
522 static const char module[] = "TIFFFillStrip"; | 492 static const char module[] = "TIFFFillStrip"; |
523 TIFFDirectory *td = &tif->tif_dir; | 493 TIFFDirectory *td = &tif->tif_dir; |
524 | 494 |
525 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) | 495 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) |
526 return 0; | 496 return 0; |
527 | 497 |
528 if ((tif->tif_flags&TIFF_NOREADRAW)==0) | 498 if ((tif->tif_flags&TIFF_NOREADRAW)==0) |
529 { | 499 { |
530 uint64 bytecount = td->td_stripbytecount[strip]; | 500 uint64 bytecount = td->td_stripbytecount[strip]; |
531 » » if (bytecount <= 0) { | 501 » » if ((int64)bytecount <= 0) { |
532 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) | 502 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) |
533 TIFFErrorExt(tif->tif_clientdata, module, | 503 TIFFErrorExt(tif->tif_clientdata, module, |
534 "Invalid strip byte count %I64u, strip %lu", | 504 "Invalid strip byte count %I64u, strip %lu", |
535 (unsigned __int64) bytecount, | 505 (unsigned __int64) bytecount, |
536 (unsigned long) strip); | 506 (unsigned long) strip); |
537 #else | 507 #else |
538 TIFFErrorExt(tif->tif_clientdata, module, | 508 TIFFErrorExt(tif->tif_clientdata, module, |
539 "Invalid strip byte count %llu, strip %lu", | 509 "Invalid strip byte count %llu, strip %lu", |
540 (unsigned long long) bytecount, | 510 (unsigned long long) bytecount, |
541 (unsigned long) strip); | 511 (unsigned long) strip); |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
824 { | 794 { |
825 static const char module[] = "TIFFFillTile"; | 795 static const char module[] = "TIFFFillTile"; |
826 TIFFDirectory *td = &tif->tif_dir; | 796 TIFFDirectory *td = &tif->tif_dir; |
827 | 797 |
828 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) | 798 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) |
829 return 0; | 799 return 0; |
830 | 800 |
831 if ((tif->tif_flags&TIFF_NOREADRAW)==0) | 801 if ((tif->tif_flags&TIFF_NOREADRAW)==0) |
832 { | 802 { |
833 uint64 bytecount = td->td_stripbytecount[tile]; | 803 uint64 bytecount = td->td_stripbytecount[tile]; |
834 » » if (bytecount <= 0) { | 804 » » if ((int64)bytecount <= 0) { |
835 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) | 805 #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) |
836 TIFFErrorExt(tif->tif_clientdata, module, | 806 TIFFErrorExt(tif->tif_clientdata, module, |
837 "%I64u: Invalid tile byte count, tile %lu", | 807 "%I64u: Invalid tile byte count, tile %lu", |
838 (unsigned __int64) bytecount, | 808 (unsigned __int64) bytecount, |
839 (unsigned long) tile); | 809 (unsigned long) tile); |
840 #else | 810 #else |
841 TIFFErrorExt(tif->tif_clientdata, module, | 811 TIFFErrorExt(tif->tif_clientdata, module, |
842 "%llu: Invalid tile byte count, tile %lu", | 812 "%llu: Invalid tile byte count, tile %lu", |
843 (unsigned long long) bytecount, | 813 (unsigned long long) bytecount, |
844 (unsigned long) tile); | 814 (unsigned long) tile); |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
953 _TIFFfree(tif->tif_rawdata); | 923 _TIFFfree(tif->tif_rawdata); |
954 tif->tif_rawdata = NULL; | 924 tif->tif_rawdata = NULL; |
955 tif->tif_rawdatasize = 0; | 925 tif->tif_rawdatasize = 0; |
956 } | 926 } |
957 if (bp) { | 927 if (bp) { |
958 tif->tif_rawdatasize = size; | 928 tif->tif_rawdatasize = size; |
959 tif->tif_rawdata = (uint8*) bp; | 929 tif->tif_rawdata = (uint8*) bp; |
960 tif->tif_flags &= ~TIFF_MYBUFFER; | 930 tif->tif_flags &= ~TIFF_MYBUFFER; |
961 } else { | 931 } else { |
962 tif->tif_rawdatasize = (tmsize_t)TIFFroundup_64((uint64)size, 10
24); | 932 tif->tif_rawdatasize = (tmsize_t)TIFFroundup_64((uint64)size, 10
24); |
963 » » if (tif->tif_rawdatasize==0) | 933 » » if (tif->tif_rawdatasize==0) { |
964 » » » tif->tif_rawdatasize=(tmsize_t)(-1); | 934 » » TIFFErrorExt(tif->tif_clientdata, module, |
| 935 » » » » "Invalid buffer size"); |
| 936 » » return (0); |
| 937 » » } |
965 tif->tif_rawdata = (uint8*) _TIFFmalloc(tif->tif_rawdatasize); | 938 tif->tif_rawdata = (uint8*) _TIFFmalloc(tif->tif_rawdatasize); |
966 tif->tif_flags |= TIFF_MYBUFFER; | 939 tif->tif_flags |= TIFF_MYBUFFER; |
967 } | 940 } |
968 if (tif->tif_rawdata == NULL) { | 941 if (tif->tif_rawdata == NULL) { |
969 TIFFErrorExt(tif->tif_clientdata, module, | 942 TIFFErrorExt(tif->tif_clientdata, module, |
970 "No space for data buffer at scanline %lu", | 943 "No space for data buffer at scanline %lu", |
971 (unsigned long) tif->tif_row); | 944 (unsigned long) tif->tif_row); |
972 tif->tif_rawdatasize = 0; | 945 tif->tif_rawdatasize = 0; |
973 return (0); | 946 return (0); |
974 } | 947 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1010 (uint16)(strip / td->td_stripsperimage))); | 983 (uint16)(strip / td->td_stripsperimage))); |
1011 } | 984 } |
1012 | 985 |
1013 /* | 986 /* |
1014 * Set state to appear as if a | 987 * Set state to appear as if a |
1015 * tile has just been read in. | 988 * tile has just been read in. |
1016 */ | 989 */ |
1017 static int | 990 static int |
1018 TIFFStartTile(TIFF* tif, uint32 tile) | 991 TIFFStartTile(TIFF* tif, uint32 tile) |
1019 { | 992 { |
| 993 static const char module[] = "TIFFStartTile"; |
1020 TIFFDirectory *td = &tif->tif_dir; | 994 TIFFDirectory *td = &tif->tif_dir; |
| 995 uint32 howmany32; |
1021 | 996 |
1022 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) | 997 if (!_TIFFFillStriles( tif ) || !tif->tif_dir.td_stripbytecount) |
1023 return 0; | 998 return 0; |
1024 | 999 |
1025 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { | 1000 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { |
1026 if (!(*tif->tif_setupdecode)(tif)) | 1001 if (!(*tif->tif_setupdecode)(tif)) |
1027 return (0); | 1002 return (0); |
1028 tif->tif_flags |= TIFF_CODERSETUP; | 1003 tif->tif_flags |= TIFF_CODERSETUP; |
1029 } | 1004 } |
1030 tif->tif_curtile = tile; | 1005 tif->tif_curtile = tile; |
1031 » tif->tif_row = | 1006 howmany32=TIFFhowmany_32(td->td_imagewidth, td->td_tilewidth); |
1032 » (tile % TIFFhowmany_32(td->td_imagewidth, td->td_tilewidth)) * | 1007 if (howmany32 == 0) { |
1033 » » td->td_tilelength; | 1008 TIFFErrorExt(tif->tif_clientdata,module,"Zero tiles"); |
1034 » tif->tif_col = | 1009 return 0; |
1035 » (tile % TIFFhowmany_32(td->td_imagelength, td->td_tilelength)) * | 1010 } |
1036 » » td->td_tilewidth; | 1011 » tif->tif_row = (tile % howmany32) * td->td_tilelength; |
| 1012 howmany32=TIFFhowmany_32(td->td_imagelength, td->td_tilelength); |
| 1013 if (howmany32 == 0) { |
| 1014 TIFFErrorExt(tif->tif_clientdata,module,"Zero tiles"); |
| 1015 return 0; |
| 1016 } |
| 1017 » tif->tif_col = (tile % howmany32) * td->td_tilewidth; |
1037 tif->tif_flags &= ~TIFF_BUF4WRITE; | 1018 tif->tif_flags &= ~TIFF_BUF4WRITE; |
1038 if (tif->tif_flags&TIFF_NOREADRAW) | 1019 if (tif->tif_flags&TIFF_NOREADRAW) |
1039 { | 1020 { |
1040 tif->tif_rawcp = NULL; | 1021 tif->tif_rawcp = NULL; |
1041 tif->tif_rawcc = 0; | 1022 tif->tif_rawcc = 0; |
1042 } | 1023 } |
1043 else | 1024 else |
1044 { | 1025 { |
1045 tif->tif_rawcp = tif->tif_rawdata; | 1026 tif->tif_rawcp = tif->tif_rawdata; |
1046 tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[tile]; | 1027 tif->tif_rawcc = (tmsize_t)td->td_stripbytecount[tile]; |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1104 } | 1085 } |
1105 | 1086 |
1106 /* vim: set ts=8 sts=8 sw=8 noet: */ | 1087 /* vim: set ts=8 sts=8 sw=8 noet: */ |
1107 /* | 1088 /* |
1108 * Local Variables: | 1089 * Local Variables: |
1109 * mode: c | 1090 * mode: c |
1110 * c-basic-offset: 8 | 1091 * c-basic-offset: 8 |
1111 * fill-column: 78 | 1092 * fill-column: 78 |
1112 * End: | 1093 * End: |
1113 */ | 1094 */ |
1114 | |
OLD | NEW |