[Gdal-dev] Problem of creation with Gtiff driver on Solaris

Frank Warmerdam fwarmerdam at gmail.com
Thu Sep 8 13:24:25 EDT 2005


On 9/8/05, Frédéric Trastour <support at geoimage.fr> wrote:
> Hello,
> 
> I am trying to find why GDAL 1.3.0 with the internal libtiff on Solaris doesn't
> create valid GEOtiff.
> 

Frédéric,

Several years ago I applied the following patch to libtiff's tif_open.c. 
It was recently removed as there seemed to be no sensible reason
for it, and we though that modern Solaris surely would not still
have such a problem (assuming I had diagnosed it correctly in the
first place).  I am now suspecting that was a mistake. 

Try the patch (adding TIFFSeekFile(tif,0,SEEK_SET) before the
WriteOK call and see if that helps. 

warmerda at gdal2200[108]% cvs diff -r1.5 -r1.6 tif_open.c
Index: tif_open.c
===================================================================
RCS file: /cvs/maptools/cvsroot/libtiff/libtiff/tif_open.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- tif_open.c  30 Sep 2000 04:18:55 -0000      1.5
+++ tif_open.c  20 Jul 2001 02:22:46 -0000      1.6
@@ -1,4 +1,4 @@
-/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_open.c,v 1.5
2000/09/30 04:18:55 warmerda Exp $ */
+/* $Header: /cvs/maptools/cvsroot/libtiff/libtiff/tif_open.c,v 1.6
2001/07/20 02:22:46 warmerda Exp $ */
 
 /*
  * Copyright (c) 1988-1997 Sam Leffler
@@ -285,6 +285,15 @@
                if (tif->tif_flags & TIFF_SWAB)
                        TIFFSwabShort(&tif->tif_header.tiff_version);
                tif->tif_header.tiff_diroff = 0;        /* filled in later */
+
+                /*
+                 * This seek shouldn't be necessary, but I have had some
+                 * crazy problems with a failed fseek() on Solaris leaving
+                 * the current file pointer out of whack when an fwrite()
+                 * is done. 
+                 */
+                TIFFSeekFile( tif, 0, SEEK_SET );
+
                if (!WriteOK(tif, &tif->tif_header, sizeof (TIFFHeader))) {
                        TIFFError(name, "Error writing TIFF header");
                        goto bad;




> Here is a trace (some printfs added in tif_vsi.c) of a gdal_translate execution:
> 
> GDAL/GEO: GEODataset::Open :im1x1.geo
> GDAL: GDALOpen(im1x1.geo) succeeds as GEO.
> Input file size is 1, 1
> 0.TIFFOpen FILENAME=im11.TIF, MODE=w+b --> FILE=fe437c64
> tiffReadProc FILE=fe437c64, BUF=2d000, SIZE=8 -->0 [POS=0]
> ** tiffWriteProc FILE=fe437c64, BUF=2d000, SIZE=8 -->8 [POS=-8184] // A 'tell'
> just after the write returns -8184 instead of 8 !
> 100 - done.
> ** tiffSeekProc FILE=fe437c64, OFFSET=0, WHENCE=SEEK_END --> 0 // 0 instead of 8
> tiffWriteProc FILE=fe437c64, BUF=4af00, SIZE=1 -->1 [POS=1]
> tiffSeekProc FILE=fe437c64, OFFSET=0, WHENCE=SEEK_END --> 1
> tiffSeekProc FILE=fe437c64, OFFSET=4, WHENCE=SEEK_SET --> 4
> tiffWriteProc FILE=fe437c64, BUF=ffb8dc5c, SIZE=4 -->4 [POS=8]
> tiffSeekProc FILE=fe437c64, OFFSET=164, WHENCE=SEEK_SET --> 164
> tiffSeekProc FILE=fe437c64, OFFSET=164, WHENCE=SEEK_SET --> 164
> tiffWriteProc FILE=fe437c64, BUF=2f110, SIZE=128 -->128 [POS=292]
> tiffSeekProc FILE=fe437c64, OFFSET=2, WHENCE=SEEK_SET --> 2
> tiffWriteProc FILE=fe437c64, BUF=ffb8dcd6, SIZE=2 -->2 [POS=4]
> tiffWriteProc FILE=fe437c64, BUF=4af00, SIZE=156 -->156 [POS=160]
> tiffWriteProc FILE=fe437c64, BUF=ffb8dcd0, SIZE=4 -->4 [POS=164]
> tiffCloseProc FILE=fe437c64
> 
> ERROR 4: `im11.TIF' not recognised as a supported file format.
> ERROR 4: `im11.TIF' not recognised as a supported file format.
> 
> GDAL: GDALDeregister_GTiff() called.
> 
> As you can see there are two strange results (marked with **).
> Any ideas about that ?
> 
> Does it work on any other unix platforms ?
> 
> Thanks
> Frédéric.
> _________________________________________________________________
> Frédéric Trastour - SpacEyes - dev at spaceyes.fr
> 
> _______________________________________________
> Gdal-dev mailing list
> Gdal-dev at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/gdal-dev
> 
> 


-- 
---------------------------------------+--------------------------------------
I set the clouds in motion - turn up   | Frank Warmerdam, warmerdam at pobox.com
light and sound - activate the windows | http://pobox.com/~warmerdam
and watch the world go round - Rush    | Geospatial Programmer for Rent




More information about the Gdal-dev mailing list