X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl.c;h=a7ed27e51bc00a8b285db524f95659796305b192;hb=d6802e4345360e741b212b52b6af4a704cfce207;hp=e47fe92996558581984ec7fd5293f2d84bb1a9f9;hpb=f54cb97a39f1a5849851e77a33524dfca2644cf5;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perl.c b/perl.c index e47fe92..a7ed27e 100644 --- a/perl.c +++ b/perl.c @@ -539,7 +539,6 @@ perl_destruct(pTHXx) while (i) { SV *resv = ary[--i]; - REGEXP *re = INT2PTR(REGEXP *,SvIVX(resv)); if (SvFLAGS(resv) & SVf_BREAK) { /* this is PL_reg_curpm, already freed @@ -550,7 +549,8 @@ perl_destruct(pTHXx) else if(SvREPADTMP(resv)) { SvREPADTMP_off(resv); } - else { + else if(SvIOKp(resv)) { + REGEXP *re = INT2PTR(REGEXP *,SvIVX(resv)); ReREFCNT_dec(re); } } @@ -834,9 +834,11 @@ perl_destruct(pTHXx) SvREFCNT_dec(PL_strtab); #ifdef USE_ITHREADS - /* free the pointer table used for cloning */ + /* free the pointer tables used for cloning */ ptr_table_free(PL_ptr_table); PL_ptr_table = (PTR_TBL_t*)NULL; + ptr_table_free(PL_shared_hek_table); + PL_shared_hek_table = (PTR_TBL_t*)NULL; #endif /* free special SVs */ @@ -875,7 +877,7 @@ perl_destruct(pTHXx) for (sv = sva + 1; sv < svend; ++sv) { if (SvTYPE(sv) != SVTYPEMASK) { PerlIO_printf(Perl_debug_log, "leaked: sv=0x%p" - " flags=0x08%"UVxf + " flags=0x%"UVxf " refcnt=%"UVuf pTHX__FORMAT "\n" "\tallocated at %s:%d %s %s%s\n", sv, sv->sv_flags, sv->sv_refcnt pTHX__VALUE, @@ -1006,14 +1008,10 @@ perl_free(pTHXx) #pragma fini "perl_fini" #endif -#if defined(__GNUC__) && defined(__attribute__) -/* want to make sure __attribute__ works here even - * for -Dd_attribut=undef builds. - */ -#undef __attribute__ +static void +#if defined(__GNUC__) +__attribute__((destructor)) #endif - -static void __attribute__((destructor)) perl_fini(void) { dVAR; @@ -2186,7 +2184,7 @@ Perl_call_sv(pTHX_ SV *sv, I32 flags) if (flags & G_KEEPERR) PL_in_eval |= EVAL_KEEPERR; else - sv_setpv(ERRSV,""); + sv_setpvn(ERRSV,"",0); } PL_markstack_ptr++; @@ -2197,7 +2195,7 @@ Perl_call_sv(pTHX_ SV *sv, I32 flags) call_body((OP*)&myop, FALSE); retval = PL_stack_sp - (PL_stack_base + oldmark); if (!(flags & G_KEEPERR)) - sv_setpv(ERRSV,""); + sv_setpvn(ERRSV,"",0); break; case 1: STATUS_ALL_FAILURE; @@ -2322,7 +2320,7 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags) call_body((OP*)&myop,TRUE); retval = PL_stack_sp - (PL_stack_base + oldmark); if (!(flags & G_KEEPERR)) - sv_setpv(ERRSV,""); + sv_setpvn(ERRSV,"",0); break; case 1: STATUS_ALL_FAILURE; @@ -2551,20 +2549,21 @@ char * Perl_moreswitches(pTHX_ char *s) { dVAR; - STRLEN numlen; UV rschar; switch (*s) { case '0': { I32 flags = 0; + STRLEN numlen; SvREFCNT_dec(PL_rs); if (s[1] == 'x' && s[2]) { - char *e; + const char *e = s+=2; U8 *tmps; - for (s += 2, e = s; *e; e++); + while (*e) + e++; numlen = e - s; flags = PERL_SCAN_SILENT_ILLDIGIT; rschar = (U32)grok_hex(s, &numlen, &flags, NULL); @@ -2719,6 +2718,7 @@ Perl_moreswitches(pTHX_ char *s) } if (isDIGIT(*s)) { I32 flags = 0; + STRLEN numlen; PL_ors_sv = newSVpvn("\n",1); numlen = 3 + (*s == '0'); *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL); @@ -3063,7 +3063,7 @@ S_init_main_stash(pTHX) SvREFCNT_dec(GvHV(gv)); GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash); SvREADONLY_on(gv); - HvNAME(PL_defstash) = savepvn("main", 4); + Perl_hv_name_set(aTHX_ PL_defstash, "main", 4, 0); PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV))); GvMULTI_on(PL_incgv); PL_hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */ @@ -4804,13 +4804,13 @@ Perl_my_failure_exit(pTHX) #else int exitstatus; if (errno & 255) - STATUS_POSIX_SET(errno); + STATUS_UNIX_SET(errno); else { - exitstatus = STATUS_POSIX >> 8; + exitstatus = STATUS_UNIX >> 8; if (exitstatus & 255) - STATUS_POSIX_SET(exitstatus); + STATUS_UNIX_SET(exitstatus); else - STATUS_POSIX_SET(255); + STATUS_UNIX_SET(255); } #endif my_exit_jump(); @@ -4858,3 +4858,13 @@ read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen) sv_chop(PL_e_script, nl); return 1; } + +/* + * Local variables: + * c-indentation-style: bsd + * c-basic-offset: 4 + * indent-tabs-mode: t + * End: + * + * ex: set ts=8 sts=4 sw=4 noet: + */