diff --git a/src/misc/bitSet.cpp b/src/misc/bitSet.cpp index 2da4fd8..2b485c0 100644 --- a/src/misc/bitSet.cpp +++ b/src/misc/bitSet.cpp @@ -322,12 +322,14 @@ namespace epics { namespace pvData { SerializeHelper::writeSize(len, buffer, flusher); flusher->ensureBuffer(len); - - for (uint32 i = 0; i < n - 1; i++) + + n = len / 8; + for (uint32 i = 0; i < n; i++) buffer->putLong(words[i]); - - for (uint64 x = words[n - 1]; x != 0; x >>= 8) - buffer->putByte((int8) (x & 0xff)); + + if (n < wordsInUse) + for (uint64 x = words[wordsInUse - 1]; x != 0; x >>= 8) + buffer->putByte((int8) (x & 0xff)); } void BitSet::deserialize(ByteBuffer* buffer, DeserializableControl* control) { diff --git a/testApp/misc/testBitSet.cpp b/testApp/misc/testBitSet.cpp index 36fc645..9b7c7c5 100644 --- a/testApp/misc/testBitSet.cpp +++ b/testApp/misc/testBitSet.cpp @@ -7,6 +7,7 @@ /* Author: Matej Sekoranja Date: 2010.10.18 */ #include +#include #include #include #include @@ -14,7 +15,10 @@ #include #include +#include + #include +#include #include #include @@ -148,12 +152,116 @@ static void testOperators() testOk1(str == "{2, 128}"); } +static void tofrostring(const BitSet& in, const char *expect, size_t elen, int byteOrder) +{ + { + std::vector buf; + serializeToVector(&in, byteOrder, buf); + + std::ostringstream astrm, estrm; + + bool match = buf.size()==elen; + if(!match) testDiag("Lengths differ %u != %u", (unsigned)buf.size(), (unsigned)elen); + for(size_t i=0, e=std::min(elen, buf.size()); i