MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / ParseByteUnits

Function ParseByteUnits

src/util/strencodings.cpp:385–428  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

383}
384
385std::optional<uint64_t> ParseByteUnits(std::string_view str, ByteUnit default_multiplier)
386{
387 if (str.empty()) {
388 return std::nullopt;
389 }
390 auto multiplier = default_multiplier;
391 char unit = str.back();
392 switch (unit) {
393 case 'k':
394 multiplier = ByteUnit::k;
395 break;
396 case 'K':
397 multiplier = ByteUnit::K;
398 break;
399 case 'm':
400 multiplier = ByteUnit::m;
401 break;
402 case 'M':
403 multiplier = ByteUnit::M;
404 break;
405 case 'g':
406 multiplier = ByteUnit::g;
407 break;
408 case 'G':
409 multiplier = ByteUnit::G;
410 break;
411 case 't':
412 multiplier = ByteUnit::t;
413 break;
414 case 'T':
415 multiplier = ByteUnit::T;
416 break;
417 default:
418 unit = 0;
419 break;
420 }
421
422 uint64_t unit_amount = static_cast<uint64_t>(multiplier);
423 auto parsed_num = ToIntegral<uint64_t>(unit ? str.substr(0, str.size() - 1) : str);
424 if (!parsed_num || parsed_num > std::numeric_limits<uint64_t>::max() / unit_amount) { // check overflow
425 return std::nullopt;
426 }
427 return *parsed_num * unit_amount;
428}
429
430bool CaseInsensitiveEqual(std::string_view s1, std::string_view s2)
431{

Callers 3

AppInitMainFunction · 0.85
BOOST_AUTO_TEST_CASEFunction · 0.85
FUZZ_TARGETFunction · 0.85

Calls 3

emptyMethod · 0.45
backMethod · 0.45
sizeMethod · 0.45

Tested by 2

BOOST_AUTO_TEST_CASEFunction · 0.68
FUZZ_TARGETFunction · 0.68