mirror of
https://github.com/doublecmd/doublecmd.git
synced 2026-06-21 09:58:13 +00:00
FIX: Range check error (fixes #2338)
This commit is contained in:
parent
2baeda7ec9
commit
3c9894fca3
1 changed files with 39 additions and 0 deletions
|
|
@ -499,6 +499,43 @@ end;
|
|||
|
||||
|
||||
{$IF DEFINED(UNIX)}
|
||||
procedure NormalizeFileTime(var UnixTime: DCBasicTypes.TFileTimeEx);
|
||||
const
|
||||
NSecsPerSec = 1000000000;
|
||||
begin
|
||||
while UnixTime.nanosec <= -NSecsPerSec do
|
||||
begin
|
||||
if (UnixTime.sec = Low(Int64)) then
|
||||
begin
|
||||
UnixTime.nanosec:= 0;
|
||||
Exit;
|
||||
end;
|
||||
Dec(UnixTime.sec);
|
||||
Inc(UnixTime.nanosec, NSecsPerSec);
|
||||
end;
|
||||
while UnixTime.nanosec >= NSecsPerSec do
|
||||
begin
|
||||
if (UnixTime.sec = High(Int64)) then
|
||||
begin
|
||||
UnixTime.nanosec:= NSecsPerSec - 1;
|
||||
Exit;
|
||||
end;
|
||||
Inc(UnixTime.sec);
|
||||
Dec(UnixTime.nanosec, NSecsPerSec);
|
||||
end;
|
||||
if (UnixTime.nanosec < 0) then
|
||||
begin
|
||||
if (UnixTime.sec = Low(Int64)) then
|
||||
begin
|
||||
UnixTime.nanosec:= 0;
|
||||
end
|
||||
else begin
|
||||
Dec(UnixTime.sec);
|
||||
Inc(UnixTime.nanosec, NSecsPerSec);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime;
|
||||
var
|
||||
filetime: DCBasicTypes.TFileTimeEx;
|
||||
|
|
@ -512,6 +549,8 @@ var
|
|||
ATime: TTimeStruct;
|
||||
Milliseconds: Word;
|
||||
begin
|
||||
NormalizeFileTime(UnixTime);
|
||||
|
||||
if (fpLocalTime(@UnixTime.sec, @ATime) = nil) then
|
||||
Exit(UnixEpoch);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue