[Gpsbabel-code] last call + coto fix
Brought to you by:
robertl
From: Robert L. <rob...@us...> - 2005-08-03 06:28:16
|
I *really* want to cut this release soon (and if it's not in the next day or so, it won't be for another week and a half at the soonest) so this is final call. Has every platform cared about by anybody been exercised? (Please update your tree and check.) Are all the patches in the tree that you expect to be in? I have cut over the new http://www.gpsbabel.org/capabilities.html and have updated all the web & doc that are going to make it in this round. To speed things along, I took a swing at fixing coto. Fortunately(?) via the vagaries of weak typing, we never actually _use_ the members of record_wpt that were causing the largish padding as anything other than an opaque type. So I demoted them to arrays that we can guarantee are properly sized. Then I ran into the next problem. There is an endianness problem. in the 'renamedCategories' member. The bytes in the reference file (was it REALLY made by coto?) are "1f 00" but the code sets ai->renamedCategories = 31. On a little endian system, those are the same, but on a big endian system, they're not. Either the reference file is wrong or the code is wrong and I can't tell which. I went with the assumption that the reference file wasn't really written by Coto and figured the code was wrong and fixed it thusly. The more I think about it, the more I suspect that the reference file wasn't really a file created by Coto, though...Tobias, please cast a vote on this issue quickly. Thanx, RJL Index: coto.c =================================================================== RCS file: /cvsroot/gpsbabel/gpsbabel/coto.c,v retrieving revision 1.5 diff -p -u -r1.5 coto.c --- coto.c 29 Jul 2005 19:31:42 -0000 1.5 +++ coto.c 3 Aug 2005 05:48:09 -0000 @@ -66,7 +66,8 @@ struct record_track { #define MAX_MARKER_NAME_LENGTH 20 struct record_wpt { - double lon, lat; + char lon[8]; + char lat[8]; char name[MAX_MARKER_NAME_LENGTH]; }; @@ -295,8 +296,7 @@ coto_prepare_wpt_write(struct pdb *opdb) opdb->appinfo = calloc(APPINFO_PACKED_SIZE,1); ai = (struct appinfo *) opdb->appinfo; - - ai->renamedCategories = 31; // Don't ask me why... + be_write16(&ai->renamedCategories, 31); // Don't ask me why... if (zerocat) strncpy(ai->categories[0], zerocat, 16); else |