summaryrefslogtreecommitdiff
path: root/rtl/win
diff options
context:
space:
mode:
authorsvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-09-04 14:41:40 +0000
committersvenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2>2020-09-04 14:41:40 +0000
commitebc5ef6526136cad30aab5432b8c02e3a70faabc (patch)
treeedbde32fe435d0bee0e3ff3f3541f5b8e0081be7 /rtl/win
parent11b8239469dfe6e5dc181514f0fab8ea986e255f (diff)
downloadfpc-ebc5ef6526136cad30aab5432b8c02e3a70faabc.tar.gz
* handle unknown reparse tags as non-symlinks
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@46761 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'rtl/win')
-rw-r--r--rtl/win/sysutils.pp23
1 files changed, 13 insertions, 10 deletions
diff --git a/rtl/win/sysutils.pp b/rtl/win/sysutils.pp
index fd7abcc58d..ec36bb4caa 100644
--- a/rtl/win/sysutils.pp
+++ b/rtl/win/sysutils.pp
@@ -476,16 +476,19 @@ begin
end;
end;
- Handle := FindFirstFileExW(PUnicodeChar(SymLinkRec.TargetName), FindExInfoDefaults , @SymLinkRec.FindData,
- FindExSearchNameMatch, Nil, 0);
- if Handle <> INVALID_HANDLE_VALUE then begin
- Windows.FindClose(Handle);
- SymLinkRec.Attr := SymLinkRec.FindData.dwFileAttributes;
- SymLinkRec.Size := QWord(SymLinkRec.FindData.nFileSizeHigh) shl 32 + QWord(SymLinkRec.FindData.nFileSizeLow);
- end else if RaiseErrorOnMissing then
- raise EDirectoryNotFoundException.Create(SysErrorMessage(GetLastOSError))
- else
- SymLinkRec.TargetName := '';
+ if SymLinkRec.TargetName <> '' then begin
+ Handle := FindFirstFileExW(PUnicodeChar(SymLinkRec.TargetName), FindExInfoDefaults , @SymLinkRec.FindData,
+ FindExSearchNameMatch, Nil, 0);
+ if Handle <> INVALID_HANDLE_VALUE then begin
+ Windows.FindClose(Handle);
+ SymLinkRec.Attr := SymLinkRec.FindData.dwFileAttributes;
+ SymLinkRec.Size := QWord(SymLinkRec.FindData.nFileSizeHigh) shl 32 + QWord(SymLinkRec.FindData.nFileSizeLow);
+ end else if RaiseErrorOnMissing then
+ raise EDirectoryNotFoundException.Create(SysErrorMessage(GetLastOSError))
+ else
+ SymLinkRec.TargetName := '';
+ end else
+ SetLastError(ERROR_REPARSE_TAG_INVALID);
end else
SetLastError(ERROR_REPARSE_TAG_INVALID);
finally