diff options
author | Craig A. Berry <craigberry@mac.com> | 2010-06-29 07:14:39 -0500 |
---|---|---|
committer | Craig A. Berry <craigberry@mac.com> | 2010-06-29 07:14:39 -0500 |
commit | ded2eedcb4ea5645092eea71df32e0f737b89d90 (patch) | |
tree | 4db8fe398cde72505f0de0e4bc90dd0d784b8830 /cpan/Time-Piece | |
parent | 86b22379fed2b21897f767d5f96d76a24dd46436 (diff) | |
download | perl-ded2eedcb4ea5645092eea71df32e0f737b89d90.tar.gz |
Remove alloca() use from Time::Piece for portability.
In 1.17, T::P started using its own strptime (almost) everywhere,
and this _strptime contains a single reference to alloca(). The
Linux and BSD man pages recommend against using alloca(), the
function doesn't exist on HP-UX or VMS, and it's impossible to
error check it. So replace it here with malloc().
If getting three or four bytes from the heap instead of the stack
is considered a problem, an alternative would be researching the
maximum length of a timezone name and using an automatic variable
to hold it.
Diffstat (limited to 'cpan/Time-Piece')
-rw-r--r-- | cpan/Time-Piece/Piece.pm | 2 | ||||
-rw-r--r-- | cpan/Time-Piece/Piece.xs | 23 |
2 files changed, 8 insertions, 17 deletions
diff --git a/cpan/Time-Piece/Piece.pm b/cpan/Time-Piece/Piece.pm index 2afbdba200..a3f7fb660b 100644 --- a/cpan/Time-Piece/Piece.pm +++ b/cpan/Time-Piece/Piece.pm @@ -19,7 +19,7 @@ our %EXPORT_TAGS = ( ':override' => 'internal', ); -our $VERSION = '1.20'; +our $VERSION = '1.20_01'; bootstrap Time::Piece $VERSION; diff --git a/cpan/Time-Piece/Piece.xs b/cpan/Time-Piece/Piece.xs index 0bbefd3a9d..5d3f992c9a 100644 --- a/cpan/Time-Piece/Piece.xs +++ b/cpan/Time-Piece/Piece.xs @@ -307,19 +307,6 @@ my_mini_mktime(struct tm *ptm) # define strncasecmp(x,y,n) strnicmp(x,y,n) # endif -#if defined(WIN32) -#if defined(__BORLANDC__) -void * __cdecl _EXPFUNC alloca(_SIZE_T __size); -#else -#define alloca _alloca -#endif -#else -#if defined(_SGIAPI) || defined( __sgi ) || ( defined (__SVR4) && defined (__sun) ) -/* required for IRIX and Solaris */ -#include <alloca.h> -#endif -#endif - /* strptime copied from freebsd with the following copyright: */ /* * Copyright (c) 1994 Powerdog Industries. All rights reserved. @@ -916,15 +903,19 @@ label: for (cp = buf; *cp && isupper((unsigned char)*cp); ++cp) {/*empty*/} if (cp - buf) { - zonestr = (char *)alloca(cp - buf + 1); + zonestr = malloc(cp - buf + 1); + if (!zonestr) { + errno = ENOMEM; + return 0; + } strncpy(zonestr, buf, cp - buf); zonestr[cp - buf] = '\0'; my_tzset(aTHX); if (0 == strcmp(zonestr, "GMT")) { got_GMT = 1; - } else { - return 0; } + free(zonestr); + if (!got_GMT) return 0; buf += cp - buf; } } |