From fc37cc4a02ed13d1a73b941a9f80975600fd1b99 Mon Sep 17 00:00:00 2001 From: David Foerster Date: Tue, 10 May 2016 20:20:14 +0200 Subject: Normalize all line terminators --- src/Platform/StringConverter.cpp | 810 +++++++++++++++++++-------------------- 1 file changed, 405 insertions(+), 405 deletions(-) (limited to 'src/Platform/StringConverter.cpp') diff --git a/src/Platform/StringConverter.cpp b/src/Platform/StringConverter.cpp index 3e99e0f2..d5c17e88 100644 --- a/src/Platform/StringConverter.cpp +++ b/src/Platform/StringConverter.cpp @@ -8,412 +8,412 @@ and are governed by the Apache License 2.0 the full text of which is contained in the file License.txt included in VeraCrypt binary and source code distribution packages. -*/ - -#ifdef __GNUC__ -# include -#endif -#include -#include -#include "Buffer.h" -#include "Exception.h" -#include "ForEach.h" -#include "StringConverter.h" -#include "SystemException.h" - -namespace VeraCrypt -{ - void StringConverter::Erase (string &str) - { - for (size_t i = 0; i < str.size(); ++i) - { - str[i] = ' '; - } - } - - void StringConverter::Erase (wstring &str) - { - for (size_t i = 0; i < str.size(); ++i) - { - str[i] = ' '; - } - } - - wstring StringConverter::FromNumber (double number) - { - wstringstream s; - s << number; - return s.str(); - } - - wstring StringConverter::FromNumber (int32 number) - { - wstringstream s; - s << number; - return s.str(); - } - - wstring StringConverter::FromNumber (uint32 number) - { - wstringstream s; - s << number; - return s.str(); - } - - wstring StringConverter::FromNumber (int64 number) - { - wstringstream s; - s << number; - return s.str(); - } - - wstring StringConverter::FromNumber (uint64 number) - { - wstringstream s; - s << number; - return s.str(); - } - - string StringConverter::GetTrailingNumber (const string &str) - { - size_t start = str.find_last_not_of ("0123456789"); - if (start == string::npos) - return str; - - string s = str.substr (start + 1); - if (s.empty ()) - throw ParameterIncorrect (SRC_POS); - - return s; - } - - string StringConverter::GetTypeName (const type_info &typeInfo) - { - try - { -#ifdef _MSC_VER - // type_info::name() leaks memory as of MS VC++ 8.0 - string rawName (typeInfo.raw_name()); - - size_t cut1 = (rawName.find (".?A") != string::npos) ? 4 : string::npos; - size_t cut2 = rawName.find ("@"); - size_t cut3 = rawName.find ("@@"); - - if (cut1 == string::npos || cut2 == string::npos || cut3 == string::npos) - return typeInfo.name(); - - return rawName.substr (cut2 + 1, cut3 - cut2 - 1) + "::" + rawName.substr (cut1, cut2 - cut1); - -#elif defined (__GNUC__) - int status; - char *name = abi::__cxa_demangle (typeInfo.name(), nullptr, nullptr, &status); - - if (name) - { - string s (name); - free (name); - return s; - } -#endif - } - catch (...) { } - - return typeInfo.name(); - } - - wstring StringConverter::QuoteSpaces (const wstring &str) - { - if (str.find (L' ') == string::npos) - return str; - - wstring escaped (L"'"); - foreach (wchar_t c, str) - { - if (c == L'\'') - escaped += L'\''; - escaped += c; - } - return escaped + L'\''; - } - - vector StringConverter::Split (const string &str, const string &separators, bool returnEmptyFields) - { - vector elements; - - if (!returnEmptyFields) - { - size_t p = 0; - while ((p = str.find_first_not_of (separators, p)) != string::npos) - { - size_t end = str.find_first_of (separators, p); - if (end == string::npos) - { - elements.push_back (str.substr (p)); - break; - } - - elements.push_back (str.substr (p, end - p)); - p = end; - } - } - else - { - string element; - elements.push_back (element); - foreach (char c, str) - { - if (separators.find (c) != string::npos) - { - element.erase(); - elements.push_back (element); - } - else - { - elements.back() += c; - } - } - } - - return elements; - } - - string StringConverter::StripTrailingNumber (const string &str) - { - size_t start = str.find_last_not_of ("0123456789"); - if (start == string::npos) - return ""; - - return str.substr (0, start + 1); - } - - wstring StringConverter::ToExceptionString (const exception &ex) - { - const SystemException *sysEx = dynamic_cast (&ex); - if (sysEx) - return ToWide (sysEx->what()) + L": " + sysEx->SystemText() + L": " + sysEx->GetSubject(); - - if (ex.what() && !string (ex.what()).empty()) - return ToWide (GetTypeName (typeid (ex)) + ": " + ex.what()); - - return ToWide (GetTypeName (typeid (ex))); - } - - string StringConverter::ToLower (const string &str) - { - string s; - foreach (char c, str) - s += tolower (c, locale()); - return s; - } - - string StringConverter::ToSingle (const wstring &wstr, bool noThrow) - { - string str; - ToSingle (wstr, str, noThrow); - return str; - } - - void StringConverter::ToSingle (const wstring &wstr, string &str, bool noThrow) - { - try - { - mbstate_t mbState; - Memory::Zero (&mbState, sizeof (mbState)); - const wchar_t *src = wstr.c_str(); - - size_t size = wcsrtombs (nullptr, &src, 0, &mbState); - if (size == (size_t) -1) - throw StringConversionFailed (SRC_POS, wstr); - - vector buf (size + 1); - Memory::Zero (&mbState, sizeof (mbState)); - - if ((size = wcsrtombs (&buf[0], &src, buf.size(), &mbState)) == (size_t) -1) - throw StringConversionFailed (SRC_POS, wstr); - - str.clear(); - str.insert (0, &buf.front(), size); - Memory::Erase (&buf.front(), buf.size()); - } - catch (...) - { - if (!noThrow) - throw; - } - } - - uint32 StringConverter::ToUInt32 (const string &str) - { - uint32 n; - stringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0xffffFFFFU) - throw ParameterIncorrect (SRC_POS); - - return n; - } - - uint32 StringConverter::ToUInt32 (const wstring &str) - { - uint32 n; - wstringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0xffffFFFFU) - throw ParameterIncorrect (SRC_POS); - - return n; +*/ + +#ifdef __GNUC__ +# include +#endif +#include +#include +#include "Buffer.h" +#include "Exception.h" +#include "ForEach.h" +#include "StringConverter.h" +#include "SystemException.h" + +namespace VeraCrypt +{ + void StringConverter::Erase (string &str) + { + for (size_t i = 0; i < str.size(); ++i) + { + str[i] = ' '; + } + } + + void StringConverter::Erase (wstring &str) + { + for (size_t i = 0; i < str.size(); ++i) + { + str[i] = ' '; + } + } + + wstring StringConverter::FromNumber (double number) + { + wstringstream s; + s << number; + return s.str(); + } + + wstring StringConverter::FromNumber (int32 number) + { + wstringstream s; + s << number; + return s.str(); + } + + wstring StringConverter::FromNumber (uint32 number) + { + wstringstream s; + s << number; + return s.str(); + } + + wstring StringConverter::FromNumber (int64 number) + { + wstringstream s; + s << number; + return s.str(); } - int32 StringConverter::ToInt32 (const string &str) - { - int32 n; - stringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0x7fffFFFF || n == -0x7fffFFFF) - throw ParameterIncorrect (SRC_POS); - - return n; - } - - int32 StringConverter::ToInt32 (const wstring &str) - { - int32 n; - wstringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0x7fffFFFF || n == -0x7fffFFFF) - throw ParameterIncorrect (SRC_POS); - - return n; - } - - uint64 StringConverter::ToUInt64 (const string &str) - { - uint64 n; - stringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0xffffFFFFffffFFFFULL) - throw ParameterIncorrect (SRC_POS); - - return n; - } - - uint64 StringConverter::ToUInt64 (const wstring &str) - { - uint64 n; - wstringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0xffffFFFFffffFFFFULL) - throw ParameterIncorrect (SRC_POS); - - return n; + wstring StringConverter::FromNumber (uint64 number) + { + wstringstream s; + s << number; + return s.str(); + } + + string StringConverter::GetTrailingNumber (const string &str) + { + size_t start = str.find_last_not_of ("0123456789"); + if (start == string::npos) + return str; + + string s = str.substr (start + 1); + if (s.empty ()) + throw ParameterIncorrect (SRC_POS); + + return s; + } + + string StringConverter::GetTypeName (const type_info &typeInfo) + { + try + { +#ifdef _MSC_VER + // type_info::name() leaks memory as of MS VC++ 8.0 + string rawName (typeInfo.raw_name()); + + size_t cut1 = (rawName.find (".?A") != string::npos) ? 4 : string::npos; + size_t cut2 = rawName.find ("@"); + size_t cut3 = rawName.find ("@@"); + + if (cut1 == string::npos || cut2 == string::npos || cut3 == string::npos) + return typeInfo.name(); + + return rawName.substr (cut2 + 1, cut3 - cut2 - 1) + "::" + rawName.substr (cut1, cut2 - cut1); + +#elif defined (__GNUC__) + int status; + char *name = abi::__cxa_demangle (typeInfo.name(), nullptr, nullptr, &status); + + if (name) + { + string s (name); + free (name); + return s; + } +#endif + } + catch (...) { } + + return typeInfo.name(); + } + + wstring StringConverter::QuoteSpaces (const wstring &str) + { + if (str.find (L' ') == string::npos) + return str; + + wstring escaped (L"'"); + foreach (wchar_t c, str) + { + if (c == L'\'') + escaped += L'\''; + escaped += c; + } + return escaped + L'\''; + } + + vector StringConverter::Split (const string &str, const string &separators, bool returnEmptyFields) + { + vector elements; + + if (!returnEmptyFields) + { + size_t p = 0; + while ((p = str.find_first_not_of (separators, p)) != string::npos) + { + size_t end = str.find_first_of (separators, p); + if (end == string::npos) + { + elements.push_back (str.substr (p)); + break; + } + + elements.push_back (str.substr (p, end - p)); + p = end; + } + } + else + { + string element; + elements.push_back (element); + foreach (char c, str) + { + if (separators.find (c) != string::npos) + { + element.erase(); + elements.push_back (element); + } + else + { + elements.back() += c; + } + } + } + + return elements; + } + + string StringConverter::StripTrailingNumber (const string &str) + { + size_t start = str.find_last_not_of ("0123456789"); + if (start == string::npos) + return ""; + + return str.substr (0, start + 1); + } + + wstring StringConverter::ToExceptionString (const exception &ex) + { + const SystemException *sysEx = dynamic_cast (&ex); + if (sysEx) + return ToWide (sysEx->what()) + L": " + sysEx->SystemText() + L": " + sysEx->GetSubject(); + + if (ex.what() && !string (ex.what()).empty()) + return ToWide (GetTypeName (typeid (ex)) + ": " + ex.what()); + + return ToWide (GetTypeName (typeid (ex))); + } + + string StringConverter::ToLower (const string &str) + { + string s; + foreach (char c, str) + s += tolower (c, locale()); + return s; + } + + string StringConverter::ToSingle (const wstring &wstr, bool noThrow) + { + string str; + ToSingle (wstr, str, noThrow); + return str; + } + + void StringConverter::ToSingle (const wstring &wstr, string &str, bool noThrow) + { + try + { + mbstate_t mbState; + Memory::Zero (&mbState, sizeof (mbState)); + const wchar_t *src = wstr.c_str(); + + size_t size = wcsrtombs (nullptr, &src, 0, &mbState); + if (size == (size_t) -1) + throw StringConversionFailed (SRC_POS, wstr); + + vector buf (size + 1); + Memory::Zero (&mbState, sizeof (mbState)); + + if ((size = wcsrtombs (&buf[0], &src, buf.size(), &mbState)) == (size_t) -1) + throw StringConversionFailed (SRC_POS, wstr); + + str.clear(); + str.insert (0, &buf.front(), size); + Memory::Erase (&buf.front(), buf.size()); + } + catch (...) + { + if (!noThrow) + throw; + } } - int64 StringConverter::ToInt64 (const string &str) - { - int64 n; - stringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0x7fffFFFFffffFFFFLL || n == -0x7fffFFFFffffFFFFLL) - throw ParameterIncorrect (SRC_POS); - - return n; - } - - int64 StringConverter::ToInt64 (const wstring &str) - { - int64 n; - wstringstream ss (str); - - ss >> n; - if (ss.fail() || n == 0x7fffFFFFffffFFFFLL || n == -0x7fffFFFFffffFFFFLL) - throw ParameterIncorrect (SRC_POS); - - return n; - } - - string StringConverter::ToUpper (const string &str) - { - string s; - foreach (char c, str) - s += toupper (c, locale()); - return s; - } - - wstring StringConverter::ToWide (const string &str, bool noThrow) - { - try - { - mbstate_t mbState; - Memory::Zero (&mbState, sizeof (mbState)); - const char *src = str.c_str(); - - size_t size = mbsrtowcs (nullptr, &src, 0, &mbState); - if (size == (size_t) -1) - throw StringConversionFailed (SRC_POS); - - vector buf (size + 1); - Memory::Zero (&mbState, sizeof (mbState)); - - if ((size = mbsrtowcs (&buf[0], &src, buf.size(), &mbState)) == (size_t) -1) - throw StringConversionFailed (SRC_POS); - - wstring s; - s.insert (s.begin(), buf.begin(), buf.begin() + size); - return s; - } - catch (...) - { - if (noThrow) - return L""; - throw; - } - } - - void StringConverter::ToWideBuffer (const wstring &str, wchar_t *buffer, size_t bufferSize) - { - if (str.length() < 1) - { - buffer[0] = 0; - return; - } - - BufferPtr ( - (byte *) buffer, - bufferSize).CopyFrom ( - ConstBufferPtr ((byte *) (wstring (str).c_str()), - (str.length() + 1) * sizeof (wchar_t) - ) - ); - } - - string StringConverter::Trim (const string &str) - { - size_t start = 0; - size_t end = str.size(); - if (end < 1) - return str; - - foreach (char c, str) - { - if (c > ' ') - break; - ++start; - } - - foreach_reverse (char c, str) - { - if (c > ' ') - break; - --end; - } - - return str.substr (start, end - start); - } -} + uint32 StringConverter::ToUInt32 (const string &str) + { + uint32 n; + stringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0xffffFFFFU) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + uint32 StringConverter::ToUInt32 (const wstring &str) + { + uint32 n; + wstringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0xffffFFFFU) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + int32 StringConverter::ToInt32 (const string &str) + { + int32 n; + stringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0x7fffFFFF || n == -0x7fffFFFF) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + int32 StringConverter::ToInt32 (const wstring &str) + { + int32 n; + wstringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0x7fffFFFF || n == -0x7fffFFFF) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + uint64 StringConverter::ToUInt64 (const string &str) + { + uint64 n; + stringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0xffffFFFFffffFFFFULL) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + uint64 StringConverter::ToUInt64 (const wstring &str) + { + uint64 n; + wstringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0xffffFFFFffffFFFFULL) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + int64 StringConverter::ToInt64 (const string &str) + { + int64 n; + stringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0x7fffFFFFffffFFFFLL || n == -0x7fffFFFFffffFFFFLL) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + int64 StringConverter::ToInt64 (const wstring &str) + { + int64 n; + wstringstream ss (str); + + ss >> n; + if (ss.fail() || n == 0x7fffFFFFffffFFFFLL || n == -0x7fffFFFFffffFFFFLL) + throw ParameterIncorrect (SRC_POS); + + return n; + } + + string StringConverter::ToUpper (const string &str) + { + string s; + foreach (char c, str) + s += toupper (c, locale()); + return s; + } + + wstring StringConverter::ToWide (const string &str, bool noThrow) + { + try + { + mbstate_t mbState; + Memory::Zero (&mbState, sizeof (mbState)); + const char *src = str.c_str(); + + size_t size = mbsrtowcs (nullptr, &src, 0, &mbState); + if (size == (size_t) -1) + throw StringConversionFailed (SRC_POS); + + vector buf (size + 1); + Memory::Zero (&mbState, sizeof (mbState)); + + if ((size = mbsrtowcs (&buf[0], &src, buf.size(), &mbState)) == (size_t) -1) + throw StringConversionFailed (SRC_POS); + + wstring s; + s.insert (s.begin(), buf.begin(), buf.begin() + size); + return s; + } + catch (...) + { + if (noThrow) + return L""; + throw; + } + } + + void StringConverter::ToWideBuffer (const wstring &str, wchar_t *buffer, size_t bufferSize) + { + if (str.length() < 1) + { + buffer[0] = 0; + return; + } + + BufferPtr ( + (byte *) buffer, + bufferSize).CopyFrom ( + ConstBufferPtr ((byte *) (wstring (str).c_str()), + (str.length() + 1) * sizeof (wchar_t) + ) + ); + } + + string StringConverter::Trim (const string &str) + { + size_t start = 0; + size_t end = str.size(); + if (end < 1) + return str; + + foreach (char c, str) + { + if (c > ' ') + break; + ++start; + } + + foreach_reverse (char c, str) + { + if (c > ' ') + break; + --end; + } + + return str.substr (start, end - start); + } +} -- cgit v1.2.3