فهرست منبع

--- Merging r42559 into '.':
U rtl/objpas/sysutils/filutil.inc
--- Recording mergeinfo for merge of r42559 into '.':
U .

# revisions: 42559
r42559 | svenbarth | 2019-08-02 15:16:17 +0200 (Fri, 02 Aug 2019) | 1 line
Changed paths:
M /trunk/rtl/objpas/sysutils/filutil.inc

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

git-svn-id: branches/fixes_3_2@47261 -

marco 4 سال پیش
والد
کامیت
55401227f9
1فایلهای تغییر یافته به همراه29 افزوده شده و 14 حذف شده
  1. 29 14
      rtl/objpas/sysutils/filutil.inc

+ 29 - 14
rtl/objpas/sysutils/filutil.inc

@@ -602,31 +602,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}
@@ -635,14 +655,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}