1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-12 03:18:26 -06:00

Linux: autodetect host drive name using sysfs (closes #233)

This commit is contained in:
gv5470
2017-11-28 19:03:07 +01:00
parent f53eb8e260
commit 49f9516c9e

View File

@@ -72,6 +72,29 @@ namespace VeraCrypt
path = StringConverter::StripTrailingNumber (StringConverter::ToSingle (Path));
// If simply removing trailing number didn't produce a valid drive name, try to use sysfs to get the right one
if (!path.IsDevice()) {
struct stat st;
if(stat (StringConverter::ToSingle (Path).c_str (), &st) == 0) {
const long maxPathLength = pathconf ("/", _PC_PATH_MAX);
if(maxPathLength != -1) {
string linkPathName ("/sys/dev/block/");
linkPathName += StringConverter::ToSingle (major (st.st_rdev)) + string (":") + StringConverter::ToSingle (minor (st.st_rdev));
char linkTargetPath[maxPathLength+1] = "";
if(readlink(linkPathName.c_str (), linkTargetPath, sizeof (linkTargetPath)) != -1) {
const string targetPathStr (linkTargetPath);
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);
}
}
}
}
#elif defined (TC_MACOSX)
string pathStr = StringConverter::StripTrailingNumber (StringConverter::ToSingle (Path));