From 3cab2ce1792977ff7f2fbfbef2f8bd609563b6df Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 27 Jul 2017 10:34:43 +0800 Subject: [PATCH] kv/RocksDBStore: use vector instead of VLA for holding slices clang complains: ceph/src/kv/RocksDBStore.cc:611:32: error: variable length array of non-POD element type 'rocksdb::Slice' rocksdb::Slice value_slices[to_set_bl.buffers().size()]; and i believe GCC will also complains with: -Wvla or -pedantic. as to_set_bl.buffers().size() is not a const expr at compile time. Signed-off-by: Kefu Chai --- src/kv/RocksDBStore.cc | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc index a58f529a99e..4902ffe15ba 100644 --- a/src/kv/RocksDBStore.cc +++ b/src/kv/RocksDBStore.cc @@ -34,15 +34,16 @@ using std::string; #undef dout_prefix #define dout_prefix *_dout << "rocksdb: " -static rocksdb::SliceParts prepare_sliceparts(const bufferlist &bl, rocksdb::Slice *slices) +static rocksdb::SliceParts prepare_sliceparts(const bufferlist &bl, + vector *slices) { unsigned n = 0; - for (std::list::const_iterator p = bl.buffers().begin(); - p != bl.buffers().end(); ++p, ++n) { - slices[n].data_ = p->c_str(); - slices[n].size_ = p->length(); + for (auto& buf : bl.buffers()) { + (*slices)[n].data_ = buf.c_str(); + (*slices)[n].size_ = buf.length(); + n++; } - return rocksdb::SliceParts(slices, n); + return rocksdb::SliceParts(slices->data(), slices->size()); } // @@ -608,9 +609,9 @@ void RocksDBStore::RocksDBTransactionImpl::set( to_set_bl.length())); } else { rocksdb::Slice key_slice(key); - rocksdb::Slice value_slices[to_set_bl.buffers().size()]; + vector value_slices(to_set_bl.buffers().size()); bat.Put(nullptr, rocksdb::SliceParts(&key_slice, 1), - prepare_sliceparts(to_set_bl, value_slices)); + prepare_sliceparts(to_set_bl, &value_slices)); } } @@ -629,9 +630,9 @@ void RocksDBStore::RocksDBTransactionImpl::set( to_set_bl.length())); } else { rocksdb::Slice key_slice(key); - rocksdb::Slice value_slices[to_set_bl.buffers().size()]; + vector value_slices(to_set_bl.buffers().size()); bat.Put(nullptr, rocksdb::SliceParts(&key_slice, 1), - prepare_sliceparts(to_set_bl, value_slices)); + prepare_sliceparts(to_set_bl, &value_slices)); } } @@ -707,9 +708,9 @@ void RocksDBStore::RocksDBTransactionImpl::merge( } else { // make a copy rocksdb::Slice key_slice(key); - rocksdb::Slice value_slices[to_set_bl.buffers().size()]; + vector value_slices(to_set_bl.buffers().size()); bat.Merge(nullptr, rocksdb::SliceParts(&key_slice, 1), - prepare_sliceparts(to_set_bl, value_slices)); + prepare_sliceparts(to_set_bl, &value_slices)); } } -- 2.39.5