From 981f8b3acf7e76f27c02f4ced80d55b424cc7497 Mon Sep 17 00:00:00 2001 From: Tannin Date: Sun, 3 Feb 2013 12:49:25 +0100 Subject: initial commit to mercurial repository. Corresponds to MO version 0.12.6 --- src/shared/util.cpp | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/shared/util.cpp (limited to 'src/shared/util.cpp') diff --git a/src/shared/util.cpp b/src/shared/util.cpp new file mode 100644 index 00000000..ec52dd38 --- /dev/null +++ b/src/shared/util.cpp @@ -0,0 +1,119 @@ +/* +Copyright (C) 2012 Sebastian Herbord. All rights reserved. + +This file is part of Mod Organizer. + +Mod Organizer is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Mod Organizer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Mod Organizer. If not, see . +*/ + +#include "util.h" +#include "windows_error.h" +#include +#include + + +bool FileExists(const std::wstring &filename) +{ + WIN32_FIND_DATAW findData; + ZeroMemory(&findData, sizeof(WIN32_FIND_DATAW)); + HANDLE search = ::FindFirstFileExW(filename.c_str(), FindExInfoStandard, &findData, FindExSearchNameMatch, NULL, 0); + if (search == INVALID_HANDLE_VALUE) { + return false; + } else { + FindClose(search); + return true; + } +} + +bool FileExists(const std::wstring &searchPath, const std::wstring &filename) +{ + std::wstringstream stream; + stream << searchPath << "\\" << filename; + return FileExists(stream.str()); +} + +std::string ToString(const std::wstring &source, bool utf8) +{ + char buffer[MAX_PATH]; + if (utf8) { + ::WideCharToMultiByte(CP_UTF8, 0, source.c_str(), -1, buffer, MAX_PATH, NULL, NULL); + } else { + ::WideCharToMultiByte(GetACP(), 0, source.c_str(), -1, buffer, MAX_PATH, NULL, NULL); +// wcstombs(buffer, source.c_str(), MAX_PATH); + } + return std::string(buffer); +} + +std::wstring ToWString(const std::string &source, bool utf8) +{ + wchar_t buffer[MAX_PATH]; + if (utf8) { + ::MultiByteToWideChar(CP_UTF8, 0, source.c_str(), -1, buffer, MAX_PATH); + } else { + // codepage encoding + ::MultiByteToWideChar(GetACP(), 0, source.c_str(), -1, buffer, MAX_PATH); +// mbstowcs(buffer, source.c_str(), MAX_PATH); + } + return std::wstring(buffer); +} + +std::string &ToLower(std::string &text) +{ + std::transform(text.begin(), text.end(), text.begin(), tolower); + return text; +} + + +std::wstring &ToLower(std::wstring &text) +{ + std::transform(text.begin(), text.end(), text.begin(), towlower); + return text; +} + +std::wstring ToLower(const std::wstring &text) +{ + std::wstring temp = text; + + std::transform(temp.begin(), temp.end(), temp.begin(), towlower); + return temp; +} + +VS_FIXEDFILEINFO GetFileVersion(const std::wstring &fileName) +{ + DWORD size = ::GetFileVersionInfoSizeW(fileName.c_str(), NULL); + if (size == 0) { + throw windows_error("failed to determine file version info size"); + } + + void *buffer = new char[size]; + try { + if (!::GetFileVersionInfoW(fileName.c_str(), 0UL, size, buffer)) { + throw windows_error("failed to determine file version info"); + } + + void *versionInfoPtr = NULL; + UINT versionInfoLength = 0; + if (!::VerQueryValue(buffer, L"\\", &versionInfoPtr, &versionInfoLength)) { + throw windows_error("failed to determine file version"); + } + + VS_FIXEDFILEINFO result = *(VS_FIXEDFILEINFO*)versionInfoPtr; + delete [] buffer; + return result; + } catch (...) { + delete [] buffer; + throw; + } +} + -- cgit v1.3.1