Linux/MacOSX: Support K/M/G/T suffixes for --size switch to indicate unit to use for size value (KiloByte, MegaByte, GigaByte and TeraByte respectively)

This commit is contained in:
Mounir IDRASSI 2016-01-24 02:02:48 +01:00
parent 5a09d17c45
commit c86697f51b

View File

@ -528,9 +528,36 @@ namespace VeraCrypt
if (parser.Found (L"size", &str)) if (parser.Found (L"size", &str))
{ {
uint64 multiplier;
wxChar lastChar = str [str.Length () - 1];
if (lastChar >= wxT('0') && lastChar <= wxT('9'))
multiplier = 1;
else if (lastChar == wxT('K') || lastChar == wxT('k'))
multiplier = BYTES_PER_KB;
else if (lastChar == wxT('M') || lastChar == wxT('m'))
multiplier = BYTES_PER_MB;
else if (lastChar == wxT('G') || lastChar == wxT('g'))
multiplier = BYTES_PER_GB;
else if (lastChar == wxT('T') || lastChar == wxT('t'))
multiplier = BYTES_PER_TB;
else
throw_err (LangString["PARAMETER_INCORRECT"] + L": " + str);
// remove suffix if present
if (multiplier != 1)
str.RemoveLast ();
// check that we only have digits in the string
size_t index = str.find_first_not_of (wxT("0123456789"));
if (index != (size_t) wxNOT_FOUND)
{
// restore last characater for error display
if (multiplier != 1)
str += lastChar;
throw_err (LangString["PARAMETER_INCORRECT"] + L": " + str);
}
try try
{ {
ArgSize = StringConverter::ToUInt64 (wstring (str)); ArgSize = multiplier * StringConverter::ToUInt64 (wstring (str));
} }
catch (...) catch (...)
{ {