portable serializer: use signed char for size

This commit is contained in:
kenshi84 2017-01-06 08:37:15 +09:00
parent dd580d7bc7
commit 9d1d3a454e
3 changed files with 7 additions and 4 deletions

View file

@ -14,6 +14,7 @@
#include <boost/config.hpp> #include <boost/config.hpp>
#include <boost/cstdint.hpp> #include <boost/cstdint.hpp>
#include <boost/static_assert.hpp> #include <boost/static_assert.hpp>
#include <boost/archive/archive_exception.hpp>
#include <climits> #include <climits>
#if CHAR_BIT != 8 #if CHAR_BIT != 8
@ -37,7 +38,9 @@ enum portable_binary_archive_flags {
//#endif //#endif
inline void inline void
reverse_bytes(char size, char *address){ reverse_bytes(signed char size, char *address){
if (size <= 0)
throw archive_exception(archive_exception::other_exception);
char * first = address; char * first = address;
char * last = first + size - 1; char * last = first + size - 1;
for(;first < last;++first, --last){ for(;first < last;++first, --last){

View file

@ -234,7 +234,7 @@ namespace boost { namespace archive {
inline void inline void
portable_binary_iarchive::load_impl(boost::intmax_t & l, char maxsize){ portable_binary_iarchive::load_impl(boost::intmax_t & l, char maxsize){
char size; signed char size;
l = 0; l = 0;
this->primitive_base_t::load(size); this->primitive_base_t::load(size);

View file

@ -225,7 +225,7 @@ portable_binary_oarchive::save_impl(
const boost::intmax_t l, const boost::intmax_t l,
const char maxsize const char maxsize
){ ){
char size = 0; signed char size = 0;
if(l == 0){ if(l == 0){
this->primitive_base_t::save(size); this->primitive_base_t::save(size);
@ -245,7 +245,7 @@ portable_binary_oarchive::save_impl(
}while(ll != 0); }while(ll != 0);
this->primitive_base_t::save( this->primitive_base_t::save(
static_cast<char>(negative ? -size : size) static_cast<signed char>(negative ? -size : size)
); );
if(negative) if(negative)