aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/common')
-rw-r--r--src/lib/common/CMakeLists.txt4
-rw-r--r--src/lib/common/DataDirectories.h37
-rw-r--r--src/lib/common/DataDirectories_static.cpp41
-rw-r--r--src/lib/common/IInterface.h4
-rw-r--r--src/lib/common/MacOSXPrecomp.h23
-rw-r--r--src/lib/common/PathUtilities.cpp75
-rw-r--r--src/lib/common/PathUtilities.h31
-rw-r--r--src/lib/common/Version.cpp4
-rw-r--r--src/lib/common/Version.h4
-rw-r--r--src/lib/common/basic_types.h67
-rw-r--r--src/lib/common/common.h24
-rw-r--r--src/lib/common/stdbitset.h4
-rw-r--r--src/lib/common/stddeque.h4
-rw-r--r--src/lib/common/stdfstream.h4
-rw-r--r--src/lib/common/stdistream.h4
-rw-r--r--src/lib/common/stdlist.h4
-rw-r--r--src/lib/common/stdmap.h4
-rw-r--r--src/lib/common/stdostream.h4
-rw-r--r--src/lib/common/stdpost.h4
-rw-r--r--src/lib/common/stdpre.h4
-rw-r--r--src/lib/common/stdset.h4
-rw-r--r--src/lib/common/stdsstream.h4
-rw-r--r--src/lib/common/stdstring.h4
-rw-r--r--src/lib/common/stdvector.h4
-rw-r--r--src/lib/common/unix/DataDirectories.cpp38
-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
28 files changed, 207 insertions, 298 deletions
diff --git a/src/lib/common/CMakeLists.txt b/src/lib/common/CMakeLists.txt
index b3791c1..82ca614 100644
--- a/src/lib/common/CMakeLists.txt
+++ b/src/lib/common/CMakeLists.txt
@@ -1,11 +1,11 @@
# barrier -- mouse and keyboard sharing utility
# Copyright (C) 2012-2016 Symless Ltd.
# Copyright (C) 2009 Nick Bolton
-#
+#
# 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
diff --git a/src/lib/common/DataDirectories.h b/src/lib/common/DataDirectories.h
index 6b990c2..4550211 100644
--- a/src/lib/common/DataDirectories.h
+++ b/src/lib/common/DataDirectories.h
@@ -15,27 +15,36 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#pragma once
+#ifndef BARRIER_LIB_COMMON_DATA_DIRECTORIES_H
+#define BARRIER_LIB_COMMON_DATA_DIRECTORIES_H
-#include <string>
+#include "io/filesystem.h"
+
+namespace barrier {
class DataDirectories
{
public:
- static const std::string& profile();
- static const std::string& profile(const std::string& path);
+ static const fs::path& profile();
+ static const fs::path& profile(const fs::path& path);
- static const std::string& global();
- static const std::string& global(const std::string& path);
+ static const fs::path& global();
+ static const fs::path& global(const fs::path& path);
- static const std::string& systemconfig();
- static const std::string& systemconfig(const std::string& path);
+ static const fs::path& systemconfig();
+ static const fs::path& systemconfig(const fs::path& path);
+ static fs::path ssl_fingerprints_path();
+ static fs::path local_ssl_fingerprints_path();
+ static fs::path trusted_servers_ssl_fingerprints_path();
+ static fs::path trusted_clients_ssl_fingerprints_path();
+ static fs::path ssl_certificate_path();
private:
- // static class
- DataDirectories() {}
-
- static std::string _profile;
- static std::string _global;
- static std::string _systemconfig;
+ static fs::path _profile;
+ static fs::path _global;
+ static fs::path _systemconfig;
};
+
+} // namespace barrier
+
+#endif
diff --git a/src/lib/common/DataDirectories_static.cpp b/src/lib/common/DataDirectories_static.cpp
index 48dccb6..47f88e7 100644
--- a/src/lib/common/DataDirectories_static.cpp
+++ b/src/lib/common/DataDirectories_static.cpp
@@ -17,7 +17,40 @@
#include "DataDirectories.h"
-// static member
-std::string DataDirectories::_profile;
-std::string DataDirectories::_global;
-std::string DataDirectories::_systemconfig;
+namespace barrier {
+
+fs::path DataDirectories::_profile;
+fs::path DataDirectories::_global;
+fs::path DataDirectories::_systemconfig;
+
+static const char kFingerprintsDirName[] = "SSL/Fingerprints";
+static const char kFingerprintsLocalFilename[] = "Local.txt";
+static const char kFingerprintsTrustedServersFilename[] = "TrustedServers.txt";
+static const char kFingerprintsTrustedClientsFilename[] = "TrustedClients.txt";
+
+fs::path DataDirectories::ssl_fingerprints_path()
+{
+ return profile() / kFingerprintsDirName;
+}
+
+fs::path DataDirectories::local_ssl_fingerprints_path()
+{
+ return ssl_fingerprints_path() / kFingerprintsLocalFilename;
+}
+
+fs::path DataDirectories::trusted_servers_ssl_fingerprints_path()
+{
+ return ssl_fingerprints_path() / kFingerprintsTrustedServersFilename;
+}
+
+fs::path DataDirectories::trusted_clients_ssl_fingerprints_path()
+{
+ return ssl_fingerprints_path() / kFingerprintsTrustedClientsFilename;
+}
+
+fs::path DataDirectories::ssl_certificate_path()
+{
+ return profile() / "SSL" / "Barrier.pem";
+}
+
+} // namespace barrier
diff --git a/src/lib/common/IInterface.h b/src/lib/common/IInterface.h
index 84a76a9..65ede4d 100644
--- a/src/lib/common/IInterface.h
+++ b/src/lib/common/IInterface.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/MacOSXPrecomp.h b/src/lib/common/MacOSXPrecomp.h
deleted file mode 100644
index 7dbc8d0..0000000
--- a/src/lib/common/MacOSXPrecomp.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * barrier -- mouse and keyboard sharing utility
- * Copyright (C) 2012-2016 Symless Ltd.
- * Copyright (C) 2002 Chris Schoeneman
- *
- * 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/>.
- */
-
- //
-// Prefix header for all source files of the 'deleteme' target in the 'deleteme' project.
-//
-
-#include <Carbon/Carbon.h>
diff --git a/src/lib/common/PathUtilities.cpp b/src/lib/common/PathUtilities.cpp
deleted file mode 100644
index a2ab38a..0000000
--- a/src/lib/common/PathUtilities.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-* barrier -- mouse and keyboard sharing utility
-* Copyright (C) 2018 Debauchee Open Source Group
-*
-* 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/>.
-*/
-
-/*
-
-These functions cover the vast majority of cases for different paths across
-windows and unixes. They are not, however, fullproof and probably don't cover
-fringe cases very well. The library below might be used as an alternative if
-these implementations prove to be insufficient. As the library's readme states
-it is simply a temporary band-aid until std::filesystem is integrated (C++17
-has it in std::experimental) and this class should also be treated as such.
-
-https://github.com/wjakob/filesystem/
-
-*/
-
-#include "PathUtilities.h"
-
-// keep the default platform delimiter as the first in the list
-#ifdef _WIN32
-static const char *Delimiters = "\\/";
-#else
-static const char *Delimiters = "/";
-#endif
-
-static const char DefaultDelimiter = Delimiters[0];
-
-std::string PathUtilities::basename(const std::string& path)
-{
- return path.substr(path.find_last_of(Delimiters) + 1);
-}
-
-std::string PathUtilities::concat(const std::string& left, const std::string& right)
-{
- // although npos is usually (-1) we can't count on that so handle it explicitly
- auto leftEnd = left.find_last_not_of(Delimiters);
- if (leftEnd == std::string::npos)
- leftEnd = 0;
- else
- ++leftEnd;
- auto rightStart = right.find_first_not_of(Delimiters, 0);
- if (rightStart == std::string::npos) {
- // both left/right are empty
- if (left.size() == 0 && right.size() == 0)
- return "";
- // right is full of delims, left is okay
- if (leftEnd > 0)
- return left.substr(0, leftEnd);
- // both left/right useless but at least one has delims
- return std::string(1, DefaultDelimiter);
- }
- if (leftEnd == 0) {
- // right is okay and not prefixed with delims, left is empty
- if (left.size() == 0 && rightStart == 0)
- return right.substr(rightStart);
- // (right is okay and prefixed with delims) OR left is full of delims
- return DefaultDelimiter + right.substr(rightStart);
- }
- // concatenation using both left and right
- return left.substr(0, leftEnd) + DefaultDelimiter + right.substr(rightStart);
-}
diff --git a/src/lib/common/PathUtilities.h b/src/lib/common/PathUtilities.h
deleted file mode 100644
index 70b85b4..0000000
--- a/src/lib/common/PathUtilities.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
-* barrier -- mouse and keyboard sharing utility
-* Copyright (C) 2018 Debauchee Open Source Group
-*
-* 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/>.
-*/
-
-#pragma once
-
-#include <string>
-
-class PathUtilities
-{
-public:
- static std::string basename(const std::string& path);
- static std::string concat(const std::string& left, const std::string& right);
-
-private:
- // static class
- PathUtilities() {}
-};
diff --git a/src/lib/common/Version.cpp b/src/lib/common/Version.cpp
index 94d6c5d..41d2804 100644
--- a/src/lib/common/Version.cpp
+++ b/src/lib/common/Version.cpp
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2004 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/Version.h b/src/lib/common/Version.h
index 66bb2e2..ad4a3e7 100644
--- a/src/lib/common/Version.h
+++ b/src/lib/common/Version.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/basic_types.h b/src/lib/common/basic_types.h
index f84550c..1882e57 100644
--- a/src/lib/common/basic_types.h
+++ b/src/lib/common/basic_types.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
@@ -18,49 +18,7 @@
#pragma once
-#include "common/common.h"
-
-//
-// pick types of particular sizes
-//
-
-#if !defined(TYPE_OF_SIZE_1)
-# if SIZEOF_CHAR == 1
-# define TYPE_OF_SIZE_1 char
-# endif
-#endif
-
-#if !defined(TYPE_OF_SIZE_2)
-# if SIZEOF_INT == 2
-# define TYPE_OF_SIZE_2 int
-# else
-# define TYPE_OF_SIZE_2 short
-# endif
-#endif
-
-#if !defined(TYPE_OF_SIZE_4)
- // Carbon defines SInt32 and UInt32 in terms of long
-# if SIZEOF_INT == 4 && !defined(__APPLE__)
-# define TYPE_OF_SIZE_4 int
-# else
-# define TYPE_OF_SIZE_4 long
-# endif
-#endif
-
- //
-// verify existence of required types
-//
-
-#if !defined(TYPE_OF_SIZE_1)
-# error No 1 byte integer type
-#endif
-#if !defined(TYPE_OF_SIZE_2)
-# error No 2 byte integer type
-#endif
-#if !defined(TYPE_OF_SIZE_4)
-# error No 4 byte integer type
-#endif
-
+#include <cstdint>
//
// make typedefs
@@ -75,18 +33,11 @@
#if defined(__APPLE__)
#include <CoreServices/CoreServices.h>
#else
-typedef signed TYPE_OF_SIZE_1 SInt8;
-typedef signed TYPE_OF_SIZE_2 SInt16;
-typedef signed TYPE_OF_SIZE_4 SInt32;
-typedef unsigned TYPE_OF_SIZE_1 UInt8;
-typedef unsigned TYPE_OF_SIZE_2 UInt16;
-typedef unsigned TYPE_OF_SIZE_4 UInt32;
+using SInt8 = std::int8_t;
+using SInt16 = std::int16_t;
+using SInt32 = std::int32_t;
+using UInt8 = std::uint8_t;
+using UInt16 = std::uint16_t;
+using UInt32 = std::uint32_t;
#endif
#endif
-//
-// clean up
-//
-
-#undef TYPE_OF_SIZE_1
-#undef TYPE_OF_SIZE_2
-#undef TYPE_OF_SIZE_4
diff --git a/src/lib/common/common.h b/src/lib/common/common.h
index 5ea215f..3946256 100644
--- a/src/lib/common/common.h
+++ b/src/lib/common/common.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
@@ -18,26 +18,8 @@
#pragma once
-#if defined(_WIN32)
-# define SYSAPI_WIN32 1
-# define WINAPI_MSWINDOWS 1
-#elif HAVE_CONFIG_H
+#if HAVE_CONFIG_H
# include "config.h"
-#else
-# error "config.h missing"
-#endif
-
-// VC++ has built-in sized types
-#if defined(_MSC_VER)
-# include <wchar.h>
-# define TYPE_OF_SIZE_1 __int8
-# define TYPE_OF_SIZE_2 __int16
-# define TYPE_OF_SIZE_4 __int32
-#else
-# define SIZE_OF_CHAR 1
-# define SIZE_OF_SHORT 2
-# define SIZE_OF_INT 4
-# define SIZE_OF_LONG 4
#endif
// define NULL
diff --git a/src/lib/common/stdbitset.h b/src/lib/common/stdbitset.h
index 1096249..65433ac 100644
--- a/src/lib/common/stdbitset.h
+++ b/src/lib/common/stdbitset.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stddeque.h b/src/lib/common/stddeque.h
index ffaed24..5033826 100644
--- a/src/lib/common/stddeque.h
+++ b/src/lib/common/stddeque.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdfstream.h b/src/lib/common/stdfstream.h
index e9aa263..0328a4b 100644
--- a/src/lib/common/stdfstream.h
+++ b/src/lib/common/stdfstream.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdistream.h b/src/lib/common/stdistream.h
index b19e2ab..2e9c3cc 100644
--- a/src/lib/common/stdistream.h
+++ b/src/lib/common/stdistream.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdlist.h b/src/lib/common/stdlist.h
index d530e57..f1c03e2 100644
--- a/src/lib/common/stdlist.h
+++ b/src/lib/common/stdlist.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdmap.h b/src/lib/common/stdmap.h
index 2351074..7a1040e 100644
--- a/src/lib/common/stdmap.h
+++ b/src/lib/common/stdmap.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdostream.h b/src/lib/common/stdostream.h
index bb82285..10b65d0 100644
--- a/src/lib/common/stdostream.h
+++ b/src/lib/common/stdostream.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdpost.h b/src/lib/common/stdpost.h
index 8046da0..d7f0f9c 100644
--- a/src/lib/common/stdpost.h
+++ b/src/lib/common/stdpost.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdpre.h b/src/lib/common/stdpre.h
index 8ccd308..bf8b9bf 100644
--- a/src/lib/common/stdpre.h
+++ b/src/lib/common/stdpre.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdset.h b/src/lib/common/stdset.h
index 1c98971..e247745 100644
--- a/src/lib/common/stdset.h
+++ b/src/lib/common/stdset.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdsstream.h b/src/lib/common/stdsstream.h
index 43671ff..1bfdd7e 100644
--- a/src/lib/common/stdsstream.h
+++ b/src/lib/common/stdsstream.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdstring.h b/src/lib/common/stdstring.h
index f320ca8..3b3ba0e 100644
--- a/src/lib/common/stdstring.h
+++ b/src/lib/common/stdstring.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/stdvector.h b/src/lib/common/stdvector.h
index ab4b853..4dd263d 100644
--- a/src/lib/common/stdvector.h
+++ b/src/lib/common/stdvector.h
@@ -2,11 +2,11 @@
* barrier -- mouse and keyboard sharing utility
* Copyright (C) 2012-2016 Symless Ltd.
* Copyright (C) 2002 Chris Schoeneman
- *
+ *
* 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
diff --git a/src/lib/common/unix/DataDirectories.cpp b/src/lib/common/unix/DataDirectories.cpp
index 72e510a..cf3ca24 100644
--- a/src/lib/common/unix/DataDirectories.cpp
+++ b/src/lib/common/unix/DataDirectories.cpp
@@ -18,11 +18,11 @@
#include "../DataDirectories.h"
#include <unistd.h> // sysconf
-#include <stdlib.h> // getenv
+#include <cstdlib> // getenv
#include <sys/types.h> // getpwuid(_r)
#include <pwd.h> // getpwuid(_r)
-const std::string ProfileSubdir = "/barrier";
+namespace barrier {
static std::string pw_dir(struct passwd* pwentp)
{
@@ -33,7 +33,7 @@ static std::string pw_dir(struct passwd* pwentp)
#ifdef HAVE_GETPWUID_R
-static std::string unix_home()
+static fs::path unix_home()
{
long size = -1;
#if defined(_SC_GETPW_R_SIZE_MAX)
@@ -46,47 +46,47 @@ static std::string unix_home()
struct passwd* pwentp;
std::string buffer(size, 0);
getpwuid_r(getuid(), &pwent, &buffer[0], size, &pwentp);
- return pw_dir(pwentp);
+ return fs::u8path(pw_dir(pwentp));
}
#else // not HAVE_GETPWUID_R
-static std::string unix_home()
+static fs::path unix_home()
{
- return pw_dir(getpwuid(getuid()));
+ return fs::u8path(pw_dir(getpwuid(getuid())));
}
#endif // HAVE_GETPWUID_R
-static std::string profile_basedir()
+static fs::path profile_basedir()
{
#ifdef WINAPI_XWINDOWS
// linux/bsd adheres to freedesktop standards
// https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
- const char* dir = getenv("XDG_DATA_HOME");
+ const char* dir = std::getenv("XDG_DATA_HOME");
if (dir != NULL)
- return dir;
- return unix_home() + "/.local/share";
+ return fs::u8path(dir);
+ return unix_home() / ".local/share";
#else
// macos has its own standards
// https://developer.apple.com/library/content/documentation/General/Conceptual/MOSXAppProgrammingGuide/AppRuntime/AppRuntime.html
- return unix_home() + "/Library/Application Support";
+ return unix_home() / "Library/Application Support";
#endif
}
-const std::string& DataDirectories::profile()
+const fs::path& DataDirectories::profile()
{
if (_profile.empty())
- _profile = profile_basedir() + ProfileSubdir;
+ _profile = profile_basedir() / "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())
// TODO: where on a unix system should public/global shared data go?
@@ -94,21 +94,23 @@ const std::string& DataDirectories::global()
_global = "/tmp";
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()
{
if (_systemconfig.empty())
_systemconfig = "/etc";
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/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