From: Loic Dachary Date: Sun, 17 Feb 2013 08:41:09 +0000 (+0100) Subject: buffer::ptr::cmp only compares up to the smallest length X-Git-Tag: v0.58~47 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d20bf07eca9583447fb6fc98b09f321979bac8ee;p=ceph.git buffer::ptr::cmp only compares up to the smallest length When running bufferptr a("A", 1); bufferptr ab("AB", 2); a.cmp(ab); it returned zero because. cmp only compared up to the length of the smallest buffer and returned if they are identical. The function is modified to compare the length of the buffers instead of returning. http://tracker.ceph.com/issues/4170 refs #4170 Signed-off-by: Loic Dachary --- diff --git a/src/common/buffer.cc b/src/common/buffer.cc index e10d6c9038c2..df50cfccc422 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -371,7 +371,7 @@ bool buffer_track_alloc = get_env_bool("CEPH_BUFFER_TRACK"); int l = _len < o._len ? _len : o._len; if (l) { int r = memcmp(c_str(), o.c_str(), l); - if (!r) + if (r) return r; } if (_len < o._len) diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc index 71c2e793c826..7abced105548 100644 --- a/src/test/bufferlist.cc +++ b/src/test/bufferlist.cc @@ -9,6 +9,23 @@ #define MAX_TEST 1000000 +TEST(BufferPtr, cmp) { + bufferptr empty; + bufferptr a("A", 1); + bufferptr ab("AB", 2); + bufferptr af("AF", 2); + bufferptr acc("ACC", 3); + EXPECT_GE(-1, empty.cmp(a)); + EXPECT_LE(1, a.cmp(empty)); + EXPECT_GE(-1, a.cmp(ab)); + EXPECT_LE(1, ab.cmp(a)); + EXPECT_EQ(0, ab.cmp(ab)); + EXPECT_GE(-1, ab.cmp(af)); + EXPECT_LE(1, af.cmp(ab)); + EXPECT_GE(-1, acc.cmp(af)); + EXPECT_LE(1, af.cmp(acc)); +} + TEST(BufferList, zero) { // // void zero()