diff options
author | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-09-04 14:41:40 +0000 |
---|---|---|
committer | svenbarth <svenbarth@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2020-09-04 14:41:40 +0000 |
commit | ebc5ef6526136cad30aab5432b8c02e3a70faabc (patch) | |
tree | edbde32fe435d0bee0e3ff3f3541f5b8e0081be7 /rtl/win | |
parent | 11b8239469dfe6e5dc181514f0fab8ea986e255f (diff) | |
download | fpc-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.pp | 23 |
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 |