AK+Userland: Remove nullability feature for the ByteBuffer type

Nobody seems to use this particular feature, in fact there were some
bugs which were uncovered by removing operator bool.
This commit is contained in:
Gunnar Beutner 2021-05-16 08:47:46 +02:00 committed by Andreas Kling
parent c4d0b0cd6b
commit 53d0150827
Notes: sideshowbarker 2024-07-18 18:01:38 +09:00
16 changed files with 12 additions and 36 deletions

View File

@ -28,7 +28,6 @@ public:
{ {
grow(other.size()); grow(other.size());
VERIFY(m_size == other.size()); VERIFY(m_size == other.size());
VERIFY(!m_is_null);
__builtin_memcpy(data(), other.data(), other.size()); __builtin_memcpy(data(), other.data(), other.size());
} }
@ -96,10 +95,6 @@ public:
bool operator!=(ByteBuffer const& other) const { return !(*this == other); } bool operator!=(ByteBuffer const& other) const { return !(*this == other); }
operator bool() const { return !is_null(); }
bool operator!() const { return is_null(); }
[[nodiscard]] bool is_null() const { return m_is_null; }
[[nodiscard]] u8& operator[](size_t i) [[nodiscard]] u8& operator[](size_t i)
{ {
VERIFY(i < m_size); VERIFY(i < m_size);
@ -152,7 +147,6 @@ public:
void grow(size_t new_size) void grow(size_t new_size)
{ {
m_is_null = false;
if (new_size <= m_size) if (new_size <= m_size)
return; return;
if (new_size <= capacity()) { if (new_size <= capacity()) {
@ -208,20 +202,17 @@ private:
ByteBuffer(size_t size) ByteBuffer(size_t size)
{ {
grow(size); grow(size);
VERIFY(!m_is_null);
VERIFY(m_size == size); VERIFY(m_size == size);
} }
void move_from(ByteBuffer&& other) void move_from(ByteBuffer&& other)
{ {
m_is_null = other.m_is_null;
m_size = other.m_size; m_size = other.m_size;
if (other.m_size > inline_capacity) { if (other.m_size > inline_capacity) {
m_outline_buffer = other.m_outline_buffer; m_outline_buffer = other.m_outline_buffer;
m_outline_capacity = other.m_outline_capacity; m_outline_capacity = other.m_outline_capacity;
} else } else
__builtin_memcpy(m_inline_buffer, other.m_inline_buffer, other.m_size); __builtin_memcpy(m_inline_buffer, other.m_inline_buffer, other.m_size);
other.m_is_null = true;
other.m_size = 0; other.m_size = 0;
} }
@ -242,7 +233,6 @@ private:
size_t capacity() const { return is_inline() ? inline_capacity : m_outline_capacity; } size_t capacity() const { return is_inline() ? inline_capacity : m_outline_capacity; }
size_t m_size { 0 }; size_t m_size { 0 };
bool m_is_null { true };
union { union {
u8 m_inline_buffer[inline_capacity]; u8 m_inline_buffer[inline_capacity];
struct { struct {

View File

@ -240,8 +240,6 @@ public:
template<typename BufferType> template<typename BufferType>
[[nodiscard]] static String copy(const BufferType& buffer, ShouldChomp should_chomp = NoChomp) [[nodiscard]] static String copy(const BufferType& buffer, ShouldChomp should_chomp = NoChomp)
{ {
if (buffer.is_null())
return {};
if (buffer.is_empty()) if (buffer.is_empty())
return empty(); return empty();
return String((const char*)buffer.data(), buffer.size(), should_chomp); return String((const char*)buffer.data(), buffer.size(), should_chomp);

View File

@ -150,8 +150,6 @@ public:
return false; return false;
} }
// NOTE: Vector::is_null() exists for the benefit of String::copy().
bool is_null() const { return false; }
bool is_empty() const { return size() == 0; } bool is_empty() const { return size() == 0; }
ALWAYS_INLINE size_t size() const { return m_size; } ALWAYS_INLINE size_t size() const { return m_size; }
size_t capacity() const { return m_capacity; } size_t capacity() const { return m_capacity; }

View File

@ -563,11 +563,6 @@ int HexEditor::find_and_highlight(ByteBuffer& needle, int start)
if (m_buffer.is_empty()) if (m_buffer.is_empty())
return -1; return -1;
if (needle.is_null()) {
dbgln("needle is null");
return -1;
}
auto raw_offset = memmem(m_buffer.data() + start, m_buffer.size(), needle.data(), needle.size()); auto raw_offset = memmem(m_buffer.data() + start, m_buffer.size(), needle.data(), needle.size());
if (raw_offset == NULL) if (raw_offset == NULL)
return -1; return -1;

View File

@ -189,7 +189,7 @@ void HexEditorWidget::initialize_menubar(GUI::Menubar& menubar)
})); }));
edit_menu.add_action(GUI::Action::create("Find &Next", { Mod_None, Key_F3 }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find-next.png"), [&](const GUI::Action&) { edit_menu.add_action(GUI::Action::create("Find &Next", { Mod_None, Key_F3 }, Gfx::Bitmap::load_from_file("/res/icons/16x16/find-next.png"), [&](const GUI::Action&) {
if (m_search_text.is_empty() || m_search_buffer.is_empty() || m_search_buffer.is_null()) { if (m_search_text.is_empty() || m_search_buffer.is_empty()) {
GUI::MessageBox::show(window(), "Nothing to search for", "Not found", GUI::MessageBox::Type::Warning); GUI::MessageBox::show(window(), "Nothing to search for", "Not found", GUI::MessageBox::Type::Warning);
return; return;
} }

View File

@ -33,8 +33,6 @@ const char* IODevice::error_string() const
int IODevice::read(u8* buffer, int length) int IODevice::read(u8* buffer, int length)
{ {
auto read_buffer = read(length); auto read_buffer = read(length);
if (read_buffer.is_null())
return 0;
memcpy(buffer, read_buffer.data(), length); memcpy(buffer, read_buffer.data(), length);
return read_buffer.size(); return read_buffer.size();
} }
@ -151,8 +149,6 @@ ByteBuffer IODevice::read_all()
} }
data.append((const u8*)read_buffer, nread); data.append((const u8*)read_buffer, nread);
} }
if (data.is_empty())
return {};
return ByteBuffer::copy(data.data(), data.size()); return ByteBuffer::copy(data.data(), data.size());
} }

View File

@ -110,7 +110,7 @@ void Job::on_socket_connected()
auto read_size = 64 * KiB; auto read_size = 64 * KiB;
auto payload = receive(read_size); auto payload = receive(read_size);
if (!payload) { if (payload.is_empty()) {
if (eof()) { if (eof()) {
finish_up(); finish_up();
return IterationDecision::Break; return IterationDecision::Break;

View File

@ -283,7 +283,7 @@ void Job::on_socket_connected()
} }
auto payload = receive(read_size); auto payload = receive(read_size);
if (!payload) { if (payload.is_empty()) {
if (eof()) { if (eof()) {
finish_up(); finish_up();
return IterationDecision::Break; return IterationDecision::Break;

View File

@ -474,9 +474,7 @@ ssize_t TLSv12::handle_payload(ReadonlyBytes vbuffer)
} }
break; break;
case Finished: case Finished:
if (m_context.cached_handshake) { m_context.cached_handshake.clear();
m_context.cached_handshake.clear();
}
if (m_context.handshake_messages[10] >= 1) { if (m_context.handshake_messages[10] >= 1) {
dbgln("unexpected finished message"); dbgln("unexpected finished message");
payload_res = (i8)Error::UnexpectedMessage; payload_res = (i8)Error::UnexpectedMessage;

View File

@ -431,7 +431,7 @@ public:
if (type != CSS::Selector::SimpleSelector::Type::Universal) { if (type != CSS::Selector::SimpleSelector::Type::Universal) {
while (is_valid_selector_char(peek())) while (is_valid_selector_char(peek()))
buffer.append(consume_one()); buffer.append(consume_one());
PARSE_VERIFY(!buffer.is_null()); PARSE_VERIFY(!buffer.is_empty());
} }
auto value = String::copy(buffer); auto value = String::copy(buffer);

View File

@ -42,7 +42,7 @@ public:
bool is_failed() const { return m_failed; } bool is_failed() const { return m_failed; }
const String& error() const { return m_error; } const String& error() const { return m_error; }
bool has_encoded_data() const { return !m_encoded_data.is_null(); } bool has_encoded_data() const { return !m_encoded_data.is_empty(); }
const URL& url() const { return m_request.url(); } const URL& url() const { return m_request.url(); }
const ByteBuffer& encoded_data() const { return m_encoded_data; } const ByteBuffer& encoded_data() const { return m_encoded_data; }

View File

@ -47,7 +47,7 @@ void XMLHttpRequest::fire_progress_event(const String& event_name, u64 transmitt
String XMLHttpRequest::response_text() const String XMLHttpRequest::response_text() const
{ {
if (m_response_object.is_null()) if (m_response_object.is_empty())
return {}; return {};
return String::copy(m_response_object); return String::copy(m_response_object);
} }

View File

@ -143,7 +143,7 @@ int perform_copy(const String& source, const String& destination)
while (true) { while (true) {
print_progress(); print_progress();
auto buffer = source_file.read(65536); auto buffer = source_file.read(65536);
if (buffer.is_null()) if (buffer.is_empty())
break; break;
if (!destination_file.write(buffer)) { if (!destination_file.write(buffer)) {
report_warning(String::formatted("Failed to write to destination file: {}", destination_file.error_string())); report_warning(String::formatted("Failed to write to destination file: {}", destination_file.error_string()));

View File

@ -168,7 +168,7 @@ Vector<DNSAnswer> MulticastDNS::lookup(const DNSName& name, DNSRecordType record
} }
auto buffer = receive(1024); auto buffer = receive(1024);
if (!buffer) if (buffer.is_empty())
return {}; return {};
auto optional_packet = DNSPacket::from_raw_packet(buffer.data(), buffer.size()); auto optional_packet = DNSPacket::from_raw_packet(buffer.data(), buffer.size());
if (!optional_packet.has_value()) { if (!optional_packet.has_value()) {

View File

@ -41,7 +41,7 @@ void Client::start()
{ {
m_socket->on_ready_to_read = [this] { m_socket->on_ready_to_read = [this] {
auto raw_request = m_socket->read_all(); auto raw_request = m_socket->read_all();
if (raw_request.is_null()) { if (raw_request.is_empty()) {
die(); die();
return; return;
} }

View File

@ -106,7 +106,8 @@ int parse_args(int argc, char** argv, Vector<String>& files, DuOption& du_option
auto file = Core::File::construct(exclude_from); auto file = Core::File::construct(exclude_from);
bool success = file->open(Core::OpenMode::ReadOnly); bool success = file->open(Core::OpenMode::ReadOnly);
VERIFY(success); VERIFY(success);
if (const auto buff = file->read_all()) { const auto buff = file->read_all();
if (!buff.is_empty()) {
String patterns = String::copy(buff, Chomp); String patterns = String::copy(buff, Chomp);
du_option.excluded_patterns.append(patterns.split('\n')); du_option.excluded_patterns.append(patterns.split('\n'));
} }