diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 548abc458fd..44b7482213b 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1519,16 +1519,18 @@ static ceph::spinlock debug_lock; */ char *buffer::list::c_str() { - if (_buffers.empty()) - return 0; // no buffers - - auto iter = std::cbegin(_buffers); - ++iter; - - if (iter != std::cend(_buffers)) { + switch (get_num_buffers()) { + case 0: + // no buffers + return nullptr; + case 1: + // good, we're already contiguous. + break; + default: rebuild(); + break; } - return _buffers.front().c_str(); // good, we're already contiguous. + return _buffers.front().c_str(); } string buffer::list::to_str() const {