File netpbm-use-byrow-when-needed.patch of Package netpbm.32454
Index: netpbm-10.66.3/converter/other/tifftopnm.c
===================================================================
--- netpbm-10.66.3.orig/converter/other/tifftopnm.c
+++ netpbm-10.66.3/converter/other/tifftopnm.c
@@ -1314,7 +1314,7 @@ convertRasterByRows(pnmOut * const
-static void
+static int
warnBrokenTiffLibrary(TIFF * const tiffP) {
/* TIFF library bug:
@@ -1344,6 +1344,7 @@ warnBrokenTiffLibrary(TIFF * const tiffP
unsigned short tiffOrientation;
int present;
+ int broken = false;
present = TIFFGetField(tiffP, TIFFTAG_ORIENTATION, &tiffOrientation);
if (present) {
switch (tiffOrientation) {
@@ -1353,10 +1354,12 @@ warnBrokenTiffLibrary(TIFF * const tiffP
case ORIENTATION_LEFTBOT:
pm_message("WARNING: This TIFF image has an orientation that "
"most TIFF libraries convert incorrectly. "
- "Use -byrow to circumvent.");
+ "Using -byrow to circumvent.");
+ broken = true;
break;
}
}
+ return broken;
}
@@ -1448,8 +1451,6 @@ convertRasterInMemory(pnmOut * con
if (verbose)
pm_message("Converting in memory ...");
- warnBrokenTiffLibrary(tif);
-
getTiffDimensions(tif, &cols, &rows);
if (rows == 0 || cols == 0)
@@ -1560,7 +1561,7 @@ convertImage(TIFF * const ti
xelval maxval;
xel colormap[MAXCOLORS];
unsigned short fillorder;
- bool flipOk, noflipOk;
+ bool flipOk, noflipOk, byrow;
pnmOut pnmOut;
readDirectory(tifP, cmdline.headerdump, &tiffDir);
@@ -1570,15 +1571,21 @@ convertImage(TIFF * const ti
analyzeImageType(tifP, tiffDir.bps, tiffDir.spp, tiffDir.photomet,
&maxval, &format, colormap, cmdline.headerdump, cmdline);
+ byrow = cmdline.byrow;
+ if (warnBrokenTiffLibrary(tifP)) {
+ /* force byrow true: http://bugzilla.maptools.org/show_bug.cgi?id=2654#c9 */
+ byrow = true;
+ }
+
pnmOut_init(imageoutFileP, alphaFileP, tiffDir.width, tiffDir.height,
tiffDir.orientation, maxval, format, maxval,
- cmdline.byrow, cmdline.orientraw,
+ byrow, cmdline.orientraw,
cmdline.verbose,
&flipOk, &noflipOk,
&pnmOut);
convertRaster(&pnmOut, tifP, tiffDir, maxval,
- fillorder, colormap, cmdline.byrow, flipOk, noflipOk,
+ fillorder, colormap, byrow, flipOk, noflipOk,
cmdline.verbose);
pnmOut_term(&pnmOut, cmdline.verbose);