summaryrefslogtreecommitdiff
path: root/ext
Commit message (Collapse)AuthorAgeFilesLines
* remove Perl_pmflagRobin Barker2010-04-263-48/+4
|
* In Socket.xs, convert 3 croak()s to use %s and a constant string for the name.Nicholas Clark2010-04-241-3/+4
| | | | | This actually saves space, because xsubpp has to use each XS function's full name as a constant string to pass to newXS(), so any re-use of it is free.
* Bump version due to d97c33b505dd45c052a8bf42014917701b4502a5Leon Brocard2010-04-191-1/+1
|
* Bump version due to 255fdf19250671082618dae106a246f12379dbe6Leon Brocard2010-04-191-1/+1
|
* [PATCH] [5.12] Allow build on aix 4.2 (sigaction and IPv6)H.Merijn Brand2010-04-161-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Based on a patch by AUGUSTE-ETIENNE José <jose.auguste-etienne@cgss-guyane.fr> The attached patches are necessary to work around aix 4.2 lack of support for IPv6, and limited support for POSIX sigaction() The hints/aix_4.sh patch solves the following build failure: "Socket.xs", line 468.16: 1506-007 (S) "struct in6_addr" is undefined. The ext/POSIX/t/sigaction.t patch solves the failing test reported a looong time ago: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2006-01/msg01124.html After testing a simple C program using POSIX sigaction() with SA_SIGINFO, I found that it worked on aix 4.3 but failed on aix 4.2. I think it's safe to skip the SA_SIGINFO test on the aix 4.2 platform. perl 5.12.0 builds fine on the following platforms / C compiler : aix 4.2.1 / vac 5.0.2.7 (with attached patches) aix 4.3.2 / gcc 2.95.3 aix 4.3.3 / vac 4.4.0.3 aix 4.3.3 / vac 5.0.28 aix 5.2 / GNUpro gcc 2.9.aix51.020209 The atatched patches should be applied to blead and maint.
* Bump $VERSION of IPC::Open3 to 1.06Rafael Garcia-Suarez2010-04-151-1/+1
|
* open3 errors in child croak parent RT#72016Eric Brine2010-04-152-57/+99
| | | | Errors in open3 no longer appear to originate from the executed command on forking systems.
* Add TODO test for RT#72016Eric Brine2010-04-151-1/+23
|
* [perl #74006] 5.12.0-RC stuffing bugZefram2010-04-142-1/+46
| | | | | | | There's a small bug in lex_stuff_pvn() that causes spurious syntax errors in an obscure situation. It happens if stuffing is performed on the last line of a file, and the line ends with a statement that lacks its terminating semicolon. Attached patch fixes and adds test.
* Merge commit 'origin/davem/post-5.12' into bleadDavid Mitchell2010-04-132-2/+10
|\
| * create SV leak test infrastructureDavid Mitchell2010-04-112-2/+10
| | | | | | | | | | | | | | Add an sv_count() function to XS::APItest to allow access to PL_sv_count, then add new test file t/op/svleak.t that allows you yo run a code fragment a few times and test whether the number of allocated SVs has increased
* | Downgrade Socket.pm's new inet_ntop and inet_pton to EXPORT_OK ratherJesse Vincent2010-03-252-3/+9
| | | | | | | | | | than EXPORT as they're new functions which clobber symbols in downstream CPAN modules.
* | Check that sparse files hold at least a block (bug in eCryptfs: ↵Leon Brocard2010-03-241-1/+2
|/ | | | https://bugs.launchpad.net/ecryptfs/+bug/390833)
* Fix an example for LC_COLLATE in POSIX.pod that actually sets LC_ALLVincent Pit2010-03-031-1/+1
| | | | Spotted by Olivier Raginel.
* stop skipping ext/Fcntl/t/syslfs.tDavid Mitchell2010-02-211-1/+7
| | | | | | | | Since the module reorganisation and now that tests run cd'ed to ext/Fcntl, expecting to run ../perl no longer works. Also, for the benefit of future generations, make the inability to find perl a failure rather than a skip, with a more relevant error message.
* Make the new Socket implementation of inet_pton consistent with the existing ↵Jesse Vincent2010-02-172-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Socket6 implementation of inet_pton. Fix for release-blocking ticket [perl #72884] > |https://rt.cpan.org/Ticket/Display.html?id=52497|4411113f|NJH/IO-Socket-Multicast6-0.03.tar.gz | I'll describe what's happening here, and leave it to everyone else to decide which of the interacting events is the bug, or where the fix might be. So the *entire* change is this: commit 4411113f31b3f00171bb335092b02104d29d7cd7 Author: Rafael Garcia-Suarez <rgarciasuarez@gmail.com> Date: Fri Mar 27 13:19:16 2009 +0100 Add inet_pton and inet_ntop to the list of functions exported by Socket diff --git a/ext/Socket/Socket.pm b/ext/Socket/Socket.pm index 6b268ef..7d130ba 100644 --- a/ext/Socket/Socket.pm +++ b/ext/Socket/Socket.pm @@ -198,6 +198,7 @@ use XSLoader (); @ISA = qw(Exporter); @EXPORT = qw( inet_aton inet_ntoa + inet_pton inet_ntop sockaddr_family pack_sockaddr_in unpack_sockaddr_in pack_sockaddr_un unpack_sockaddr_un and test fails like this: $ /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/bin/perl5.11.4 -Mblib t/35mcastsend.t 1..11 Constant subroutine IO::Socket::Multicast6::AF_INET6 redefined at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64. at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10 Prototype mismatch: sub IO::Socket::Multicast6::AF_INET6 () vs none at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64. at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10 Constant subroutine IO::Socket::Multicast6::PF_INET6 redefined at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64. at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10 Prototype mismatch: sub IO::Socket::Multicast6::PF_INET6 () vs none at /home/nick/Sandpit/snap5.9.x-v5.11.4-85-g95c9bfa/lib/perl5/5.11.4/Exporter.pm line 64. at /home/nick/.cpan/build/IO-Socket-Multicast6-0.03-CqGAYT/blib/lib/IO/Socket/Multicast6.pm line 10 ok 1 - use IO::Socket::Multicast6; ok 2 - Create IPv4 multicast socket ok 3 - Combined IPv4 destination address and port ok 4 - Separate IPv4 destination address and port Bad arg length for Socket::pack_sockaddr_in, length is 16, should be 4 at t/35mcastsend.t line 26. The warnings aren't actually really relevant. The "problem"s are: IO::Socket::Multicast6 isa IO::Socket::INET6 IO::Socket::INET6 isa IO::Socket so they chose to inherit all behaviour from IO::Socket. In turn IO::Socket isa IO::Handle isa Exporter. IO::Socket chooses to export everything that Socket does: sub import { my $pkg = shift; if (@_ && $_[0] eq 'sockatmark') { # not very extensible but for now, fast Exporter::export_to_level('IO::Socket', 1, $pkg, 'sockatmark'); } else { my $callpkg = caller; Exporter::export 'Socket', $callpkg, @_; } } So, this means that all those choices and delegation of behaviour (and responsibility) means that all those modules export whatever Socket exports. OO modules. So, now they also export inet_pton and inet_ntop. The test is careful to only import what it needs: use strict; use Socket6 qw/ inet_pton pack_sockaddr_in6/; use Socket qw/ pack_sockaddr_in /; use Test::More tests => 11; in particular, it wants inet_pton from Socket6, and only pack_sockaddr_in from Socket. So at that point, main::inet_pton is Socket6::inet_pton Then it does this, correctly in a BEGIN block: BEGIN { use_ok( 'IO::Socket::Multicast6' ); } The side effect of this is to import all exports from IO::Socket::Multicast6. Which, from the above chain of inheritance, is @Socket::EXPORT. So at this point, main::inet_pton is rebound to Socket::inet_pton And the test fails, because they differ, and it expected (and wanted) Socket6::inet_pton(). Socket6::inet_pton() returns 4 bytes for AF_INET, 16 bytes for AF_INET6. Socket::inet_pton() returns 16 for both. Socket::pack_sockaddr_in() wants 4 bytes. Now, to add to the fun: use IO::Socket::Multicast6 (); and use IO::Socket::Multicast6; of course mean different things. The former suppresses all exports. It turns out that with Test::More::isa_ok() has no way of doing the former: $ cat use_ok.pl use warnings; use strict; use Test::More tests => 3; package clash; BEGIN { main::use_ok 'Socket' }; package crunch; BEGIN { main::use_ok 'Socket', () }; package biff; BEGIN { main::use_ok 'Socket', 'sockaddr_family' }; package main; sub dump_lowercase_keys { my $package = shift; print "For package $package:\n"; no strict 'refs'; print " $_\n" foreach sort grep {!tr/A-Z//} keys %{"${package}::"}; print "\n"; } dump_lowercase_keys $_ foreach qw (clash crunch biff); __END__ $ perl use_ok.pl 1..3 ok 1 - use Socket; ok 2 - use Socket; ok 3 - use Socket; For package clash: inet_aton inet_ntoa pack_sockaddr_in pack_sockaddr_un sockaddr_family sockaddr_in sockaddr_un unpack_sockaddr_in unpack_sockaddr_un For package crunch: inet_aton inet_ntoa pack_sockaddr_in pack_sockaddr_un sockaddr_family sockaddr_in sockaddr_un unpack_sockaddr_in unpack_sockaddr_un For package biff: sockaddr_family So, there's no clean way to rewrite that test with use_ok to suppress imports. So, to summarise, it's due to A cascade of modules blindly exporting everything that Socket exports Socket::inet_pton() and Socket6::inet_pton() differing in behaviour A test that fails to realise that it's importing everything via use_ok This one ranks as blocker because: Socket::inet_pton() and Socket::inet_ntop() are not in any stable release Hence we have the option to change them if we do it *NOW*. I think that the right fix is the appended patch. This makes the new Socket implementation of inet_pton consistent with the existing Socket6 implementation of inet_pton.
* Fix for non-regexps being upgraded to SVt_REGEXPNicholas Clark2010-02-091-1/+1
| | | | | | | | | | | | | | $ ./perl -lwe '$a = ${qr//}; $a = 2; print re::is_regexp(\$a)' 1 It is possible for arbitrary SVs (eg PAD entries) to be upgraded to SVt_REGEXP. (This is new with first class regexps) Whilst the example above does not SEGV, it will be possible to write code that will cause SEGVs (or worse) at the point when the scalar is freed, because the code in sv_clear() assumes that all scalars of type SVt_REGEXP *are* regexps, and passes them to pregfree2(), which assumes that pointers within are valid.
* Improvements to 31c9a3 - CPAN code did depend on the previous behaviour of ↵Nicholas Clark2010-02-061-1/+1
| | | | | | | | | | | | | | | | | | | blessing filehandles into FileHandle It turns out that it's not quite as simple as blessing into IO::File. If you do (just) that, then it breaks any existing code that does C<require IO::Handle;> to allow it to call methods on file handles, because they're blessed into IO::File, which isn't loaded. (Note this code doesn't assume that methods in IO::Seekable are there to be called) So, it all should work if you also set @IO::File:::ISA correctly? That way, code that assumes that methods from IO::Handle can be called will work. However, gv.c now starts complaining (but not failing) if IO::Handle, IO::Seekable and Exporter aren't present, because it goes looking for methods in them. So the solution seems to be to set @IO::File::ISA *and* create (empty) stashes for the other 3 packages. Patch appended, but not applied.
* bump versions for core libs changed since 5.11.3Ricardo Signes2010-01-192-2/+2
|
* [perl #71676] GDBM_File support on Win32kmx2010-01-181-0/+1
| | | | | | | | | | | Date: Thu, 07 Jan 2010 00:36:25 -0800 Message-ID: <rt-3.6.HEAD-1505-1262853384-1207.71676-15-0@perl.org> Tweaked as suggested in: From: "H.Merijn Brand" <h.m.brand@xs4all.nl> Date: Fri, 8 Jan 2010 13:35:17 +0100 Message-ID: <20100108133517.1f2916d3@pc09.procura.nl>
* Bump version of PerlIO::encodingRafael Garcia-Suarez2010-01-151-1/+1
|
* The warnings emitted by PerlIO::encoding should be silenceable.Rafael Garcia-Suarez2010-01-151-5/+8
| | | | Make them mandatory warnings.
* Fix typo in referenceAbigail2010-01-061-1/+1
|
* Document that interpolating a '(??{ code })' construct in a regularAbigail2010-01-061-3/+5
| | | | expression also requires "use re 'eval'", just as '(?{ code })' does.
* Fix a couple of typos and standardize on using 'regexp' instead ofAbigail2010-01-061-9/+9
| | | | using a 'regex'/'regexp' mash.
* POSIX.pm - minor change to POSIX.xs since 5.11.2 - bump the versionJesse Vincent2009-12-201-1/+1
|
* Add lchown to POSIX.podDaniel Frederick Crisman2009-12-201-0/+8
|
* Ensure that pp_qr returns a new regexp SV each time. Resolves RT #69852.Nicholas Clark2009-12-021-3/+3
| | | | | | | | | | | | | | | | Instead of returning a(nother) reference to the (pre-compiled) regexp in the optree, use reg_temp_copy() to create a copy of it, and return a reference to that. This resolves issues about Regexp::DESTROY not being called in a timely fashion (the original bug tracked by RT #69852), as well as bugs related to blessing regexps, and of assigning to regexps, as described in correspondence added to the ticket. It transpires that we also need to undo the SvPVX() sharing when ithreads cloning a Regexp SV, because mother_re is set to NULL, instead of a cloned copy of the mother_re. This change might fix bugs with regexps and threads in certain other situations, but as yet neither tests nor bug reports have indicated any problems, so it might not actually be an edge case that it's possible to reach.
* Merge branch 'blead' of ssh://stevep@perl5.git.perl.org/gitroot/perl into bleadSteve Peters2009-11-2815-12/+729
|\
| * fix logic for a workaround in POSIX.xsStepan Kasal2009-11-231-2/+2
| | | | | | | | | | | | | | | | There is the assignment "RETVAL = 0" to silence the compiler in case it incorrectly reports return of an undefined value. This assignment should be present whenever *any* of the symbols is not defined. But the code was written so that the assignment was compiled only when *none* of the symbols was defined.
| * PVIOs don't use the SvIVX slot.Nicholas Clark2009-11-191-1/+1
| |
| * lexer APIZefram2009-11-154-91/+86
| | | | | | | | | | | | | | | | | | Attached is a patch that adds a public API for the lowest layers of lexing. This is meant to provide a solid foundation for the parsing that Devel::Declare and similar modules do, and it complements the pluggable keyword mechanism. The API consists of some existing variables combined with some new functions, all marked as experimental (which making them public certainly is).
| * Teach B::Deparse about in-place reverseVincent Pit2009-11-151-4/+4
| | | | | | | | And bump the $VERSION.
| * 1 is a magic number to C's exit() and Perl_my_exit().Craig A. Berry2009-11-121-2/+8
| | | | | | | | | | Its real name is EXIT_FAILURE and it comes out of the wash somewhat differently on VMS than elsewhere.
| * Sorry, missed a "H.Merijn Brand2009-11-121-1/+1
| |
| * HP-UX does not accept UTC0UTC, because there is no valid DST ruleH.Merijn Brand2009-11-121-0/+8
| |
| * Add missing LEAVE to POSIX.xs sigactionGerard Goossen2009-11-121-2/+6
| |
| * Map winsock error codes to POSIX errno valuesJan Dubois2009-11-111-0/+123
| |
| * Optimize reversing an array in-placeVincent Pit2009-11-101-0/+1
| |
| * Make my_exit behave the same as the Perl exit. And add tests for itGerard Goossen2009-11-083-1/+39
| | | | | | | | | | | | | | Rationale: This makes the behaviour of my_exit consistent, so it no longer depends on whether a subroutine was called using call_sv or as a normal using an entersub op. Previously, the exit code was sometimes converted to an exception.
| * pad_findmy APIificationZefram2009-11-082-19/+14
| | | | | | | | | | | | Since Nicholas made pad_findmy() part of the public API (f8f98e0a8bdbde83a9cdc3573d818f69d0a64c78), here's a consequential change to XS::APItest::KeywordRPN.
| * Correctly document export of I18N::LanginfoKevin Ryde2009-11-081-2/+2
| | | | | | | | [perl #70303] I18N::Langinfo docs "nothing exported"
| * Add length and flags arguments to Perl_pad_findmy(), moving it to the public ↵Nicholas Clark2009-11-071-1/+1
| | | | | | | | | | | | | | | | API. Currently no flags bits are used, and the length is cross-checked against strlen() on the pointer, but the intent is to re-work the entire pad API to be UTF-8 aware, from the current situation of char * pointers only.
| * C++ fail with KeywordRPNZefram2009-11-072-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A smoke using g++ has revealed: >KeywordRPN.c: In function 'void XS_XS__APItest__KeywordRPN_import(CV*)': >KeywordRPN.c:320: error: expected unqualified-id before 'class' >KeywordRPN.c:320: error: expected initializer before 'class' >KeywordRPN.c: In function 'void XS_XS__APItest__KeywordRPN_unimport(CV*)': >KeywordRPN.c:357: error: expected unqualified-id before 'class' >KeywordRPN.c:357: error: expected initializer before 'class' >make[1]: *** [KeywordRPN.o] Error 1 >Unsuccessful make(ext/XS-APItest-KeywordRPN): code=512 at make_ext.pl line 449. >make: *** [lib/auto/XS/APItest/KeywordRPN/KeywordRPN.so] Error 25 I used "class" as a variable name, but in C++ it's a keyword. Patch attached. Someone should also add a note about C++ compatibility to perlhack.pod. -zefram Signed-off-by: H.Merijn Brand <h.m.brand@xs4all.nl>
| * Implement facility to plug in syntax triggered by keywordsJesse Vincent2009-11-055-0/+547
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Date: Tue, 27 Oct 2009 01:29:40 +0000 From: Zefram <zefram@fysh.org> To: perl5-porters@perl.org Subject: bareword sub lookups Attached is a patch that changes how the tokeniser looks up subroutines, when they're referenced by a bareword, for prototype and const-sub purposes. Formerly, it has looked up bareword subs directly in the package, which is contrary to the way the generated op tree looks up the sub, via an rv2cv op. The patch makes the tokeniser generate the rv2cv op earlier, and dig around in that. The motivation for this is to allow modules to hook the rv2cv op creation, to affect the name->subroutine lookup process. Currently, such hooking affects op execution as intended, but everything goes wrong with a bareword ref where the tokeniser looks at some unrelated CV, or a blank space, in the package. With the patch in place, an rv2cv hook correctly affects the tokeniser and therefore the prototype-based aspects of parsing. The patch also changes ck_subr (which applies the argument context and checking parts of prototype behaviour) to handle subs referenced by an RV const op inside the rv2cv, where formerly it would only handle a gv op inside the rv2cv. This is to support the most likely kind of modified rv2cv op. [This commit includes the Makefile.PL for XS-APITest-KeywordRPN missing from the original patch, as well as updates to perldiag.pod and a MANIFEST sort]
* | Add error codes for getaddrinfo() and getnameinfo()Steve Peters2009-11-281-1/+2
|/
* Remove Perl_pmflag() from the public API, and mark it as deprecated.Nicholas Clark2009-11-013-2/+53
| | | | | | regcomp.c stopped using it before 5.10, leaving only toke.c. The only code on CPAN that uses it is copies of regcomp.c. Replace it with a static function, with a cleaner interface.
* disable non-unicode case insensitive trie matchingYves Orton2009-10-251-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Also revert 8902bb05b18c9858efa90229ca1ee42b17277554 as it merely masked one symptom of the deeper problems. Also fixes RT #69973, which was a segfault which was exposed by 8902bb05, see the ticket for further details. http://rt.perl.org/rt3//Public/Bug/Display.html?id=69973 At the code of this is the problem that in unicode matching a bunch of code points have case folding rules beyond just A-Z/a-z. Since the case folding rules are decided at runtime by the string, we cant use the same TRIE tables for both unicode/non-unicode matching. Until this is reconciled or some other solution is found case insensitive matching only gets the TRIE optimisation when the pattern is uniocde. From CaseFolding.txt: 00B5; C; 03BC; # MICRO SIGN 00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE 00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE 00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX 00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE 00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS 00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE 00C6; C; 00E6; # LATIN CAPITAL LETTER AE 00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA 00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE 00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE 00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX 00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS 00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE 00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE 00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX 00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS 00D0; C; 00F0; # LATIN CAPITAL LETTER ETH 00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE 00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE 00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE 00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX 00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE 00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS 00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE 00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE 00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE 00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX 00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS 00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE 00DE; C; 00FE; # LATIN CAPITAL LETTER THORN 00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
* Avoid using defined @array in core tests.Nicholas Clark2009-10-231-1/+1
|
* Avoid using defined %hash in core code and tests.Nicholas Clark2009-10-231-2/+2
|