|
Boost : |
From: Stefan van den Oord (stefan.vandenoord_at_[hidden])
Date: 2006-06-23 08:42:31
Hi,
According to the boost web site, this mailing list is the preferred
way to report bugs, so I subscribed and send you this:
I believe the example
/boost/libs/serialization/example/portable_binary_oarchive.hpp doesn't
work correctly. On my platform, Mac OS X, the endian conversion is
performed. For a small negative number (say -42l), the endian
conversion results in a big negative number (-687865857). The size,
however, is computed _before_ the endian conversion, so it is 1 (one)
in this case, which is not high enough to hold the converted long.
I guess the solution is to do the endian conversion first, then the
size computation. That seems to work for me. Based on the 1_33_1
sources, my version of save_impl is now:
void save_impl(long l){
// we choose to use litle endian
#ifdef BOOST_BIG_ENDIAN
char * first = static_cast<char *>(static_cast<void *>(& l));
char * last = first + sizeof(l) - 1;
for(;first < last;++first, --last)
{
char x = *last;
*last = *first;
*first = x;
}
#endif
long ll = l;
char size = 0;
do{
ll >>= 8;
++size;
}while(ll != -1 && ll != 0);
os.put(size);
save_binary(& l, size);
}
I hope this helps in improving the example.
Regards,
Stefan van den Oord
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk