Make QuicheMemSlice deleter accept absl::string_view instead of const char*.
This is to make the callback compatible with `absl::MakeCordFromExternal`.
NOT generated via copybara
PiperOrigin-RevId: 738481743
diff --git a/quiche/common/platform/api/quiche_mem_slice.cc b/quiche/common/platform/api/quiche_mem_slice.cc
index ffe7b7e..87a0ed2 100644
--- a/quiche/common/platform/api/quiche_mem_slice.cc
+++ b/quiche/common/platform/api/quiche_mem_slice.cc
@@ -5,6 +5,7 @@
#include <memory>
#include <utility>
+#include "absl/strings/string_view.h"
#include "quiche/common/quiche_buffer_allocator.h"
#include "quiche/common/quiche_callbacks.h"
@@ -15,19 +16,19 @@
QuicheUniqueBufferPtr owned = buffer.Release();
QuicheBufferAllocator* allocator = owned.get_deleter().allocator();
owned.release();
- done_callback_ = [allocator](const char* ptr) {
- allocator->Delete(const_cast<char*>(ptr));
+ done_callback_ = [allocator](absl::string_view ptr) {
+ allocator->Delete(const_cast<char*>(ptr.data()));
};
}
QuicheMemSlice::QuicheMemSlice(std::unique_ptr<char[]> buffer, size_t length)
: data_(buffer.release()),
size_(length),
- done_callback_(+[](const char* ptr) { delete[] ptr; }) {}
+ done_callback_(+[](absl::string_view ptr) { delete[] ptr.data(); }) {}
QuicheMemSlice::QuicheMemSlice(
const char* buffer, size_t length,
- SingleUseCallback<void(const char*)> done_callback)
+ SingleUseCallback<void(absl::string_view)> done_callback)
: data_(buffer), size_(length), done_callback_(std::move(done_callback)) {}
// Move constructors. |other| will not hold a reference to the data buffer
@@ -55,7 +56,7 @@
void QuicheMemSlice::Reset() {
if (done_callback_ && data_ != nullptr) {
- std::move(done_callback_)(data_);
+ std::move(done_callback_)(AsStringView());
}
data_ = nullptr;
size_ = 0;
diff --git a/quiche/common/platform/api/quiche_mem_slice.h b/quiche/common/platform/api/quiche_mem_slice.h
index 1223999..4afe9c1 100644
--- a/quiche/common/platform/api/quiche_mem_slice.h
+++ b/quiche/common/platform/api/quiche_mem_slice.h
@@ -18,7 +18,7 @@
// QuicheMemSlice is a memory buffer with a type-erased deleter callback.
class QUICHE_EXPORT QuicheMemSlice {
public:
- using ReleaseCallback = SingleUseCallback<void(const char*)>;
+ using ReleaseCallback = SingleUseCallback<void(absl::string_view)>;
// Constructs a empty QuicheMemSlice with no underlying data.
QuicheMemSlice() = default;
diff --git a/quiche/common/platform/api/quiche_mem_slice_test.cc b/quiche/common/platform/api/quiche_mem_slice_test.cc
index f7e9736..7eeceb2 100644
--- a/quiche/common/platform/api/quiche_mem_slice_test.cc
+++ b/quiche/common/platform/api/quiche_mem_slice_test.cc
@@ -76,18 +76,21 @@
}
TEST_F(QuicheMemSliceTest, SliceCustomDoneCallback) {
- const absl::string_view data("foo");
+ constexpr absl::string_view kData("foo");
bool deleted = false;
- char* buffer = new char[data.length()];
- std::memcpy(buffer, data.data(), data.length());
+ char* buffer = new char[kData.length()];
+ std::memcpy(buffer, kData.data(), kData.length());
{
- QuicheMemSlice slice(buffer, data.length(), [&deleted](const char* data) {
- deleted = true;
- delete[] data;
- });
- EXPECT_EQ(data, slice.AsStringView());
+ QuicheMemSlice slice(
+ buffer, kData.length(),
+ [size = kData.size(), &deleted](absl::string_view slice) {
+ deleted = true;
+ EXPECT_EQ(slice.size(), size);
+ delete[] slice.data();
+ });
+ EXPECT_EQ(kData, slice.AsStringView());
}
EXPECT_TRUE(deleted);
}
diff --git a/quiche/quic/moqt/moqt_cached_object.cc b/quiche/quic/moqt/moqt_cached_object.cc
index 1a455a0..9aef3e0 100644
--- a/quiche/quic/moqt/moqt_cached_object.cc
+++ b/quiche/quic/moqt/moqt_cached_object.cc
@@ -4,6 +4,7 @@
#include "quiche/quic/moqt/moqt_cached_object.h"
+#include "absl/strings/string_view.h"
#include "quiche/quic/moqt/moqt_publisher.h"
#include "quiche/common/platform/api/quiche_mem_slice.h"
@@ -18,7 +19,7 @@
if (object.payload != nullptr && !object.payload->empty()) {
result.payload = quiche::QuicheMemSlice(
object.payload->data(), object.payload->length(),
- [retained_pointer = object.payload](const char*) {});
+ [retained_pointer = object.payload](absl::string_view) {});
}
result.arrival_time = object.arrival_time;
result.fin_after_this = object.fin_after_this;