Skip to content

Commit c32db48

Browse files
committed
FIX: EDateOutOfRange exception with negative Unix time (fixes doublecmd#2666)
1 parent 190825e commit c32db48

1 file changed

Lines changed: 4 additions & 27 deletions

File tree

components/doublecmd/dcdatetimeutils.pas

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -596,31 +596,10 @@ function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime;
596596
function DateTimeToUnixFileTime(DateTime : TDateTime): TUnixFileTime;
597597
{$IF DEFINED(UNIX)}
598598
var
599-
AUnixTime: TTime;
600-
ATime: TTimeStruct;
601-
Year, Month, Day: Word;
602-
Hour, Minute, Second, MilliSecond: Word;
599+
AUnixTime: TFileTimeEx;
603600
begin
604-
DecodeDate(DateTime, Year, Month, Day);
605-
DecodeTime(DateTime, Hour, Minute, Second, MilliSecond);
606-
607-
ATime.tm_isdst:= -1;
608-
609-
ATime.tm_year:= Year - 1900;
610-
ATime.tm_mon:= Month - 1;
611-
ATime.tm_mday:= Day;
612-
613-
ATime.tm_hour:= Hour;
614-
ATime.tm_min:= Minute;
615-
ATime.tm_sec:= Second;
616-
617-
AUnixTime:= fpMkTime(@ATime);
618-
619-
if (AUnixTime = -1) then
620-
Result:= 0
621-
else begin
622-
Result:= TUnixFileTime(AUnixTime);
623-
end;
601+
AUnixTime:= DateTimeToUnixFileTimeEx(DateTime);
602+
Result:= TUnixFileTime(AUnixTime.Sec);
624603
end;
625604
{$ELSE}
626605
var
@@ -639,9 +618,6 @@ function DateTimeToUnixFileTimeEx(DateTime : TDateTime): DCBasicTypes.TFileTimeE
639618
Year, Month, Day: Word;
640619
Hour, Minute, Second, MilliSecond: Word;
641620
begin
642-
if DateTime < UnixEpoch then
643-
raise EDateOutOfRange.Create(DateTime);
644-
645621
DecodeDate(DateTime, Year, Month, Day);
646622
DecodeTime(DateTime, Hour, Minute, Second, MilliSecond);
647623

@@ -660,6 +636,7 @@ function DateTimeToUnixFileTimeEx(DateTime : TDateTime): DCBasicTypes.TFileTimeE
660636
if (AUnixTime = -1) then
661637
Result:= TFileTimeExNull
662638
else begin
639+
if (AUnixTime < 0) then MilliSecond:= 0;
663640
Result:= TFileTimeEx.Create(AUnixTime, MilliSecond * 1000 * 1000);
664641
end;
665642
end;

0 commit comments

Comments
 (0)