VeraCrypt
aboutsummaryrefslogtreecommitdiff
path: root/src/Platform/Unix/FilesystemPath.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Platform/Unix/FilesystemPath.cpp')
-rw-r--r--src/Platform/Unix/FilesystemPath.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/Platform/Unix/FilesystemPath.cpp b/src/Platform/Unix/FilesystemPath.cpp
index 5841edf4..1230c2aa 100644
--- a/src/Platform/Unix/FilesystemPath.cpp
+++ b/src/Platform/Unix/FilesystemPath.cpp
@@ -15,6 +15,9 @@
#include "Platform/StringConverter.h"
#include <stdio.h>
#include <sys/stat.h>
+#if !defined(__FreeBSD__) && !defined(__APPLE__) && !defined(__OpenBSD__)
+#include <sys/sysmacros.h>
+#endif
namespace VeraCrypt
{
@@ -83,10 +86,10 @@ namespace VeraCrypt
string linkPathName ("/sys/dev/block/");
linkPathName += StringConverter::ToSingle (major (st.st_rdev)) + string (":") + StringConverter::ToSingle (minor (st.st_rdev));
- char linkTargetPath[maxPathLength+1] = "";
+ vector<char> linkTargetPath(maxPathLength+1);
- if(readlink(linkPathName.c_str (), linkTargetPath, sizeof (linkTargetPath)) != -1) {
- const string targetPathStr (linkTargetPath);
+ if(readlink(linkPathName.c_str (), linkTargetPath.data(), linkTargetPath.size()) != -1) {
+ const string targetPathStr (linkTargetPath.data());
const size_t lastSlashPos = targetPathStr.find_last_of ('/');
const size_t secondLastSlashPos = targetPathStr.find_last_of ('/', lastSlashPos-1);
path = string ("/dev/") + targetPathStr.substr (secondLastSlashPos+1, lastSlashPos-secondLastSlashPos-1);
@@ -104,8 +107,11 @@ namespace VeraCrypt
string pathStr = StringConverter::ToSingle (Path);
size_t p = pathStr.rfind ("s");
- if (p == string::npos)
- throw PartitionDeviceRequired (SRC_POS);
+ if (p == string::npos) {
+ p = pathStr.rfind ("p");
+ if (p == string::npos)
+ throw PartitionDeviceRequired (SRC_POS);
+ }
path = pathStr.substr (0, p);
#elif defined (TC_SOLARIS)