* fix for Mantis #35906: use more accurate modified time from the FindData on Windows for the Timestamp

git-svn-id: trunk@42559 -
This commit is contained in:
svenbarth 2019-08-02 13:16:17 +00:00
parent 7809930b08
commit 3d585db43d

View File

@ -592,31 +592,51 @@ begin
InternalFindClose(f.FindHandle{$ifdef SEARCHREC_USEFINDDATA},f.FindData{$endif});
end;
{$if defined(windows) and not defined(win16)}
function FindDataTimeToDateTime(constref aFileTime: FILETIME; out aResult: TDateTime): Boolean;
var
st, lt: TSystemTime;
begin
Result := FileTimeToSystemTime(aFileTime, st);
if Result then begin
{$ifndef wince}
if SystemTimeToTzSpecificLocalTime(Nil, st, lt) then
aResult := SystemTimeToDateTime(lt)
else
{$endif}
aResult := SystemTimeToDateTime(st);
end;
end;
{$endif}
{ TUnicodeSearchRec }
function TUnicodeSearchRec.GetTimeStamp: TDateTime;
begin
{$if declared(FindDataTimeToDateTime)}
if not FindDataTimeToDateTime(FindData.ftLastWriteTime, Result) then
{$else}
Result := FileDateToDateTime(Time);
{$endif}
end;
{ TRawbyteSearchRec }
function TRawbyteSearchRec.GetTimeStamp: TDateTime;
begin
{$if declared(FindDataTimeToDateTime)}
if not FindDataTimeToDateTime(FindData.ftLastWriteTime, Result) then
{$else}
Result := FileDateToDateTime(Time);
{$endif}
end;
{ TUnicodeSymLinkRec }
function TUnicodeSymLinkRec.GetTimeStamp: TDateTime;
{$if defined(win32) or defined(win64) or defined(wince)}
var
st: TSystemTime;
{$endif}
begin
{$if defined(win32) or defined(win64) or defined(wince)}
FileTimeToSystemTime(FindData.ftLastWriteTime, st);
Result := SystemTimeToDateTime(st);
{$if declared(FindDataTimeToDateTime)}
if not FindDataTimeToDateTime(FindData.ftLastWriteTime, Result) then
{$else}
Result := 0;
{$endif}
@ -625,14 +645,9 @@ end;
{ TRawbyteSymLinkRec }
function TRawbyteSymLinkRec.GetTimeStamp: TDateTime;
{$if defined(win32) or defined(win64) or defined(wince)}
var
st: TSystemTime;
{$endif}
begin
{$if defined(win32) or defined(win64) or defined(wince)}
FileTimeToSystemTime(FindData.ftLastWriteTime, st);
Result := SystemTimeToDateTime(st);
{$if declared(FindDataTimeToDateTime)}
if not FindDataTimeToDateTime(FindData.ftLastWriteTime, Result) then
{$else}
Result := 0;
{$endif}