19 const char* str, std::uint64_t* out_size,
char default_unit) {
22 *out_size = strtoul(str, &endptr, 10);
23 if (endptr ==
nullptr)
return false;
25 while (*endptr ==
' ') ++endptr;
28 unsigned int base = 1000;
29 unsigned int power = 0;
31 if (*endptr ==
'k' || *endptr ==
'K')
33 else if (*endptr ==
'm' || *endptr ==
'M')
35 else if (*endptr ==
'g' || *endptr ==
'G')
37 else if (*endptr ==
't' || *endptr ==
'T')
39 else if (*endptr ==
'p' || *endptr ==
'P')
43 if ((*endptr ==
'i' || *endptr ==
'I') && power != 0)
44 base = 1024, ++endptr;
47 if (*endptr ==
'b' || *endptr ==
'B') {
56 case 'k': power = 1, base = 1000;
58 case 'm': power = 2, base = 1000;
60 case 'g': power = 3, base = 1000;
62 case 't': power = 4, base = 1000;
64 case 'p': power = 5, base = 1000;
66 case 'K': power = 1, base = 1024;
68 case 'M': power = 2, base = 1024;
70 case 'G': power = 3, base = 1024;
72 case 'T': power = 4, base = 1024;
74 case 'P': power = 5, base = 1024;
80 while (*endptr ==
' ') ++endptr;
83 for (
unsigned int p = 0; p < power; ++p)
86 return (*endptr == 0);