X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8414a40c52191d4c7cfeea74df22d9d64cbec415..63e1921d0be4956ab729735189ccf637773a7e27:/src/tiff/tools/thumbnail.c?ds=sidebyside diff --git a/src/tiff/tools/thumbnail.c b/src/tiff/tools/thumbnail.c index 6022514c11..b0a66a7b7b 100644 --- a/src/tiff/tools/thumbnail.c +++ b/src/tiff/tools/thumbnail.c @@ -35,6 +35,10 @@ # include #endif +#ifdef NEED_LIBPORT +# include "libport.h" +#endif + #include "tiffio.h" #ifndef HAVE_GETOPT @@ -100,6 +104,8 @@ main(int argc, char* argv[]) if (out == NULL) return 2; in = TIFFOpen(argv[optind], "r"); + if( in == NULL ) + return 2; thumbnail = (uint8*) _TIFFmalloc(tnw * tnh); if (!thumbnail) { @@ -159,6 +165,16 @@ cpTag(TIFF* in, TIFF* out, uint16 tag, uint16 count, TIFFDataType type) CopyField(tag, longv); } break; + case TIFF_LONG8: + { uint64 longv8; + CopyField(tag, longv8); + } + break; + case TIFF_SLONG8: + { int64 longv8; + CopyField(tag, longv8); + } + break; case TIFF_RATIONAL: if (count == 1) { float floatv; @@ -182,7 +198,11 @@ cpTag(TIFF* in, TIFF* out, uint16 tag, uint16 count, TIFFDataType type) CopyField(tag, doubleav); } break; - default: + case TIFF_IFD8: + { toff_t ifd8; + CopyField(tag, ifd8); + } + break; default: TIFFError(TIFFFileName(in), "Data type %d is not supported, tag %d skipped.", tag, type); @@ -230,7 +250,7 @@ static struct cpTag { { TIFFTAG_DATETIME, 1, TIFF_ASCII }, { TIFFTAG_ARTIST, 1, TIFF_ASCII }, { TIFFTAG_HOSTCOMPUTER, 1, TIFF_ASCII }, - { TIFFTAG_WHITEPOINT, 1, TIFF_RATIONAL }, + { TIFFTAG_WHITEPOINT, 2, TIFF_RATIONAL }, { TIFFTAG_PRIMARYCHROMATICITIES, (uint16) -1,TIFF_RATIONAL }, { TIFFTAG_HALFTONEHINTS, 2, TIFF_SHORT }, { TIFFTAG_BADFAXLINES, 1, TIFF_LONG }, @@ -266,18 +286,18 @@ cpStrips(TIFF* in, TIFF* out) if (buf) { tstrip_t s, ns = TIFFNumberOfStrips(in); - tsize_t *bytecounts; + uint64 *bytecounts; TIFFGetField(in, TIFFTAG_STRIPBYTECOUNTS, &bytecounts); for (s = 0; s < ns; s++) { - if (bytecounts[s] > bufsize) { - buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[s]); + if (bytecounts[s] > (uint64) bufsize) { + buf = (unsigned char *)_TIFFrealloc(buf, (tmsize_t)bytecounts[s]); if (!buf) goto bad; - bufsize = bytecounts[s]; + bufsize = (tmsize_t)bytecounts[s]; } - if (TIFFReadRawStrip(in, s, buf, bytecounts[s]) < 0 || - TIFFWriteRawStrip(out, s, buf, bytecounts[s]) < 0) { + if (TIFFReadRawStrip(in, s, buf, (tmsize_t)bytecounts[s]) < 0 || + TIFFWriteRawStrip(out, s, buf, (tmsize_t)bytecounts[s]) < 0) { _TIFFfree(buf); return 0; } @@ -300,18 +320,18 @@ cpTiles(TIFF* in, TIFF* out) if (buf) { ttile_t t, nt = TIFFNumberOfTiles(in); - tsize_t *bytecounts; + uint64 *bytecounts; TIFFGetField(in, TIFFTAG_TILEBYTECOUNTS, &bytecounts); for (t = 0; t < nt; t++) { - if (bytecounts[t] > bufsize) { - buf = (unsigned char *)_TIFFrealloc(buf, bytecounts[t]); + if (bytecounts[t] > (uint64) bufsize) { + buf = (unsigned char *)_TIFFrealloc(buf, (tmsize_t)bytecounts[t]); if (!buf) goto bad; - bufsize = bytecounts[t]; + bufsize = (tmsize_t)bytecounts[t]; } - if (TIFFReadRawTile(in, t, buf, bytecounts[t]) < 0 || - TIFFWriteRawTile(out, t, buf, bytecounts[t]) < 0) { + if (TIFFReadRawTile(in, t, buf, (tmsize_t)bytecounts[t]) < 0 || + TIFFWriteRawTile(out, t, buf, (tmsize_t)bytecounts[t]) < 0) { _TIFFfree(buf); return 0; } @@ -553,7 +573,7 @@ generateThumbnail(TIFF* in, TIFF* out) uint16 bps, spp; tsize_t rowsize, rastersize; tstrip_t s, ns = TIFFNumberOfStrips(in); - uint32 diroff[1]; + toff_t diroff[1]; TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &sw); TIFFGetField(in, TIFFTAG_IMAGELENGTH, &sh); @@ -594,7 +614,7 @@ generateThumbnail(TIFF* in, TIFF* out) cpTag(in, out, TIFFTAG_IMAGEDESCRIPTION, (uint16) -1, TIFF_ASCII); cpTag(in, out, TIFFTAG_DATETIME, (uint16) -1, TIFF_ASCII); cpTag(in, out, TIFFTAG_HOSTCOMPUTER, (uint16) -1, TIFF_ASCII); - diroff[0] = 0; + diroff[0] = 0UL; TIFFSetField(out, TIFFTAG_SUBIFD, 1, diroff); return (TIFFWriteEncodedStrip(out, 0, thumbnail, tnw*tnh) != -1 && TIFFWriteDirectory(out) != -1); @@ -630,3 +650,10 @@ usage(void) } /* vim: set ts=8 sts=8 sw=8 noet: */ +/* + * Local Variables: + * mode: c + * c-basic-offset: 8 + * fill-column: 78 + * End: + */