X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=av.c;h=4d73e4094626c2876743416db00f14c67efbd61e;hb=912ec6395ccd8f957980c6c263fd9cff9e9bb2fa;hp=d0428925a702007dd2aea5f3d89591f2a8db2005;hpb=be3c0a43e1e6b1244032726df02a3ab450a3c4be;p=p5sagit%2Fp5-mst-13.2.git diff --git a/av.c b/av.c index d042892..4d73e40 100644 --- a/av.c +++ b/av.c @@ -30,7 +30,7 @@ Perl_av_reify(pTHX_ AV *av) return; #ifdef DEBUGGING if (SvTIED_mg((SV*)av, PERL_MAGIC_tied) && ckWARN_d(WARN_DEBUGGING)) - Perl_warner(aTHX_ WARN_DEBUGGING, "av_reify called on tied array"); + Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), "av_reify called on tied array"); #endif key = AvMAX(av) + 1; while (key > AvFILLp(av) + 1) @@ -119,7 +119,7 @@ Perl_av_extend(pTHX_ AV *av, I32 key) bytes = (newmax + 1) * sizeof(SV*); #define MALLOC_OVERHEAD 16 itmp = MALLOC_OVERHEAD; - while (itmp - MALLOC_OVERHEAD < bytes) + while ((MEM_SIZE)(itmp - MALLOC_OVERHEAD) < bytes) itmp += itmp; itmp -= MALLOC_OVERHEAD; itmp /= sizeof(SV*); @@ -395,7 +395,7 @@ Perl_av_clear(pTHX_ register AV *av) #ifdef DEBUGGING if (SvREFCNT(av) == 0 && ckWARN_d(WARN_DEBUGGING)) { - Perl_warner(aTHX_ WARN_DEBUGGING, "Attempt to clear deleted array"); + Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array"); } #endif if (!av) @@ -514,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))) { @@ -534,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)) @@ -559,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); @@ -581,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); @@ -626,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); @@ -646,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; @@ -817,7 +823,7 @@ Perl_av_exists(pTHX_ AV *av, I32 key) mg = mg_find(sv, PERL_MAGIC_tiedelem); if (mg) { magic_existspack(sv, mg); - return SvTRUE(sv); + return (bool)SvTRUE(sv); } } }