X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=av.c;h=95ec169f02982197e368fa8a6f9fbc1f39fab69c;hb=fa09c185cf93a599dc0290b9ee4ba0149df70363;hp=8a4f8556450239fe43fa3d95b777c45390cd5827;hpb=d9c632885426f166b78d9000b0c7670e7cab6f2a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/av.c b/av.c index 8a4f855..95ec169 100644 --- a/av.c +++ b/av.c @@ -1,6 +1,6 @@ /* av.c * - * Copyright (c) 1991-2001, Larry Wall + * Copyright (c) 1991-2002, Larry Wall * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -12,6 +12,10 @@ * meant that things should remain where they had set them)." --Treebeard */ +/* +=head1 Array Manipulation Functions +*/ + #include "EXTERN.h" #define PERL_IN_AV_C #include "perl.h" @@ -510,8 +514,8 @@ Perl_av_pop(pTHX_ register AV *av) SV *retval; MAGIC* mg; - if (!av || AvFILL(av) < 0) - return &PL_sv_undef; + if (!av) + return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); if ((mg = SvTIED_mg((SV*)av, PERL_MAGIC_tied))) { @@ -530,6 +534,8 @@ Perl_av_pop(pTHX_ register AV *av) POPSTACK; return retval; } + if (AvFILL(av) < 0) + return &PL_sv_undef; retval = AvARRAY(av)[AvFILLp(av)]; AvARRAY(av)[AvFILLp(av)--] = &PL_sv_undef; if (SvSMAGICAL(av)) @@ -555,7 +561,7 @@ Perl_av_unshift(pTHX_ register AV *av, register I32 num) MAGIC* mg; I32 slide; - if (!av || num <= 0) + if (!av) return; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -577,6 +583,8 @@ Perl_av_unshift(pTHX_ register AV *av, register I32 num) return; } + if (num <= 0) + return; if (!AvREAL(av) && AvREIFY(av)) av_reify(av); i = AvARRAY(av) - AvALLOC(av); @@ -622,7 +630,7 @@ Perl_av_shift(pTHX_ register AV *av) SV *retval; MAGIC* mg; - if (!av || AvFILL(av) < 0) + if (!av) return &PL_sv_undef; if (SvREADONLY(av)) Perl_croak(aTHX_ PL_no_modify); @@ -642,6 +650,8 @@ Perl_av_shift(pTHX_ register AV *av) POPSTACK; return retval; } + if (AvFILL(av) < 0) + return &PL_sv_undef; retval = *AvARRAY(av); if (AvREAL(av)) *AvARRAY(av) = &PL_sv_undef;