Glynn Clements wrote:
Right. The files are always written big-endian, so the high word will
always be first in the file.
I'm not so sure about that, why is byte order stored in the topo header?
Byte order for writing out is determined just before writing topo/cidx.
Okay; maybe that's just the internal default. I'm looking at
dig_init_portable(), which copies the *_cnvrt arrays for big-endian
and reverses them for little-endian.
I noticed that too, after my reply. Sometimes I can't keep up with
reading that code.
I don't know why that code needs to be so obtuse.
That vector lib code has some potential for cleaning up...
As well as checking that the high word is zero, you also need to check
that the low word is <= 0x7fffffff (off_t is signed, hence the limit
being 2GiB not 4GiB).
OK. Additionally the whole thing should not be negative, that would be
an invalid offset.
I'm assuming that the individual words are treated as unsigned.
Glynn, your idea to set off_t size according to the size of the coor
file was *absolutely brillant*!!!
That means that offset values will be stored as 64bit only if the coor
file is larger than 2GB and only if the native off_t size supports that.
That also means that the topo/cidx files can stay 100% identical to the
current version if the coor file is < 2GB. Otherwise they get changed
(larger headers), but then the current libs don't have a chance to read
this large vector anyway, exiting with an error message. That also means
we don't have to make a plan on how to read 64bit offset values when the
libs support only 32bit values, because this indicates a large coor file
that is unreadable with a 32bit-off_t lib anyway.
I have implemented dig__fread_port_O() and dig__fwrite_port_O() with
variable off_t size, added the appropriate tests to diglib/test.c and
the tests are passed (only that test.tmp is now larger than test.ok). It
is easy to determine the appropriate off_t size and adjust the topo/cidx
headers accordingly.
G_fseek and G_ftell also work, thanks!
BTW, display of grass7 with cairo appears to be half the speed of
grass65, I think it was faster last week (can't remember the revision).
Not sure if this justifies a complaint.
_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev