aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornicole mazzuca <mazzucan@outlook.com>2020-04-09 16:33:36 -0700
committerGitHub <noreply@github.com>2020-04-09 16:33:36 -0700
commit1448db9d6f1a1ebe661c8d7b850a255c63002a01 (patch)
tree6ccc4db0efdd76b71c37f383952970837d0e6a23
parent47a4913834d0f1e16a3340a8718c8bcdb8431f45 (diff)
downloadvcpkg-1448db9d6f1a1ebe661c8d7b850a255c63002a01.tar.gz
vcpkg-1448db9d6f1a1ebe661c8d7b850a255c63002a01.zip
[vcpkg-test] Fix the check for ability to make symlinks (#10543)
The old check checked to see if the computer was in developer mode _OR_ allowed sideloading apps, but we want _only_ developer mode.
-rw-r--r--toolsrc/src/vcpkg-test/files.cpp4
-rw-r--r--toolsrc/src/vcpkg-test/util.cpp26
2 files changed, 14 insertions, 16 deletions
diff --git a/toolsrc/src/vcpkg-test/files.cpp b/toolsrc/src/vcpkg-test/files.cpp
index d8bc5ba74..cbe1e81c3 100644
--- a/toolsrc/src/vcpkg-test/files.cpp
+++ b/toolsrc/src/vcpkg-test/files.cpp
@@ -65,8 +65,6 @@ namespace
Width width = Width{5},
CurrentDepth current_depth = CurrentDepth{0})
{
- std::random_device rd;
-
// we want ~70% of our "files" to be directories, and then a third
// each of the remaining ~30% to be regular files, directory symlinks,
// and regular symlinks
@@ -132,7 +130,7 @@ namespace
CHECK_EC_ON_FILE(base_link, ec);
vcpkg::Test::create_symlink(base_link, base, ec);
}
- else // type == directory_symlink_tag
+ else // file_type == directory_symlink_tag
{
// directory symlink
auto parent = base;
diff --git a/toolsrc/src/vcpkg-test/util.cpp b/toolsrc/src/vcpkg-test/util.cpp
index d754baec1..c615f6bb2 100644
--- a/toolsrc/src/vcpkg-test/util.cpp
+++ b/toolsrc/src/vcpkg-test/util.cpp
@@ -114,21 +114,21 @@ namespace vcpkg::Test
#elif !defined(_WIN32) // FILESYSTEM_SYMLINK == FILESYSTEM_SYMLINK_STD
return AllowSymlinks::Yes;
#else
- HKEY key;
- bool allow_symlinks = true;
-
- const auto status = RegOpenKeyExW(
- HKEY_LOCAL_MACHINE, LR"(SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock)", 0, 0, &key);
-
- if (status == ERROR_FILE_NOT_FOUND)
- {
- allow_symlinks = false;
+ constexpr static const wchar_t regkey[] =
+ LR"(SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock)";
+ constexpr static const wchar_t regkey_member[] = LR"(AllowDevelopmentWithoutDevLicense)";
+
+ DWORD data;
+ DWORD dataSize = sizeof(data);
+ const auto status = RegGetValueW(
+ HKEY_LOCAL_MACHINE, regkey, regkey_member, RRF_RT_DWORD, nullptr, &data, &dataSize);
+
+ if (status == ERROR_SUCCESS && data == 1) {
+ return AllowSymlinks::Yes;
+ } else {
std::clog << "Symlinks are not allowed on this system\n";
+ return AllowSymlinks::No;
}
-
- if (status == ERROR_SUCCESS) RegCloseKey(key);
-
- return allow_symlinks ? AllowSymlinks::Yes : AllowSymlinks::No;
#endif
}
const static AllowSymlinks CAN_CREATE_SYMLINKS = internal_can_create_symlinks();