diff --git a/include/boost/archive/impl/basic_text_iprimitive.ipp b/include/boost/archive/impl/basic_text_iprimitive.ipp index 13dfdce1..21a3d6b4 100644 --- a/include/boost/archive/impl/basic_text_iprimitive.ipp +++ b/include/boost/archive/impl/basic_text_iprimitive.ipp @@ -72,13 +72,19 @@ void basic_text_iprimitive::load_binary( ); char * caddr = static_cast(address); + unsigned int padding = 2 - count % 3; // take care that we don't increment anymore than necessary while(--count > 0){ *caddr++ = static_cast(*ti_begin); ++ti_begin; } - *caddr = static_cast(*ti_begin); + *caddr++ = static_cast(*ti_begin); + + if(padding > 1) + ++ti_begin; + if(padding > 2) + ++ti_begin; } template diff --git a/include/boost/archive/impl/basic_text_oprimitive.ipp b/include/boost/archive/impl/basic_text_oprimitive.ipp index 593b0c86..71234277 100644 --- a/include/boost/archive/impl/basic_text_oprimitive.ipp +++ b/include/boost/archive/impl/basic_text_oprimitive.ipp @@ -52,13 +52,20 @@ void basic_text_oprimitive::save_binary( > base64_text; + boost::archive::iterators::ostream_iterator oi(os); std::copy( base64_text(BOOST_MAKE_PFTO_WRAPPER(static_cast(address))), base64_text( BOOST_MAKE_PFTO_WRAPPER(static_cast(address) + count) ), - boost::archive::iterators::ostream_iterator(os) + oi ); + unsigned int padding = 2 - count % 3; + if(padding > 1) + *oi = '='; + if(padding > 2) + *oi = '='; + } template diff --git a/include/boost/archive/impl/basic_xml_oarchive.ipp b/include/boost/archive/impl/basic_xml_oarchive.ipp index 71823af9..1f8d3e7a 100644 --- a/include/boost/archive/impl/basic_xml_oarchive.ipp +++ b/include/boost/archive/impl/basic_xml_oarchive.ipp @@ -111,8 +111,6 @@ template void basic_xml_oarchive::save_override(const version_type & t, int) { int i = t.t; // extra .t is for borland - if(0 == i) - return; write_attribute(VERSION, i); } template