Boost logo

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, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk