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 e10d6c9038c..df50cfccc42 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 71c2e793c82..7abced10554 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()