Skip to content

Commit d092f96

Browse files
authored
Merge pull request #26702 from gmittert/NTNoMore
Convert NT paths to DOSPath when resolving Symlinks
2 parents bed7f23 + e587c32 commit d092f96

File tree

2 files changed

+9
-64
lines changed

2 files changed

+9
-64
lines changed

tools/SourceKit/lib/SwiftLang/SwiftLangSupport.cpp

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -911,36 +911,10 @@ void SwiftLangSupport::printMemberDeclDescription(const swift::ValueDecl *VD,
911911

912912
std::string SwiftLangSupport::resolvePathSymlinks(StringRef FilePath) {
913913
std::string InputPath = FilePath;
914-
#if !defined(_WIN32)
915-
char full_path[MAXPATHLEN];
916-
if (const char *path = realpath(InputPath.c_str(), full_path))
917-
return path;
918-
919-
return InputPath;
920-
#else
921-
wchar_t full_path[MAX_PATH] = {0};
922-
llvm::SmallVector<llvm::UTF16, 50> utf16Path;
923-
llvm::convertUTF8ToUTF16String(InputPath.c_str(), utf16Path);
924-
925-
HANDLE fileHandle = CreateFileW(
926-
(LPCWSTR)utf16Path.data(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
927-
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr);
928-
929-
if (fileHandle == INVALID_HANDLE_VALUE)
914+
llvm::SmallString<256> output;
915+
if (llvm::sys::fs::real_path(InputPath, output))
930916
return InputPath;
931-
932-
DWORD numChars = GetFinalPathNameByHandleW(fileHandle, full_path, MAX_PATH,
933-
FILE_NAME_NORMALIZED);
934-
CloseHandle(fileHandle);
935-
std::string utf8Path;
936-
if (numChars > 0 && numChars <= MAX_PATH) {
937-
llvm::ArrayRef<char> pathRef((const char *)full_path,
938-
(const char *)(full_path + numChars));
939-
return llvm::convertUTF16ToUTF8String(pathRef, utf8Path) ? utf8Path
940-
: InputPath;
941-
}
942-
return InputPath;
943-
#endif
917+
return output.str();
944918
}
945919

946920
void SwiftLangSupport::getStatistics(StatisticsReceiver receiver) {

tools/SourceKit/tools/sourcekitd-test/sourcekitd-test.cpp

Lines changed: 6 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -49,35 +49,6 @@ using namespace sourcekitd_test;
4949
#if defined(_WIN32)
5050
namespace {
5151
int STDOUT_FILENO = _fileno(stdout);
52-
const constexpr size_t MAXPATHLEN = MAX_PATH + 1;
53-
char *realpath(const char *path, char *resolved_path) {
54-
wchar_t full_path[MAXPATHLEN] = {0};
55-
llvm::SmallVector<llvm::UTF16, 50> utf16Path;
56-
llvm::convertUTF8ToUTF16String(path, utf16Path);
57-
58-
HANDLE fileHandle = CreateFileW(
59-
(LPCWSTR)utf16Path.data(), 0, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
60-
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr);
61-
62-
if (fileHandle == INVALID_HANDLE_VALUE)
63-
return nullptr;
64-
DWORD success = GetFinalPathNameByHandleW(fileHandle, full_path, MAX_PATH,
65-
FILE_NAME_NORMALIZED);
66-
CloseHandle(fileHandle);
67-
if (!success) return nullptr;
68-
69-
std::string utf8Path;
70-
llvm::ArrayRef<char> pathRef((const char *)full_path,
71-
(const char *)(full_path + MAX_PATH));
72-
if (!llvm::convertUTF16ToUTF8String(pathRef, utf8Path))
73-
return nullptr;
74-
75-
if (!resolved_path) {
76-
resolved_path = static_cast<char *>(malloc(utf8Path.length() + 1));
77-
}
78-
std::copy(std::begin(utf8Path), std::end(utf8Path), resolved_path);
79-
return resolved_path;
80-
}
8152
}
8253
#endif
8354

@@ -1445,9 +1416,9 @@ static void printCursorInfo(sourcekitd_variant_t Info, StringRef FilenameIn,
14451416
}
14461417

14471418
std::string Filename = FilenameIn;
1448-
char full_path[MAXPATHLEN];
1449-
if (const char *path = realpath(Filename.c_str(), full_path))
1450-
Filename = path;
1419+
llvm::SmallString<256> output;
1420+
if (!llvm::sys::fs::real_path(Filename, output))
1421+
Filename = output.str();
14511422

14521423
const char *Kind = sourcekitd_uid_get_string_ptr(KindUID);
14531424
const char *USR = sourcekitd_variant_dictionary_get_string(Info, KeyUSR);
@@ -1617,9 +1588,9 @@ static void printRangeInfo(sourcekitd_variant_t Info, StringRef FilenameIn,
16171588
}
16181589

16191590
std::string Filename = FilenameIn;
1620-
char full_path[MAXPATHLEN];
1621-
if (const char *path = realpath(Filename.c_str(), full_path))
1622-
Filename = path;
1591+
llvm::SmallString<256> output;
1592+
if (llvm::sys::fs::real_path(Filename, output))
1593+
Filename = output.str();
16231594

16241595
sourcekitd_variant_t OffsetObj =
16251596
sourcekitd_variant_dictionary_get_value(Info, KeyOffset);

0 commit comments

Comments
 (0)