Opened 12 years ago

Closed 5 years ago

#1685 closed defect (wontfix) -s for SURFER does not work in grass7

Reported by: helena Owned by: grass-dev@…
Priority: minor Milestone: 7.0.7
Component: Raster Version: svn-trunk
Keywords: raster import, Surfer, Cc:
CPU: OSX/Intel Platform: All

Description -s for SURFER gives ERROR: Unable to seek in GRASS7

same file can be imported using

should we keep the -s flag in and fix the bug or leave for GRASS ascii rasters only?


Attachments (1) (418 bytes ) - added by mmetz 12 years ago. fseek patch for trunk

Download all attachments as: .zip

Change History (10)

comment:1 by hamish, 12 years ago

Keywords: added
Platform: MacOSXAll

the error message in g7 lib/gis/seek.c is now just "Unable to seek"; it's not a fundamental limitation just a regular bug AFAICT.

I found a binary Surfer6 grid file sitting on an old drive, and could convert it to an ascii grid:

  gdal_translate -of GSAG helens2.grd helens2a.grd -s in=helens2a.grd out=helens2

and I can reproduce your error. It happens in on this G_fseek(), while processing the last row of the map.

    for (row = 0; row < nrows; row += 1) {
	fread(rast, Rast_cell_size(data_type), ncols, ft);
	Rast_put_row(cf, rast, data_type);
	G_fseek(ft, sz, SEEK_CUR);


G_ftell(ft) reports the position as 1308 but G_fseek() wants to move sz=-2616 bytes (negative as surfer ascii grids are stored bottom to top), and runs past the end (i.e. start) of the file. note 1308*2 = 2616. I presume the array is off by 1 row and the first line of data is either repeated or empty.

here is row, nrows, sz, and on the newline G_ftell() position for the last few rows:

460 466  -2616
461 466  -2616
462 466  -2616
463 466  -2616
464 466  -2616
465 466  -2616
ERROR: Unable to seek

The import works fine in grass 6.x.


by mmetz, 12 years ago

Attachment: added fseek patch for trunk

in reply to:  1 comment:2 by mmetz, 12 years ago

Replying to hamish:

the error message in g7 lib/gis/seek.c is now just "Unable to seek"; it's not a fundamental limitation just a regular bug AFAICT.

In GRASS 6.x, would have the same bug if it would check the return value of fseek() (it might be a good idea to check the return value of fread() as well). The attached fix is simply to not fseek after the last row has been read from the input file, that must fail if direction < 0. For sz == 0, fseek from SEEK_CUR has no effect anyway.

Markus M

comment:3 by neteler, 10 years ago

See also #1848 for another G_fseek() ticket.

comment:4 by wenzeslaus, 9 years ago

I suppose this is still valid, patch was not applied:

  • grass/trunk/raster/

Any SURFER file which could be used for a test?

comment:5 by martinl, 8 years ago


comment:6 by martinl, 8 years ago

Ping, data for testing is needed otherwise I suggest to close ticket as 'wontfix'

comment:7 by neteler, 8 years ago


comment:8 by neteler, 6 years ago


comment:9 by martinl, 5 years ago

Resolution: wontfix
Status: newclosed
Note: See TracTickets for help on using tickets.