From fbcdd4fa5ee735256187a1136172044cfd8cd0fa Mon Sep 17 00:00:00 2001 From: Daniel Larimer Date: Sat, 6 Jul 2013 22:07:12 -0400 Subject: [PATCH] various bug fixes --- include/fc/array.hpp | 4 ++-- include/fc/interprocess/mmap_struct.hpp | 4 ++-- include/fc/variant.hpp | 4 ++-- src/interprocess/file_mapping.cpp | 2 ++ src/interprocess/mmap_struct.cpp | 6 ++++++ 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/include/fc/array.hpp b/include/fc/array.hpp index 2a2002b..2a3189f 100644 --- a/include/fc/array.hpp +++ b/include/fc/array.hpp @@ -31,11 +31,11 @@ namespace fc { template bool operator == ( const array& a, const array& b ) - { return 0 == memcmp( a.data, b.data, N ); } + { return 0 == memcmp( a.data, b.data, N*sizeof(T) ); } template bool operator != ( const array& a, const array& b ) - { return 0 != memcmp( a.data, b.data, N ); } + { return 0 != memcmp( a.data, b.data, N*sizeof(T) ); } template void to_variant( const array& bi, variant& v ) diff --git a/include/fc/interprocess/mmap_struct.hpp b/include/fc/interprocess/mmap_struct.hpp index 34dd8c4..0913deb 100644 --- a/include/fc/interprocess/mmap_struct.hpp +++ b/include/fc/interprocess/mmap_struct.hpp @@ -13,8 +13,8 @@ namespace fc class mmap_struct_base { public: - size_t size()const { return _mapped_region->get_size(); } - void flush() { _mapped_region->flush(); } + size_t size()const; + void flush(); protected: void open( const fc::path& file, size_t s, bool create ); diff --git a/include/fc/variant.hpp b/include/fc/variant.hpp index ed5c02b..766f14b 100644 --- a/include/fc/variant.hpp +++ b/include/fc/variant.hpp @@ -261,7 +261,7 @@ namespace fc { std::vector vars(var.size()); size_t i = 0; - for( auto itr = var.begin(); itr != var.end(); ++itr ) + for( auto itr = var.begin(); itr != var.end(); ++itr, ++i ) vars[i] = variant(*itr); vo = vars; } @@ -279,7 +279,7 @@ namespace fc { std::vector vars(var.size()); size_t i = 0; - for( auto itr = var.begin(); itr != var.end(); ++itr ) + for( auto itr = var.begin(); itr != var.end(); ++itr, ++i ) vars[i] = variant(*itr); vo = vars; } diff --git a/src/interprocess/file_mapping.cpp b/src/interprocess/file_mapping.cpp index 7ff557a..d82a37b 100644 --- a/src/interprocess/file_mapping.cpp +++ b/src/interprocess/file_mapping.cpp @@ -4,6 +4,8 @@ #include namespace fc { + + file_mapping::file_mapping( const char* file, mode_t m ) :my(file, m == read_only ? boost::interprocess::read_only : boost::interprocess::read_write ){} file_mapping::~file_mapping(){} diff --git a/src/interprocess/mmap_struct.cpp b/src/interprocess/mmap_struct.cpp index 7ae397d..4666a4f 100644 --- a/src/interprocess/mmap_struct.cpp +++ b/src/interprocess/mmap_struct.cpp @@ -7,6 +7,12 @@ namespace fc { namespace detail { + size_t mmap_struct_base::size()const { return _mapped_region->get_size(); } + void mmap_struct_base::flush() + { + _mapped_region->flush(); + } + void mmap_struct_base::open( const fc::path& file, size_t s, bool create ) { if( !fc::exists( file ) || fc::file_size(file) != s )