From: Gisle Aas Date: Fri, 23 May 2008 00:20:28 +0000 (+0200) Subject: Time-Piece-1.13 test failures on HP-UX X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3df1a9e2cbaefdfaf03a36fc1a444e2d430049d5;p=p5sagit%2Fp5-mst-13.2.git Time-Piece-1.13 test failures on HP-UX Message-Id: Don't rely on strptime being able to parse illegal dates. Also being tracked via so this also brings blead closer to the next (as yet unreleased) version of Time::Piece. p4raw-id: //depot/perl@33918 --- diff --git a/ext/Time/Piece/Piece.pm b/ext/Time/Piece/Piece.pm index fc6e730..a739c39 100644 --- a/ext/Time/Piece/Piece.pm +++ b/ext/Time/Piece/Piece.pm @@ -22,7 +22,7 @@ our %EXPORT_TAGS = ( ':override' => 'internal', ); -our $VERSION = '1.13_01'; +our $VERSION = '1.13_02'; bootstrap Time::Piece $VERSION; @@ -607,12 +607,8 @@ sub add_months { $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]); } diff --git a/ext/Time/Piece/Piece.xs b/ext/Time/Piece/Piece.xs index 12c3f45..e20b6d4 100644 --- a/ext/Time/Piece/Piece.xs +++ b/ext/Time/Piece/Piece.xs @@ -914,3 +914,37 @@ _strptime ( string, format ) 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)));