Change 16199: Time::Local compatibility patches, from Graham

[email protected] (Chris Nandor) Fri, 26 Apr 2002 19:09:36 -0400
Newsgroups perl.perl5.changes.mac
Message-ID <p05100302b8ef8ea9ae97@[10.0.1.177]>
Change 16199 by pudge@pudge-mobile on 2002/04/26 21:08:52

	Time::Local compatibility patches, from Graham

Affected files ...

.... //depot/macperl/lib/Time/Local.pm#2 edit

Differences ...

==== //depot/macperl/lib/Time/Local.pm#2 (text) ====
Index: perl/lib/Time/Local.pm
--- perl/lib/Time/Local.pm.~1~	Fri Apr 26 15:15:05 2002
+++ perl/lib/Time/Local.pm	Fri Apr 26 15:15:05 2002
@@ -19,25 +19,36 @@
 my $NextCentury  = $ThisYear - $ThisYear % 100;
    $NextCentury += 100 if $Breakpoint < 50;
 my $Century      = $NextCentury - 100;
+my $SecOff       = 0;
 
 my (%Options, %Cheat);
 
+my $MaxInt = ((1<<(8 * $Config{intsize} - 2))-1)*2 + 1;
+my $MaxDay = int(($MaxInt-43200)/86400)-1;
+
 # Determine the EPOC day for this machine
 my $Epoc = 0;
 if ($^O eq 'vos') {
 # work around posix-977 -- VOS doesn't handle dates in
 # the range 1970-1980.
   $Epoc = _daygm((0, 0, 0, 1, 0, 70, 4, 0));
-} else {
+}
+elsif ($^O eq 'MacOS') {
+  no integer;
+
+  $MaxDay *=2 if $^O eq 'MacOS';  # time_t unsigned ... quick hack?
+  # MacOS time() is seconds since 1 Jan 1904, localtime
+  # so we need to calculate an offset to apply later
+  $Epoc = 693901;
+  $SecOff = timelocal(localtime(0)) - timelocal(gmtime(0));
+  $Epoc += _daygm(gmtime(0));
+}
+else {
   $Epoc = _daygm(gmtime(0));
 }
 
 %Cheat=(); # clear the cache as epoc has changed
 
-my $MaxInt = ((1<<(8 * $Config{intsize} - 2))-1)*2 + 1;
-my $MaxDay = int(($MaxInt-43200)/86400)-1;
-
-
 sub _daygm {
     $_[3] + ($Cheat{pack("ss",@_[4,5])} ||= do {
 	my $month = ($_[4] + 10) % 12;
@@ -48,7 +59,11 @@
 
 
 sub _timegm {
-    $_[0]  +  60 * $_[1]  +  3600 * $_[2]  +  86400 * &_daygm;
+    my $sec = $SecOff + $_[0]  +  60 * $_[1]  +  3600 * $_[2];
+
+    no integer;
+
+    $sec +  86400 * &_daygm;
 }
 
 
@@ -86,7 +101,11 @@
 	croak "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)";
     }
 
-    $sec + 60*$min + 3600*$hour + 86400*$days;
+    $sec += $SecOff + 60*$min + 3600*$hour;
+
+    no integer;
+
+    $sec + 86400*$days;
 }
 
 
@@ -97,6 +116,7 @@
 
 
 sub timelocal {
+    no integer;
     my $ref_t = &timegm;
     my $loc_t = _timegm(localtime($ref_t));
 
End of Patch.