aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/common/win32
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-11-10 00:54:35 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-11-10 00:54:35 -0500
commit58fb7a0cee13d84170aac52f3f89d91888e1afe3 (patch)
tree1d6312ba15f9ece5a8031e5280dfb8b38be8dfa3 /src/lib/common/win32
parent28db84b46139c9bb2bbcac8c6cc56e71d1e35629 (diff)
parentbeb08eb751fa8e1f72042f263316ab5e5ddb596d (diff)
Update upstream source from tag 'upstream/2.4.0+dfsg'
Update to upstream version '2.4.0+dfsg' with Debian dir 4b6668cc08c7b0e56b1e1f7b4e89ecdb316182a0
Diffstat (limited to 'src/lib/common/win32')
-rw-r--r--src/lib/common/win32/DataDirectories.cpp36
-rw-r--r--src/lib/common/win32/encoding_utilities.cpp37
-rw-r--r--src/lib/common/win32/encoding_utilities.h28
3 files changed, 81 insertions, 20 deletions
diff --git a/src/lib/common/win32/DataDirectories.cpp b/src/lib/common/win32/DataDirectories.cpp
index 15cb64e..31a428f 100644
--- a/src/lib/common/win32/DataDirectories.cpp
+++ b/src/lib/common/win32/DataDirectories.cpp
@@ -16,66 +16,62 @@
*/
#include "../DataDirectories.h"
+#include "encoding_utilities.h"
#include <Shlobj.h>
-std::string unicode_to_mb(const WCHAR* utfStr)
-{
- int utfLength = lstrlenW(utfStr);
- int mbLength = WideCharToMultiByte(CP_UTF8, 0, utfStr, utfLength, NULL, 0, NULL, NULL);
- std::string mbStr(mbLength, 0);
- WideCharToMultiByte(CP_UTF8, 0, utfStr, utfLength, &mbStr[0], mbLength, NULL, NULL);
- return mbStr;
-}
+namespace barrier {
-std::string known_folder_path(const KNOWNFOLDERID& id)
+fs::path known_folder_path(const KNOWNFOLDERID& id)
{
- std::string path;
+ fs::path path;
WCHAR* buffer;
HRESULT result = SHGetKnownFolderPath(id, 0, NULL, &buffer);
if (result == S_OK) {
- path = unicode_to_mb(buffer);
+ path = fs::path(std::wstring(buffer));
CoTaskMemFree(buffer);
}
return path;
}
-const std::string& DataDirectories::profile()
+const fs::path& DataDirectories::profile()
{
if (_profile.empty())
- _profile = known_folder_path(FOLDERID_LocalAppData) + "\\Barrier";
+ _profile = known_folder_path(FOLDERID_LocalAppData) / "Barrier";
return _profile;
}
-const std::string& DataDirectories::profile(const std::string& path)
+const fs::path& DataDirectories::profile(const fs::path& path)
{
_profile = path;
return _profile;
}
-const std::string& DataDirectories::global()
+const fs::path& DataDirectories::global()
{
if (_global.empty())
- _global = known_folder_path(FOLDERID_ProgramData) + "\\Barrier";
+ _global = known_folder_path(FOLDERID_ProgramData) / "Barrier";
return _global;
}
-const std::string& DataDirectories::global(const std::string& path)
+const fs::path& DataDirectories::global(const fs::path& path)
{
_global = path;
return _global;
}
-const std::string& DataDirectories::systemconfig()
+const fs::path& DataDirectories::systemconfig()
{
// systemconfig() is a special case in that it will track the current value
- // of global() unless and until it is explictly set otherwise
+ // of global() unless and until it is explicitly set otherwise
// previously it would default to the windows folder which was horrible!
if (_systemconfig.empty())
return global();
return _systemconfig;
}
-const std::string& DataDirectories::systemconfig(const std::string& path)
+const fs::path& DataDirectories::systemconfig(const fs::path& path)
{
_systemconfig = path;
return _systemconfig;
}
+
+} // namespace barrier
diff --git a/src/lib/common/win32/encoding_utilities.cpp b/src/lib/common/win32/encoding_utilities.cpp
new file mode 100644
index 0000000..11781d3
--- /dev/null
+++ b/src/lib/common/win32/encoding_utilities.cpp
@@ -0,0 +1,37 @@
+/*
+ barrier -- mouse and keyboard sharing utility
+ Copyright (C) Barrier contributors
+
+ This package is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ found in the file LICENSE that should have accompanied this file.
+
+ This package 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "encoding_utilities.h"
+#include <stringapiset.h>
+
+std::string win_wchar_to_utf8(const WCHAR* utfStr)
+{
+ int utfLength = lstrlenW(utfStr);
+ int mbLength = WideCharToMultiByte(CP_UTF8, 0, utfStr, utfLength, NULL, 0, NULL, NULL);
+ std::string mbStr(mbLength, 0);
+ WideCharToMultiByte(CP_UTF8, 0, utfStr, utfLength, &mbStr[0], mbLength, NULL, NULL);
+ return mbStr;
+}
+
+std::vector<WCHAR> utf8_to_win_char(const std::string& str)
+{
+ int result_len = MultiByteToWideChar(CP_UTF8, 0, str.data(), str.size(), NULL, 0);
+ std::vector<WCHAR> result;
+ result.resize(result_len + 1, 0);
+ MultiByteToWideChar(CP_UTF8, 0, str.data(), str.size(), result.data(), result_len);
+ return result;
+}
diff --git a/src/lib/common/win32/encoding_utilities.h b/src/lib/common/win32/encoding_utilities.h
new file mode 100644
index 0000000..747371e
--- /dev/null
+++ b/src/lib/common/win32/encoding_utilities.h
@@ -0,0 +1,28 @@
+/*
+ barrier -- mouse and keyboard sharing utility
+ Copyright (C) Barrier contributors
+
+ This package is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ found in the file LICENSE that should have accompanied this file.
+
+ This package 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 this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef BARRIER_LIB_COMMON_WIN32_ENCODING_UTILITIES_H
+#define BARRIER_LIB_COMMON_WIN32_ENCODING_UTILITIES_H
+
+#include <windows.h>
+#include <string>
+#include <vector>
+
+std::string win_wchar_to_utf8(const WCHAR* utfStr);
+std::vector<WCHAR> utf8_to_win_char(const std::string& str);
+
+#endif