==== //depot/Piece.pm#2 - /Users/gisle/camel/src/cpan/T/Time/Time-Piece/main/Piece.pm ====
Index: Piece.pm
--- Piece.pm.~1~ Tue May 6 22:00:41 2008
+++ Piece.pm Tue May 6 22:00:41 2008
@@ -607,12 +607,8 @@
$final_month = $final_month % 12;
}
- my $string = ($time->year + $num_years) . "-" .
- ($final_month + 1) . "-" .
- ($time->mday) . " " . $time->hms;
- my $format = "%Y-%m-%d %H:%M:%S";
- #warn("Parsing string: $string\n");
- my @vals = _strptime($string, $format);
+ my @vals = _mini_mktime($time->sec, $time->min, $time->hour,
+ $time->mday, $final_month, $time->year - 1900 + $num_years);
# warn(sprintf("got vals: %d-%d-%d %d:%d:%d\n", reverse(@vals)));
return scalar $time->_mktime(\@vals, $time->[c_islocal]);
}
==== //depot/Piece.xs#5 - /Users/gisle/camel/src/cpan/T/Time/Time-Piece/main/Piece.xs ====
Index: Piece.xs
--- Piece.xs.~1~ Tue May 6 22:00:41 2008
+++ Piece.xs Tue May 6 22:00:41 2008
@@ -915,3 +915,37 @@
PUSHs(sv_2mortal(newSViv(0)));
/* islocal */
PUSHs(sv_2mortal(newSViv(0)));
+
+void
+_mini_mktime(int sec, int min, int hour, int mday, int mon, int year)
+ PREINIT:
+ struct tm mytm;
+ time_t t;
+ PPCODE:
+ t = 0;
+ mytm = *gmtime(&t);
+
+ mytm.tm_sec = sec;
+ mytm.tm_min = min;
+ mytm.tm_hour = hour;
+ mytm.tm_mday = mday;
+ mytm.tm_mon = mon;
+ mytm.tm_year = year;
+
+ my_mini_mktime(&mytm);
+
+ EXTEND(SP, 11);
+ PUSHs(sv_2mortal(newSViv(mytm.tm_sec)));
+ PUSHs(sv_2mortal(newSViv(mytm.tm_min)));
+ PUSHs(sv_2mortal(newSViv(mytm.tm_hour)));
+ PUSHs(sv_2mortal(newSViv(mytm.tm_mday)));
+ PUSHs(sv_2mortal(newSViv(mytm.tm_mon)));
+ PUSHs(sv_2mortal(newSViv(mytm.tm_year)));
+ PUSHs(sv_2mortal(newSViv(mytm.tm_wday)));
+ PUSHs(sv_2mortal(newSViv(mytm.tm_yday)));
+ /* isdst */
+ PUSHs(sv_2mortal(newSViv(0)));
+ /* epoch */
+ PUSHs(sv_2mortal(newSViv(0)));
+ /* islocal */
+ PUSHs(sv_2mortal(newSViv(0)));
End of Patch.