Skip to content

Commit

Permalink
Use only Span{} constructor for byte-like types where possible
Browse files Browse the repository at this point in the history
This removes bloat that is not needed.

Github-Pull: bitcoin#27927
Rebased-From: fa38d86
  • Loading branch information
MarcoFalke authored and achow101 committed Feb 21, 2024
1 parent b40d107 commit 6acfc43
Show file tree
Hide file tree
Showing 9 changed files with 22 additions and 24 deletions.
2 changes: 1 addition & 1 deletion src/bench/load_external.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ static void LoadExternalBlockFile(benchmark::Bench& bench)
ss << static_cast<uint32_t>(benchmark::data::block413567.size());
// We can't use the streaming serialization (ss << benchmark::data::block413567)
// because that first writes a compact size.
ss.write(MakeByteSpan(benchmark::data::block413567));
ss << Span{benchmark::data::block413567};

// Create the test file.
{
Expand Down
4 changes: 2 additions & 2 deletions src/net.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2939,13 +2939,13 @@ void CaptureMessageToFile(const CAddress& addr,
AutoFile f{fsbridge::fopen(path, "ab")};

ser_writedata64(f, now.count());
f.write(MakeByteSpan(msg_type));
f << Span{msg_type};
for (auto i = msg_type.length(); i < CMessageHeader::COMMAND_SIZE; ++i) {
f << uint8_t{'\0'};
}
uint32_t size = data.size();
ser_writedata32(f, size);
f.write(AsBytes(data));
f << data;
}

std::function<void(const CAddress& addr,
Expand Down
4 changes: 2 additions & 2 deletions src/pubkey.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,14 @@ class CPubKey
{
unsigned int len = size();
::WriteCompactSize(s, len);
s.write(AsBytes(Span{vch, len}));
s << Span{vch, len};
}
template <typename Stream>
void Unserialize(Stream& s)
{
const unsigned int len(::ReadCompactSize(s));
if (len <= SIZE) {
s.read(AsWritableBytes(Span{vch, len}));
s >> Span{vch, len};
if (len != size()) {
Invalidate();
}
Expand Down
2 changes: 1 addition & 1 deletion src/test/fuzz/p2p_transport_serialization.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ FUZZ_TARGET_INIT(p2p_transport_serialization, initialize_p2p_transport_serializa
assert(msg.m_time == m_time);

std::vector<unsigned char> header;
auto msg2 = CNetMsgMaker{msg.m_recv.GetVersion()}.Make(msg.m_type, MakeUCharSpan(msg.m_recv));
auto msg2 = CNetMsgMaker{msg.m_recv.GetVersion()}.Make(msg.m_type, Span{msg.m_recv});
serializer.prepareForTransport(msg2, header);
}
}
Expand Down
14 changes: 7 additions & 7 deletions src/test/serialize_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,32 +186,32 @@ BOOST_AUTO_TEST_CASE(noncanonical)
std::vector<char>::size_type n;

// zero encoded with three bytes:
ss.write(MakeByteSpan("\xfd\x00\x00").first(3));
ss << Span{"\xfd\x00\x00"}.first(3);
BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException);

// 0xfc encoded with three bytes:
ss.write(MakeByteSpan("\xfd\xfc\x00").first(3));
ss << Span{"\xfd\xfc\x00"}.first(3);
BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException);

// 0xfd encoded with three bytes is OK:
ss.write(MakeByteSpan("\xfd\xfd\x00").first(3));
ss << Span{"\xfd\xfd\x00"}.first(3);
n = ReadCompactSize(ss);
BOOST_CHECK(n == 0xfd);

// zero encoded with five bytes:
ss.write(MakeByteSpan("\xfe\x00\x00\x00\x00").first(5));
ss << Span{"\xfe\x00\x00\x00\x00"}.first(5);
BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException);

// 0xffff encoded with five bytes:
ss.write(MakeByteSpan("\xfe\xff\xff\x00\x00").first(5));
ss << Span{"\xfe\xff\xff\x00\x00"}.first(5);
BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException);

// zero encoded with nine bytes:
ss.write(MakeByteSpan("\xff\x00\x00\x00\x00\x00\x00\x00\x00").first(9));
ss << Span{"\xff\x00\x00\x00\x00\x00\x00\x00\x00"}.first(9);
BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException);

// 0x01ffffff encoded with nine bytes:
ss.write(MakeByteSpan("\xff\xff\xff\xff\x01\x00\x00\x00\x00").first(9));
ss << Span{"\xff\xff\xff\xff\x01\x00\x00\x00\x00"}.first(9);
BOOST_CHECK_EXCEPTION(ReadCompactSize(ss), std::ios_base::failure, isCanonicalException);
}

Expand Down
2 changes: 1 addition & 1 deletion src/uint256.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ class base_blob
template<typename Stream>
void Serialize(Stream& s) const
{
s.write(MakeByteSpan(m_data));
s << Span(m_data);
}

template<typename Stream>
Expand Down
12 changes: 6 additions & 6 deletions src/wallet/dump.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@ bool DumpWallet(const ArgsManager& args, CWallet& wallet, bilingual_str& error)
// Write out a magic string with version
std::string line = strprintf("%s,%u\n", DUMP_MAGIC, DUMP_VERSION);
dump_file.write(line.data(), line.size());
hasher.write(MakeByteSpan(line));
hasher << Span{line};

// Write out the file format
line = strprintf("%s,%s\n", "format", db.Format());
dump_file.write(line.data(), line.size());
hasher.write(MakeByteSpan(line));
hasher << Span{line};

if (ret) {

Expand All @@ -83,7 +83,7 @@ bool DumpWallet(const ArgsManager& args, CWallet& wallet, bilingual_str& error)
std::string value_str = HexStr(ss_value);
line = strprintf("%s,%s\n", key_str, value_str);
dump_file.write(line.data(), line.size());
hasher.write(MakeByteSpan(line));
hasher << Span{line};
}
}

Expand Down Expand Up @@ -160,7 +160,7 @@ bool CreateFromDump(const ArgsManager& args, const std::string& name, const fs::
return false;
}
std::string magic_hasher_line = strprintf("%s,%s\n", magic_key, version_value);
hasher.write(MakeByteSpan(magic_hasher_line));
hasher << Span{magic_hasher_line};

// Get the stored file format
std::string format_key;
Expand Down Expand Up @@ -191,7 +191,7 @@ bool CreateFromDump(const ArgsManager& args, const std::string& name, const fs::
warnings.push_back(strprintf(_("Warning: Dumpfile wallet format \"%s\" does not match command line specified format \"%s\"."), format_value, file_format));
}
std::string format_hasher_line = strprintf("%s,%s\n", format_key, format_value);
hasher.write(MakeByteSpan(format_hasher_line));
hasher << Span{format_hasher_line};

DatabaseOptions options;
DatabaseStatus status;
Expand Down Expand Up @@ -236,7 +236,7 @@ bool CreateFromDump(const ArgsManager& args, const std::string& name, const fs::
}

std::string line = strprintf("%s,%s\n", key, value);
hasher.write(MakeByteSpan(line));
hasher << Span{line};

if (key.empty() || value.empty()) {
continue;
Expand Down
4 changes: 1 addition & 3 deletions src/wallet/wallet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3863,9 +3863,7 @@ bool CWallet::MigrateToSQLite(bilingual_str& error)
bool began = batch->TxnBegin();
assert(began); // This is a critical error, the new db could not be written to. The original db exists as a backup, but we should not continue execution.
for (const auto& [key, value] : records) {
DataStream ss_key{key};
DataStream ss_value{value};
if (!batch->Write(ss_key, ss_value)) {
if (!batch->Write(Span{key}, Span{value})) {
batch->TxnAbort();
m_database->Close();
fs::remove(m_database->Filename());
Expand Down
2 changes: 1 addition & 1 deletion src/wallet/walletdb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1132,7 +1132,7 @@ bool WalletBatch::EraseRecords(const std::unordered_set<std::string>& types)
}

// Make a copy of key to avoid data being deleted by the following read of the type
Span<const unsigned char> key_data = MakeUCharSpan(key);
Span key_data{key};

std::string type;
key >> type;
Expand Down

0 comments on commit 6acfc43

Please sign in to comment.