3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Sam sat on the ground and put his head in his hands. 'I wish I had never
13 * come here, and I don't want to see no more magic,' he said, and fell silent.
15 * [p.363 of _The Lord of the Rings_, II/vii: "The Mirror of Galadriel"]
19 =head1 Magical Functions
21 "Magic" is special data attached to SV structures in order to give them
22 "magical" properties. When any Perl code tries to read from, or assign to,
23 an SV marked as magical, it calls the 'get' or 'set' function associated
24 with that SV's magic. A get is called prior to reading an SV, in order to
25 give it a chance to update its internal value (get on $. writes the line
26 number of the last read filehandle into to the SV's IV slot), while
27 set is called after an SV has been written to, in order to allow it to make
28 use of its changed value (set on $/ copies the SV's new value to the
29 PL_rs global variable).
31 Magic is implemented as a linked list of MAGIC structures attached to the
32 SV. Each MAGIC struct holds the type of the magic, a pointer to an array
33 of functions that implement the get(), set(), length() etc functions,
34 plus space for some flags and pointers. For example, a tied variable has
35 a MAGIC structure that contains a pointer to the object associated with the
44 #if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
50 #if defined(HAS_SETGROUPS)
57 # include <sys/pstat.h>
60 #ifdef HAS_PRCTL_SET_NAME
61 # include <sys/prctl.h>
64 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
65 Signal_t Perl_csighandler(int sig, siginfo_t *, void *);
67 Signal_t Perl_csighandler(int sig);
71 /* Missing protos on LynxOS */
72 void setruid(uid_t id);
73 void seteuid(uid_t id);
74 void setrgid(uid_t id);
75 void setegid(uid_t id);
79 * Pre-magic setup and post-magic takedown.
80 * Use the "DESTRUCTOR" scope cleanup to reinstate magic.
90 /* MGS is typedef'ed to struct magic_state in perl.h */
93 S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags)
99 PERL_ARGS_ASSERT_SAVE_MAGIC_FLAGS;
101 assert(SvMAGICAL(sv));
103 /* we shouldn't really be called here with RC==0, but it can sometimes
104 * happen via mg_clear() (which also shouldn't be called when RC==0,
105 * but it can happen). Handle this case gracefully(ish) by not RC++
106 * and thus avoiding the resultant double free */
107 if (SvREFCNT(sv) > 0) {
108 /* guard against sv getting freed midway through the mg clearing,
109 * by holding a private reference for the duration. */
110 SvREFCNT_inc_simple_void_NN(sv);
114 SAVEDESTRUCTOR_X(S_restore_magic, INT2PTR(void*, (IV)mgs_ix));
116 mgs = SSPTR(mgs_ix, MGS*);
118 mgs->mgs_magical = SvMAGICAL(sv);
119 mgs->mgs_readonly = SvREADONLY(sv) != 0;
120 mgs->mgs_ss_ix = PL_savestack_ix; /* points after the saved destructor */
121 mgs->mgs_bumped = bumped;
123 SvFLAGS(sv) &= ~flags;
127 #define save_magic(a,b) save_magic_flags(a,b,SVs_GMG|SVs_SMG|SVs_RMG)
130 =for apidoc mg_magical
132 Turns on the magical status of an SV. See C<sv_magic>.
138 Perl_mg_magical(pTHX_ SV *sv)
141 PERL_ARGS_ASSERT_MG_MAGICAL;
145 if ((mg = SvMAGIC(sv))) {
147 const MGVTBL* const vtbl = mg->mg_virtual;
149 if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP))
156 } while ((mg = mg->mg_moremagic));
157 if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG)))
165 Do magic before a value is retrieved from the SV. The type of SV must
166 be >= SVt_PVMG. See C<sv_magic>.
172 Perl_mg_get(pTHX_ SV *sv)
175 const I32 mgs_ix = SSNEW(sizeof(MGS));
178 MAGIC *newmg, *head, *cur, *mg;
180 PERL_ARGS_ASSERT_MG_GET;
182 if (PL_localizing == 1 && sv == DEFSV) return 0;
184 /* We must call svt_get(sv, mg) for each valid entry in the linked
185 list of magic. svt_get() may delete the current entry, add new
186 magic to the head of the list, or upgrade the SV. AMS 20010810 */
188 newmg = cur = head = mg = SvMAGIC(sv);
190 const MGVTBL * const vtbl = mg->mg_virtual;
191 MAGIC * const nextmg = mg->mg_moremagic; /* it may delete itself */
193 if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) {
195 /* taint's mg get is so dumb it doesn't need flag saving */
196 if (!saved && mg->mg_type != PERL_MAGIC_taint) {
197 save_magic(mgs_ix, sv);
201 vtbl->svt_get(aTHX_ sv, mg);
203 /* guard against magic having been deleted - eg FETCH calling
206 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
210 /* recalculate flags if this entry was deleted. */
211 if (mg->mg_flags & MGf_GSKIP)
212 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0;
214 else if (vtbl == &PL_vtbl_utf8) {
215 /* get-magic can reallocate the PV */
216 magic_setutf8(sv, mg);
222 /* Have we finished with the new entries we saw? Start again
223 where we left off (unless there are more new entries). */
231 /* Were any new entries added? */
232 if (!have_new && (newmg = SvMAGIC(sv)) != head) {
236 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
241 restore_magic(INT2PTR(void *, (IV)mgs_ix));
249 Do magic after a value is assigned to the SV. See C<sv_magic>.
255 Perl_mg_set(pTHX_ SV *sv)
258 const I32 mgs_ix = SSNEW(sizeof(MGS));
262 PERL_ARGS_ASSERT_MG_SET;
264 if (PL_localizing == 2 && sv == DEFSV) return 0;
266 save_magic_flags(mgs_ix, sv, SVs_GMG|SVs_SMG); /* leave SVs_RMG on */
268 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
269 const MGVTBL* vtbl = mg->mg_virtual;
270 nextmg = mg->mg_moremagic; /* it may delete itself */
271 if (mg->mg_flags & MGf_GSKIP) {
272 mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */
273 (SSPTR(mgs_ix, MGS*))->mgs_magical = 0;
275 if (PL_localizing == 2
276 && PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
278 if (vtbl && vtbl->svt_set)
279 vtbl->svt_set(aTHX_ sv, mg);
282 restore_magic(INT2PTR(void*, (IV)mgs_ix));
287 =for apidoc mg_length
289 Reports on the SV's length in bytes, calling length magic if available,
290 but does not set the UTF8 flag on the sv. It will fall back to 'get'
291 magic if there is no 'length' magic, but with no indication as to
292 whether it called 'get' magic. It assumes the sv is a PVMG or
293 higher. Use sv_len() instead.
299 Perl_mg_length(pTHX_ SV *sv)
305 PERL_ARGS_ASSERT_MG_LENGTH;
307 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
308 const MGVTBL * const vtbl = mg->mg_virtual;
309 if (vtbl && vtbl->svt_len) {
310 const I32 mgs_ix = SSNEW(sizeof(MGS));
311 save_magic(mgs_ix, sv);
312 /* omit MGf_GSKIP -- not changed here */
313 len = vtbl->svt_len(aTHX_ sv, mg);
314 restore_magic(INT2PTR(void*, (IV)mgs_ix));
319 (void)SvPV_const(sv, len);
324 Perl_mg_size(pTHX_ SV *sv)
328 PERL_ARGS_ASSERT_MG_SIZE;
330 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
331 const MGVTBL* const vtbl = mg->mg_virtual;
332 if (vtbl && vtbl->svt_len) {
333 const I32 mgs_ix = SSNEW(sizeof(MGS));
335 save_magic(mgs_ix, sv);
336 /* omit MGf_GSKIP -- not changed here */
337 len = vtbl->svt_len(aTHX_ sv, mg);
338 restore_magic(INT2PTR(void*, (IV)mgs_ix));
345 return AvFILLp((const AV *) sv); /* Fallback to non-tied array */
349 Perl_croak(aTHX_ "Size magic not implemented");
358 Clear something magical that the SV represents. See C<sv_magic>.
364 Perl_mg_clear(pTHX_ SV *sv)
366 const I32 mgs_ix = SSNEW(sizeof(MGS));
370 PERL_ARGS_ASSERT_MG_CLEAR;
372 save_magic(mgs_ix, sv);
374 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
375 const MGVTBL* const vtbl = mg->mg_virtual;
376 /* omit GSKIP -- never set here */
378 nextmg = mg->mg_moremagic; /* it may delete itself */
380 if (vtbl && vtbl->svt_clear)
381 vtbl->svt_clear(aTHX_ sv, mg);
384 restore_magic(INT2PTR(void*, (IV)mgs_ix));
389 S_mg_findext_flags(pTHX_ const SV *sv, int type, const MGVTBL *vtbl, U32 flags)
398 assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv)));
400 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
401 if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) {
413 Finds the magic pointer for type matching the SV. See C<sv_magic>.
419 Perl_mg_find(pTHX_ const SV *sv, int type)
421 return S_mg_findext_flags(aTHX_ sv, type, NULL, 0);
425 =for apidoc mg_findext
427 Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
434 Perl_mg_findext(pTHX_ const SV *sv, int type, const MGVTBL *vtbl)
436 return S_mg_findext_flags(aTHX_ sv, type, vtbl, 1);
440 Perl_mg_find_mglob(pTHX_ SV *sv)
442 PERL_ARGS_ASSERT_MG_FIND_MGLOB;
443 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
444 /* This sv is only a delegate. //g magic must be attached to
449 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
450 return S_mg_findext_flags(aTHX_ sv, PERL_MAGIC_regex_global, 0, 0);
457 Copies the magic from one SV to another. See C<sv_magic>.
463 Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
468 PERL_ARGS_ASSERT_MG_COPY;
470 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
471 const MGVTBL* const vtbl = mg->mg_virtual;
472 if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){
473 count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen);
476 const char type = mg->mg_type;
477 if (isUPPER(type) && type != PERL_MAGIC_uvar) {
479 (type == PERL_MAGIC_tied)
481 : (type == PERL_MAGIC_regdata && mg->mg_obj)
484 toLOWER(type), key, klen);
493 =for apidoc mg_localize
495 Copy some of the magic from an existing SV to new localized version of that
496 SV. Container magic (eg %ENV, $1, tie)
497 gets copied, value magic doesn't (eg
500 If setmagic is false then no set magic will be called on the new (empty) SV.
501 This typically means that assignment will soon follow (e.g. 'local $x = $y'),
502 and that will handle the magic.
508 Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic)
513 PERL_ARGS_ASSERT_MG_LOCALIZE;
518 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
519 const MGVTBL* const vtbl = mg->mg_virtual;
520 if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
523 if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local)
524 (void)vtbl->svt_local(aTHX_ nsv, mg);
526 sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl,
527 mg->mg_ptr, mg->mg_len);
529 /* container types should remain read-only across localization */
530 SvFLAGS(nsv) |= SvREADONLY(sv);
533 if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) {
534 SvFLAGS(nsv) |= SvMAGICAL(sv);
543 #define mg_free_struct(sv, mg) S_mg_free_struct(aTHX_ sv, mg)
545 S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg)
547 const MGVTBL* const vtbl = mg->mg_virtual;
548 if (vtbl && vtbl->svt_free)
549 vtbl->svt_free(aTHX_ sv, mg);
550 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
551 if (mg->mg_len > 0 || mg->mg_type == PERL_MAGIC_utf8)
552 Safefree(mg->mg_ptr);
553 else if (mg->mg_len == HEf_SVKEY)
554 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
556 if (mg->mg_flags & MGf_REFCOUNTED)
557 SvREFCNT_dec(mg->mg_obj);
564 Free any magic storage used by the SV. See C<sv_magic>.
570 Perl_mg_free(pTHX_ SV *sv)
575 PERL_ARGS_ASSERT_MG_FREE;
577 for (mg = SvMAGIC(sv); mg; mg = moremagic) {
578 moremagic = mg->mg_moremagic;
579 mg_free_struct(sv, mg);
580 SvMAGIC_set(sv, moremagic);
582 SvMAGIC_set(sv, NULL);
588 =for apidoc Am|void|mg_free_type|SV *sv|int how
590 Remove any magic of type I<how> from the SV I<sv>. See L</sv_magic>.
596 Perl_mg_free_type(pTHX_ SV *sv, int how)
598 MAGIC *mg, *prevmg, *moremg;
599 PERL_ARGS_ASSERT_MG_FREE_TYPE;
600 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
602 moremg = mg->mg_moremagic;
603 if (mg->mg_type == how) {
604 /* temporarily move to the head of the magic chain, in case
605 custom free code relies on this historical aspect of mg_free */
607 prevmg->mg_moremagic = moremg;
608 mg->mg_moremagic = SvMAGIC(sv);
611 newhead = mg->mg_moremagic;
612 mg_free_struct(sv, mg);
613 SvMAGIC_set(sv, newhead);
623 Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
628 PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT;
631 const REGEXP * const rx = PM_GETRE(PL_curpm);
633 if (mg->mg_obj) { /* @+ */
634 /* return the number possible */
635 return RX_NPARENS(rx);
637 I32 paren = RX_LASTPAREN(rx);
639 /* return the last filled */
641 && (RX_OFFS(rx)[paren].start == -1
642 || RX_OFFS(rx)[paren].end == -1) )
655 Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
659 PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET;
662 const REGEXP * const rx = PM_GETRE(PL_curpm);
664 const I32 paren = mg->mg_len;
669 if (paren <= (I32)RX_NPARENS(rx) &&
670 (s = RX_OFFS(rx)[paren].start) != -1 &&
671 (t = RX_OFFS(rx)[paren].end) != -1)
674 if (mg->mg_obj) /* @+ */
679 if (RX_MATCH_UTF8(rx)) {
680 const char * const b = RX_SUBBEG(rx);
682 i = RX_SUBCOFFSET(rx) +
684 (U8*)(b-RX_SUBOFFSET(rx)+i));
699 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
701 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
704 Perl_croak_no_modify();
705 NORETURN_FUNCTION_END;
708 #define SvRTRIM(sv) STMT_START { \
710 STRLEN len = SvCUR(sv); \
711 char * const p = SvPVX(sv); \
712 while (len > 0 && isSPACE(p[len-1])) \
714 SvCUR_set(sv, len); \
720 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
722 PERL_ARGS_ASSERT_EMULATE_COP_IO;
724 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
725 sv_setsv(sv, &PL_sv_undef);
729 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
730 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
735 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
736 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
744 S_fixup_errno_string(pTHX_ SV* sv)
746 /* Do what is necessary to fixup the non-empty string in 'sv' for return to
749 PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING;
753 if(strEQ(SvPVX(sv), "")) {
754 sv_catpv(sv, UNKNOWN_ERRNO_MSG);
758 /* In some locales the error string may come back as UTF-8, in which
759 * case we should turn on that flag. This didn't use to happen, and to
760 * avoid any possible backward compatibility issues, we don't turn on
761 * the flag unless we have to. So the flag stays off for an entirely
762 * ASCII string. We assume that if the string looks like UTF-8, it
763 * really is UTF-8: "text in any other encoding that uses bytes with
764 * the high bit set is extremely unlikely to pass a UTF-8 validity
765 * test" (http://en.wikipedia.org/wiki/Charset_detection). There is a
766 * potential that we will get it wrong however, especially on short
767 * error message text. (If it turns out to be necessary, we could also
768 * keep track if the current LC_MESSAGES locale is UTF-8) */
769 if (! IN_BYTES /* respect 'use bytes' */
770 && ! is_ascii_string((U8*) SvPVX_const(sv), SvCUR(sv))
771 && is_utf8_string((U8*) SvPVX_const(sv), SvCUR(sv)))
784 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
788 const char *s = NULL;
790 const char * const remaining = mg->mg_ptr + 1;
793 PERL_ARGS_ASSERT_MAGIC_GET;
797 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
799 CALLREG_NUMBUF_FETCH(rx,paren,sv);
801 sv_setsv(sv,&PL_sv_undef);
806 nextchar = *remaining;
807 switch (*mg->mg_ptr) {
808 case '\001': /* ^A */
809 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
810 else sv_setsv(sv, &PL_sv_undef);
811 if (SvTAINTED(PL_bodytarget))
814 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
815 if (nextchar == '\0') {
816 sv_setiv(sv, (IV)PL_minus_c);
818 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
819 sv_setiv(sv, (IV)STATUS_NATIVE);
823 case '\004': /* ^D */
824 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
826 case '\005': /* ^E */
827 if (nextchar != '\0') {
828 if (strEQ(remaining, "NCODING"))
829 sv_setsv(sv, PL_encoding);
833 #if defined(VMS) || defined(OS2) || defined(WIN32)
837 $DESCRIPTOR(msgdsc,msg);
838 sv_setnv(sv,(NV) vaxc$errno);
839 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
840 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
845 if (!(_emx_env & 0x200)) { /* Under DOS */
846 sv_setnv(sv, (NV)errno);
847 sv_setpv(sv, errno ? Strerror(errno) : "");
849 if (errno != errno_isOS2) {
850 const int tmp = _syserrno();
851 if (tmp) /* 2nd call to _syserrno() makes it 0 */
854 sv_setnv(sv, (NV)Perl_rc);
855 sv_setpv(sv, os2error(Perl_rc));
857 if (SvOK(sv) && strNE(SvPVX(sv), "")) {
858 fixup_errno_string(sv);
860 # elif defined(WIN32)
862 const DWORD dwErr = GetLastError();
863 sv_setnv(sv, (NV)dwErr);
865 PerlProc_GetOSError(sv, dwErr);
866 fixup_errno_string(sv);
873 # error Missing code for platform
876 SvNOK_on(sv); /* what a wonderful hack! */
878 #endif /* End of platforms with special handling for $^E; others just fall
885 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
887 sv_setnv(sv, (NV)errno);
890 if (errno == errno_isOS2 || errno == errno_isOS2_set)
891 sv_setpv(sv, os2error(Perl_rc));
899 /* Strerror can return NULL on some platforms, which will
900 * result in 'sv' not being considered SvOK. The SvNOK_on()
901 * below will cause just the number part to be valid */
902 sv_setpv(sv, Strerror(errno));
904 fixup_errno_string(sv);
911 SvNOK_on(sv); /* what a wonderful hack! */
914 case '\006': /* ^F */
915 sv_setiv(sv, (IV)PL_maxsysfd);
917 case '\007': /* ^GLOBAL_PHASE */
918 if (strEQ(remaining, "LOBAL_PHASE")) {
919 sv_setpvn(sv, PL_phase_names[PL_phase],
920 strlen(PL_phase_names[PL_phase]));
923 case '\010': /* ^H */
924 sv_setiv(sv, (IV)PL_hints);
926 case '\011': /* ^I */ /* NOT \t in EBCDIC */
927 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
929 case '\014': /* ^LAST_FH */
930 if (strEQ(remaining, "AST_FH")) {
932 assert(isGV_with_GP(PL_last_in_gv));
933 SV_CHECK_THINKFIRST_COW_DROP(sv);
934 prepare_SV_for_RV(sv);
936 SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv));
940 else sv_setsv_nomg(sv, NULL);
943 case '\017': /* ^O & ^OPEN */
944 if (nextchar == '\0') {
945 sv_setpv(sv, PL_osname);
948 else if (strEQ(remaining, "PEN")) {
949 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
953 sv_setiv(sv, (IV)PL_perldb);
955 case '\023': /* ^S */
957 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
960 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
965 case '\024': /* ^T */
966 if (nextchar == '\0') {
968 sv_setnv(sv, PL_basetime);
970 sv_setiv(sv, (IV)PL_basetime);
973 else if (strEQ(remaining, "AINT"))
974 sv_setiv(sv, TAINTING_get
975 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
978 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
979 if (strEQ(remaining, "NICODE"))
980 sv_setuv(sv, (UV) PL_unicode);
981 else if (strEQ(remaining, "TF8LOCALE"))
982 sv_setuv(sv, (UV) PL_utf8locale);
983 else if (strEQ(remaining, "TF8CACHE"))
984 sv_setiv(sv, (IV) PL_utf8cache);
986 case '\027': /* ^W & $^WARNING_BITS */
987 if (nextchar == '\0')
988 sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE));
989 else if (strEQ(remaining, "ARNING_BITS")) {
990 if (PL_compiling.cop_warnings == pWARN_NONE) {
991 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
993 else if (PL_compiling.cop_warnings == pWARN_STD) {
994 sv_setsv(sv, &PL_sv_undef);
997 else if (PL_compiling.cop_warnings == pWARN_ALL) {
998 /* Get the bit mask for $warnings::Bits{all}, because
999 * it could have been extended by warnings::register */
1000 HV * const bits = get_hv("warnings::Bits", 0);
1001 SV ** const bits_all = bits ? hv_fetchs(bits, "all", FALSE) : NULL;
1003 sv_copypv(sv, *bits_all);
1005 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1008 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
1009 *PL_compiling.cop_warnings);
1014 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1015 paren = RX_LASTPAREN(rx);
1017 goto do_numbuf_fetch;
1019 sv_setsv(sv,&PL_sv_undef);
1021 case '\016': /* ^N */
1022 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1023 paren = RX_LASTCLOSEPAREN(rx);
1025 goto do_numbuf_fetch;
1027 sv_setsv(sv,&PL_sv_undef);
1030 if (GvIO(PL_last_in_gv)) {
1031 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1036 sv_setiv(sv, (IV)STATUS_CURRENT);
1037 #ifdef COMPLEX_STATUS
1038 SvUPGRADE(sv, SVt_PVLV);
1039 LvTARGOFF(sv) = PL_statusvalue;
1040 LvTARGLEN(sv) = PL_statusvalue_vms;
1045 if (GvIOp(PL_defoutgv))
1046 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1050 sv_setpv(sv,GvENAME(PL_defoutgv));
1051 sv_catpvs(sv,"_TOP");
1055 if (GvIOp(PL_defoutgv))
1056 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1058 s = GvENAME(PL_defoutgv);
1062 if (GvIO(PL_defoutgv))
1063 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1066 if (GvIO(PL_defoutgv))
1067 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1070 if (GvIO(PL_defoutgv))
1071 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1081 if (GvIO(PL_defoutgv))
1082 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1086 sv_copypv(sv, PL_ors_sv);
1088 sv_setsv(sv, &PL_sv_undef);
1092 IV const pid = (IV)PerlProc_getpid();
1093 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1094 /* never set manually, or at least not since last fork */
1096 /* never unsafe, even if reading in a tainted expression */
1099 /* else a value has been assigned manually, so do nothing */
1103 sv_setuid(sv, PerlProc_getuid());
1106 sv_setuid(sv, PerlProc_geteuid());
1109 sv_setgid(sv, PerlProc_getgid());
1112 sv_setgid(sv, PerlProc_getegid());
1114 #ifdef HAS_GETGROUPS
1116 Groups_t *gary = NULL;
1117 I32 i, num_groups = getgroups(0, gary);
1118 Newx(gary, num_groups, Groups_t);
1119 num_groups = getgroups(num_groups, gary);
1120 for (i = 0; i < num_groups; i++)
1121 Perl_sv_catpvf(aTHX_ sv, " %"IVdf, (IV)gary[i]);
1124 (void)SvIOK_on(sv); /* what a wonderful hack! */
1134 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1136 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1138 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1140 if (uf && uf->uf_val)
1141 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1146 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1149 STRLEN len = 0, klen;
1150 const char * const key = MgPV_const(mg,klen);
1153 PERL_ARGS_ASSERT_MAGIC_SETENV;
1157 /* defined environment variables are byte strings; unfortunately
1158 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1159 (void)SvPV_force_nomg_nolen(sv);
1160 sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1162 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1168 my_setenv(key, s); /* does the deed */
1170 #ifdef DYNAMIC_ENV_FETCH
1171 /* We just undefd an environment var. Is a replacement */
1172 /* waiting in the wings? */
1174 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1176 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1180 #if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
1181 /* And you'll never guess what the dog had */
1182 /* in its mouth... */
1184 MgTAINTEDDIR_off(mg);
1186 if (s && klen == 8 && strEQ(key, "DCL$PATH")) {
1187 char pathbuf[256], eltbuf[256], *cp, *elt;
1190 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1192 do { /* DCL$PATH may be a search list */
1193 while (1) { /* as may dev portion of any element */
1194 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1195 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1196 cando_by_name(S_IWUSR,0,elt) ) {
1197 MgTAINTEDDIR_on(mg);
1201 if ((cp = strchr(elt, ':')) != NULL)
1203 if (my_trnlnm(elt, eltbuf, j++))
1209 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1212 if (s && klen == 4 && strEQ(key,"PATH")) {
1213 const char * const strend = s + len;
1215 while (s < strend) {
1219 #ifdef VMS /* Hmm. How do we get $Config{path_sep} from C? */
1220 const char path_sep = '|';
1222 const char path_sep = ':';
1224 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf,
1225 s, strend, path_sep, &i);
1227 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1229 || !strchr(tmpbuf, ':') /* no colon thus no device name -- assume relative path */
1231 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1233 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1234 MgTAINTEDDIR_on(mg);
1240 #endif /* neither OS2 nor AMIGAOS nor WIN32 nor MSDOS */
1246 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1248 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1249 PERL_UNUSED_ARG(sv);
1250 my_setenv(MgPV_nolen_const(mg),NULL);
1255 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1258 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1259 PERL_UNUSED_ARG(mg);
1261 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1263 if (PL_localizing) {
1266 hv_iterinit(MUTABLE_HV(sv));
1267 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1269 my_setenv(hv_iterkey(entry, &keylen),
1270 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1278 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1281 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1282 PERL_UNUSED_ARG(sv);
1283 PERL_UNUSED_ARG(mg);
1285 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1293 #ifdef HAS_SIGPROCMASK
1295 restore_sigmask(pTHX_ SV *save_sv)
1297 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1298 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1302 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1305 /* Are we fetching a signal entry? */
1306 int i = (I16)mg->mg_private;
1308 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1312 const char * sig = MgPV_const(mg, siglen);
1313 mg->mg_private = i = whichsig_pvn(sig, siglen);
1318 sv_setsv(sv,PL_psig_ptr[i]);
1320 Sighandler_t sigstate = rsignal_state(i);
1321 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1322 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1325 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1326 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1329 /* cache state so we don't fetch it again */
1330 if(sigstate == (Sighandler_t) SIG_IGN)
1331 sv_setpvs(sv,"IGNORE");
1333 sv_setsv(sv,&PL_sv_undef);
1334 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1341 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1343 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1345 magic_setsig(NULL, mg);
1346 return sv_unmagic(sv, mg->mg_type);
1350 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1351 Perl_csighandler(int sig, siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1353 Perl_csighandler(int sig)
1356 #ifdef PERL_GET_SIG_CONTEXT
1357 dTHXa(PERL_GET_SIG_CONTEXT);
1361 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1362 (void) rsignal(sig, PL_csighandlerp);
1363 if (PL_sig_ignoring[sig]) return;
1365 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1366 if (PL_sig_defaulting[sig])
1367 #ifdef KILL_BY_SIGPRC
1368 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1383 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1384 /* Call the perl level handler now--
1385 * with risk we may be in malloc() or being destructed etc. */
1386 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1387 (*PL_sighandlerp)(sig, NULL, NULL);
1389 (*PL_sighandlerp)(sig);
1392 if (!PL_psig_pend) return;
1393 /* Set a flag to say this signal is pending, that is awaiting delivery after
1394 * the current Perl opcode completes */
1395 PL_psig_pend[sig]++;
1397 #ifndef SIG_PENDING_DIE_COUNT
1398 # define SIG_PENDING_DIE_COUNT 120
1400 /* Add one to say _a_ signal is pending */
1401 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1402 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1403 (unsigned long)SIG_PENDING_DIE_COUNT);
1407 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1409 Perl_csighandler_init(void)
1412 if (PL_sig_handlers_initted) return;
1414 for (sig = 1; sig < SIG_SIZE; sig++) {
1415 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1417 PL_sig_defaulting[sig] = 1;
1418 (void) rsignal(sig, PL_csighandlerp);
1420 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1421 PL_sig_ignoring[sig] = 0;
1424 PL_sig_handlers_initted = 1;
1428 #if defined HAS_SIGPROCMASK
1430 unblock_sigmask(pTHX_ void* newset)
1432 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1437 Perl_despatch_signals(pTHX)
1442 for (sig = 1; sig < SIG_SIZE; sig++) {
1443 if (PL_psig_pend[sig]) {
1445 #ifdef HAS_SIGPROCMASK
1446 /* From sigaction(2) (FreeBSD man page):
1447 * | Signal routines normally execute with the signal that
1448 * | caused their invocation blocked, but other signals may
1450 * Emulation of this behavior (from within Perl) is enabled
1454 sigset_t newset, oldset;
1456 sigemptyset(&newset);
1457 sigaddset(&newset, sig);
1458 sigprocmask(SIG_BLOCK, &newset, &oldset);
1459 was_blocked = sigismember(&oldset, sig);
1461 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1463 SAVEFREESV(save_sv);
1464 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1467 PL_psig_pend[sig] = 0;
1468 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1469 (*PL_sighandlerp)(sig, NULL, NULL);
1471 (*PL_sighandlerp)(sig);
1473 #ifdef HAS_SIGPROCMASK
1482 /* sv of NULL signifies that we're acting as magic_clearsig. */
1484 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1489 /* Need to be careful with SvREFCNT_dec(), because that can have side
1490 * effects (due to closures). We must make sure that the new disposition
1491 * is in place before it is called.
1495 #ifdef HAS_SIGPROCMASK
1499 const char *s = MgPV_const(mg,len);
1501 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1504 if (memEQs(s, len, "__DIE__"))
1506 else if (memEQs(s, len, "__WARN__")
1507 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1508 /* Merge the existing behaviours, which are as follows:
1509 magic_setsig, we always set svp to &PL_warnhook
1510 (hence we always change the warnings handler)
1511 For magic_clearsig, we don't change the warnings handler if it's
1512 set to the &PL_warnhook. */
1515 SV *tmp = sv_newmortal();
1516 Perl_croak(aTHX_ "No such hook: %s",
1517 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1521 if (*svp != PERL_WARNHOOK_FATAL)
1527 i = (I16)mg->mg_private;
1529 i = whichsig_pvn(s, len); /* ...no, a brick */
1530 mg->mg_private = (U16)i;
1534 SV *tmp = sv_newmortal();
1535 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1536 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1540 #ifdef HAS_SIGPROCMASK
1541 /* Avoid having the signal arrive at a bad time, if possible. */
1544 sigprocmask(SIG_BLOCK, &set, &save);
1546 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1547 SAVEFREESV(save_sv);
1548 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1551 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1552 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1554 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1555 PL_sig_ignoring[i] = 0;
1557 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1558 PL_sig_defaulting[i] = 0;
1560 to_dec = PL_psig_ptr[i];
1562 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1563 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1565 /* Signals don't change name during the program's execution, so once
1566 they're cached in the appropriate slot of PL_psig_name, they can
1569 Ideally we'd find some way of making SVs at (C) compile time, or
1570 at least, doing most of the work. */
1571 if (!PL_psig_name[i]) {
1572 PL_psig_name[i] = newSVpvn(s, len);
1573 SvREADONLY_on(PL_psig_name[i]);
1576 SvREFCNT_dec(PL_psig_name[i]);
1577 PL_psig_name[i] = NULL;
1578 PL_psig_ptr[i] = NULL;
1581 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1583 (void)rsignal(i, PL_csighandlerp);
1586 *svp = SvREFCNT_inc_simple_NN(sv);
1588 if (sv && SvOK(sv)) {
1589 s = SvPV_force(sv, len);
1593 if (sv && memEQs(s, len,"IGNORE")) {
1595 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1596 PL_sig_ignoring[i] = 1;
1597 (void)rsignal(i, PL_csighandlerp);
1599 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1603 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1605 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1606 PL_sig_defaulting[i] = 1;
1607 (void)rsignal(i, PL_csighandlerp);
1609 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1615 * We should warn if HINT_STRICT_REFS, but without
1616 * access to a known hint bit in a known OP, we can't
1617 * tell whether HINT_STRICT_REFS is in force or not.
1619 if (!strchr(s,':') && !strchr(s,'\''))
1620 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1623 (void)rsignal(i, PL_csighandlerp);
1625 *svp = SvREFCNT_inc_simple_NN(sv);
1629 #ifdef HAS_SIGPROCMASK
1633 SvREFCNT_dec(to_dec);
1636 #endif /* !PERL_MICRO */
1639 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1642 PERL_ARGS_ASSERT_MAGIC_SETISA;
1643 PERL_UNUSED_ARG(sv);
1645 /* Skip _isaelem because _isa will handle it shortly */
1646 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1649 return magic_clearisa(NULL, mg);
1652 /* sv of NULL signifies that we're acting as magic_setisa. */
1654 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1659 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1661 /* Bail out if destruction is going on */
1662 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1665 av_clear(MUTABLE_AV(sv));
1667 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1668 /* This occurs with setisa_elem magic, which calls this
1670 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1672 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1673 SV **svp = AvARRAY((AV *)mg->mg_obj);
1674 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1676 stash = GvSTASH((GV *)*svp++);
1677 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1684 (const GV *)mg->mg_obj
1687 /* The stash may have been detached from the symbol table, so check its
1688 name before doing anything. */
1689 if (stash && HvENAME_get(stash))
1690 mro_isa_changed_in(stash);
1696 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1698 HV * const hv = MUTABLE_HV(LvTARG(sv));
1701 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1702 PERL_UNUSED_ARG(mg);
1705 (void) hv_iterinit(hv);
1706 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1709 while (hv_iternext(hv))
1714 sv_setiv(sv, (IV)i);
1719 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1721 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1722 PERL_UNUSED_ARG(mg);
1724 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1730 =for apidoc magic_methcall
1732 Invoke a magic method (like FETCH).
1734 C<sv> and C<mg> are the tied thingy and the tie magic.
1736 C<meth> is the name of the method to call.
1738 C<argc> is the number of args (in addition to $self) to pass to the method.
1740 The C<flags> can be:
1742 G_DISCARD invoke method with G_DISCARD flag and don't
1744 G_UNDEF_FILL fill the stack with argc pointers to
1747 The arguments themselves are any values following the C<flags> argument.
1749 Returns the SV (if any) returned by the method, or NULL on failure.
1756 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1763 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1767 if (flags & G_WRITING_TO_STDERR) {
1771 SAVESPTR(PL_stderrgv);
1775 PUSHSTACKi(PERLSI_MAGIC);
1779 PUSHs(SvTIED_obj(sv, mg));
1780 if (flags & G_UNDEF_FILL) {
1782 PUSHs(&PL_sv_undef);
1784 } else if (argc > 0) {
1786 va_start(args, argc);
1789 SV *const sv = va_arg(args, SV *);
1796 if (flags & G_DISCARD) {
1797 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
1800 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
1801 ret = *PL_stack_sp--;
1804 if (flags & G_WRITING_TO_STDERR)
1810 /* wrapper for magic_methcall that creates the first arg */
1813 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1819 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
1822 if (mg->mg_len >= 0) {
1823 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
1825 else if (mg->mg_len == HEf_SVKEY)
1826 arg1 = MUTABLE_SV(mg->mg_ptr);
1828 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
1829 arg1 = newSViv((IV)(mg->mg_len));
1833 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
1835 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
1839 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
1844 PERL_ARGS_ASSERT_MAGIC_METHPACK;
1846 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
1853 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
1855 PERL_ARGS_ASSERT_MAGIC_GETPACK;
1857 if (mg->mg_type == PERL_MAGIC_tiedelem)
1858 mg->mg_flags |= MGf_GSKIP;
1859 magic_methpack(sv,mg,SV_CONST(FETCH));
1864 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
1870 PERL_ARGS_ASSERT_MAGIC_SETPACK;
1872 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
1873 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
1874 * public flags indicate its value based on copying from $val. Doing
1875 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
1876 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
1877 * wrong if $val happened to be tainted, as sv hasn't got magic
1878 * enabled, even though taint magic is in the chain. In which case,
1879 * fake up a temporary tainted value (this is easier than temporarily
1880 * re-enabling magic on sv). */
1882 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
1883 && (tmg->mg_len & 1))
1885 val = sv_mortalcopy(sv);
1891 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
1896 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
1898 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
1900 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
1901 return magic_methpack(sv,mg,SV_CONST(DELETE));
1906 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
1912 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
1914 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
1916 retval = SvIV(retsv)-1;
1918 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
1920 return (U32) retval;
1924 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
1928 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
1930 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
1935 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
1940 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
1942 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
1943 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
1950 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
1952 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
1954 return magic_methpack(sv,mg,SV_CONST(EXISTS));
1958 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
1962 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
1963 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
1965 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
1967 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
1969 if (HvEITER_get(hv))
1970 /* we are in an iteration so the hash cannot be empty */
1972 /* no xhv_eiter so now use FIRSTKEY */
1973 key = sv_newmortal();
1974 magic_nextpack(MUTABLE_SV(hv), mg, key);
1975 HvEITER_set(hv, NULL); /* need to reset iterator */
1976 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
1979 /* there is a SCALAR method that we can call */
1980 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
1982 retval = &PL_sv_undef;
1987 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
1992 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
1994 /* The magic ptr/len for the debugger's hash should always be an SV. */
1995 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
1996 Perl_croak(aTHX_ "panic: magic_setdbline len=%"IVdf", ptr='%s'",
1997 (IV)mg->mg_len, mg->mg_ptr);
2000 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
2001 setting/clearing debugger breakpoints is not a hot path. */
2002 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
2003 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2005 if (svp && SvIOKp(*svp)) {
2006 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2008 #ifdef PERL_DEBUG_READONLY_OPS
2009 Slab_to_rw(OpSLAB(o));
2011 /* set or clear breakpoint in the relevant control op */
2013 o->op_flags |= OPf_SPECIAL;
2015 o->op_flags &= ~OPf_SPECIAL;
2016 #ifdef PERL_DEBUG_READONLY_OPS
2017 Slab_to_ro(OpSLAB(o));
2025 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2028 AV * const obj = MUTABLE_AV(mg->mg_obj);
2030 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2033 sv_setiv(sv, AvFILL(obj));
2041 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2044 AV * const obj = MUTABLE_AV(mg->mg_obj);
2046 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2049 av_fill(obj, SvIV(sv));
2051 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2052 "Attempt to set length of freed array");
2058 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2062 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2063 PERL_UNUSED_ARG(sv);
2065 /* Reset the iterator when the array is cleared */
2066 #if IVSIZE == I32SIZE
2067 *((IV *) &(mg->mg_len)) = 0;
2070 *((IV *) mg->mg_ptr) = 0;
2077 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2081 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2082 PERL_UNUSED_ARG(sv);
2084 /* during global destruction, mg_obj may already have been freed */
2085 if (PL_in_clean_all)
2088 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2091 /* arylen scalar holds a pointer back to the array, but doesn't own a
2092 reference. Hence the we (the array) are about to go away with it
2093 still pointing at us. Clear its pointer, else it would be pointing
2094 at free memory. See the comment in sv_magic about reference loops,
2095 and why it can't own a reference to us. */
2102 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2105 SV* const lsv = LvTARG(sv);
2106 MAGIC * const found = mg_find_mglob(lsv);
2108 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2109 PERL_UNUSED_ARG(mg);
2111 if (found && found->mg_len != -1) {
2112 STRLEN i = found->mg_len;
2113 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2114 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2123 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2126 SV* const lsv = LvTARG(sv);
2133 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2134 PERL_UNUSED_ARG(mg);
2136 found = mg_find_mglob(lsv);
2140 found = sv_magicext_mglob(lsv);
2142 else if (!SvOK(sv)) {
2146 s = SvPV_const(lsv, len);
2151 ulen = sv_or_pv_len_utf8(lsv, s, len);
2161 else if (pos > (SSize_t)len)
2164 found->mg_len = pos;
2165 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2171 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2174 SV * const lsv = LvTARG(sv);
2175 const char * const tmps = SvPV_const(lsv,len);
2176 STRLEN offs = LvTARGOFF(sv);
2177 STRLEN rem = LvTARGLEN(sv);
2178 const bool negoff = LvFLAGS(sv) & 1;
2179 const bool negrem = LvFLAGS(sv) & 2;
2181 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2182 PERL_UNUSED_ARG(mg);
2184 if (!translate_substr_offsets(
2185 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2186 negoff ? -(IV)offs : (IV)offs, !negoff,
2187 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2189 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2190 sv_setsv_nomg(sv, &PL_sv_undef);
2195 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2196 sv_setpvn(sv, tmps + offs, rem);
2203 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2206 STRLEN len, lsv_len, oldtarglen, newtarglen;
2207 const char * const tmps = SvPV_const(sv, len);
2208 SV * const lsv = LvTARG(sv);
2209 STRLEN lvoff = LvTARGOFF(sv);
2210 STRLEN lvlen = LvTARGLEN(sv);
2211 const bool negoff = LvFLAGS(sv) & 1;
2212 const bool neglen = LvFLAGS(sv) & 2;
2214 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2215 PERL_UNUSED_ARG(mg);
2219 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2220 "Attempt to use reference as lvalue in substr"
2222 SvPV_force_nomg(lsv,lsv_len);
2223 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2224 if (!translate_substr_offsets(
2226 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2227 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2229 Perl_croak(aTHX_ "substr outside of string");
2232 sv_utf8_upgrade_nomg(lsv);
2233 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2234 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2235 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2238 else if (SvUTF8(lsv)) {
2240 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2242 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2243 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2247 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2250 if (!neglen) LvTARGLEN(sv) = newtarglen;
2251 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2257 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2261 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2262 PERL_UNUSED_ARG(sv);
2263 #ifdef NO_TAINT_SUPPORT
2264 PERL_UNUSED_ARG(mg);
2267 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
2272 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2276 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2277 PERL_UNUSED_ARG(sv);
2279 /* update taint status */
2288 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2290 SV * const lsv = LvTARG(sv);
2292 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2293 PERL_UNUSED_ARG(mg);
2295 sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2301 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2303 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2304 PERL_UNUSED_ARG(mg);
2305 do_vecset(sv); /* XXX slurp this routine */
2310 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2314 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2315 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2317 if (LvTARGLEN(sv)) {
2319 SV * const ahv = LvTARG(sv);
2320 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2324 else if (LvSTARGOFF(sv) >= 0) {
2325 AV *const av = MUTABLE_AV(LvTARG(sv));
2326 if (LvSTARGOFF(sv) <= AvFILL(av))
2328 if (SvRMAGICAL(av)) {
2329 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2330 targ = svp ? *svp : NULL;
2333 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2336 if (targ && (targ != &PL_sv_undef)) {
2337 /* somebody else defined it for us */
2338 SvREFCNT_dec(LvTARG(sv));
2339 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2341 SvREFCNT_dec(mg->mg_obj);
2343 mg->mg_flags &= ~MGf_REFCOUNTED;
2352 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2354 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2356 sv_setsv(sv, defelem_target(sv, mg));
2361 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2363 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2364 PERL_UNUSED_ARG(mg);
2368 sv_setsv(LvTARG(sv), sv);
2369 SvSETMAGIC(LvTARG(sv));
2375 Perl_vivify_defelem(pTHX_ SV *sv)
2381 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2383 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2386 SV * const ahv = LvTARG(sv);
2387 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2390 if (!value || value == &PL_sv_undef)
2391 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2393 else if (LvSTARGOFF(sv) < 0)
2394 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2396 AV *const av = MUTABLE_AV(LvTARG(sv));
2397 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2398 LvTARG(sv) = NULL; /* array can't be extended */
2400 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2401 if (!svp || !(value = *svp))
2402 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2405 SvREFCNT_inc_simple_void(value);
2406 SvREFCNT_dec(LvTARG(sv));
2409 SvREFCNT_dec(mg->mg_obj);
2411 mg->mg_flags &= ~MGf_REFCOUNTED;
2415 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2417 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2418 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2423 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2425 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2426 PERL_UNUSED_CONTEXT;
2427 PERL_UNUSED_ARG(sv);
2433 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2435 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2437 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2439 if (uf && uf->uf_set)
2440 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2445 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2447 const char type = mg->mg_type;
2449 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2451 if (type == PERL_MAGIC_qr) {
2452 } else if (type == PERL_MAGIC_bm) {
2456 assert(type == PERL_MAGIC_fm);
2458 return sv_unmagic(sv, type);
2461 #ifdef USE_LOCALE_COLLATE
2463 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2465 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2468 * RenE<eacute> Descartes said "I think not."
2469 * and vanished with a faint plop.
2471 PERL_UNUSED_CONTEXT;
2472 PERL_UNUSED_ARG(sv);
2474 Safefree(mg->mg_ptr);
2480 #endif /* USE_LOCALE_COLLATE */
2482 /* Just clear the UTF-8 cache data. */
2484 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2486 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2487 PERL_UNUSED_CONTEXT;
2488 PERL_UNUSED_ARG(sv);
2489 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2491 mg->mg_len = -1; /* The mg_len holds the len cache. */
2496 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2506 PERL_ARGS_ASSERT_MAGIC_SET;
2510 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2512 CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv);
2514 /* Croak with a READONLY error when a numbered match var is
2515 * set without a previous pattern match. Unless it's C<local $1>
2518 if (!PL_localizing) {
2519 Perl_croak_no_modify();
2525 switch (*mg->mg_ptr) {
2526 case '\001': /* ^A */
2527 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2528 else SvOK_off(PL_bodytarget);
2529 FmLINES(PL_bodytarget) = 0;
2530 if (SvPOK(PL_bodytarget)) {
2531 char *s = SvPVX(PL_bodytarget);
2532 while ( ((s = strchr(s, '\n'))) ) {
2533 FmLINES(PL_bodytarget)++;
2537 /* mg_set() has temporarily made sv non-magical */
2539 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2540 SvTAINTED_on(PL_bodytarget);
2542 SvTAINTED_off(PL_bodytarget);
2545 case '\003': /* ^C */
2546 PL_minus_c = cBOOL(SvIV(sv));
2549 case '\004': /* ^D */
2551 s = SvPV_nolen_const(sv);
2552 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2553 if (DEBUG_x_TEST || DEBUG_B_TEST)
2554 dump_all_perl(!DEBUG_B_TEST);
2556 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2559 case '\005': /* ^E */
2560 if (*(mg->mg_ptr+1) == '\0') {
2562 set_vaxc_errno(SvIV(sv));
2565 SetLastError( SvIV(sv) );
2568 os2_setsyserrno(SvIV(sv));
2570 /* will anyone ever use this? */
2571 SETERRNO(SvIV(sv), 4);
2576 else if (strEQ(mg->mg_ptr+1, "NCODING")) {
2577 SvREFCNT_dec(PL_encoding);
2578 if (SvOK(sv) || SvGMAGICAL(sv)) {
2579 PL_encoding = newSVsv(sv);
2586 case '\006': /* ^F */
2587 PL_maxsysfd = SvIV(sv);
2589 case '\010': /* ^H */
2590 PL_hints = SvIV(sv);
2592 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2593 Safefree(PL_inplace);
2594 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2596 case '\016': /* ^N */
2597 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2598 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2600 case '\017': /* ^O */
2601 if (*(mg->mg_ptr+1) == '\0') {
2602 Safefree(PL_osname);
2605 TAINT_PROPER("assigning to $^O");
2606 PL_osname = savesvpv(sv);
2609 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2611 const char *const start = SvPV(sv, len);
2612 const char *out = (const char*)memchr(start, '\0', len);
2616 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2617 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2619 /* Opening for input is more common than opening for output, so
2620 ensure that hints for input are sooner on linked list. */
2621 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2623 : newSVpvs_flags("", SvUTF8(sv));
2624 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2627 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2629 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2633 case '\020': /* ^P */
2634 PL_perldb = SvIV(sv);
2635 if (PL_perldb && !PL_DBsingle)
2638 case '\024': /* ^T */
2640 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2642 PL_basetime = (Time_t)SvIV(sv);
2645 case '\025': /* ^UTF8CACHE */
2646 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
2647 PL_utf8cache = (signed char) sv_2iv(sv);
2650 case '\027': /* ^W & $^WARNING_BITS */
2651 if (*(mg->mg_ptr+1) == '\0') {
2652 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2654 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
2655 | (i ? G_WARN_ON : G_WARN_OFF) ;
2658 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
2659 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2661 PL_compiling.cop_warnings = pWARN_STD;
2666 int accumulate = 0 ;
2667 int any_fatals = 0 ;
2668 const char * const ptr = SvPV_const(sv, len) ;
2669 for (i = 0 ; i < len ; ++i) {
2670 accumulate |= ptr[i] ;
2671 any_fatals |= (ptr[i] & 0xAA) ;
2674 if (!specialWARN(PL_compiling.cop_warnings))
2675 PerlMemShared_free(PL_compiling.cop_warnings);
2676 PL_compiling.cop_warnings = pWARN_NONE;
2678 /* Yuck. I can't see how to abstract this: */
2680 ((STRLEN *)SvPV_nolen_const(sv)) - 1,
2684 if (!specialWARN(PL_compiling.cop_warnings))
2685 PerlMemShared_free(PL_compiling.cop_warnings);
2686 PL_compiling.cop_warnings = pWARN_ALL;
2687 PL_dowarn |= G_WARN_ONCE ;
2691 const char *const p = SvPV_const(sv, len);
2693 PL_compiling.cop_warnings
2694 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
2697 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
2698 PL_dowarn |= G_WARN_ONCE ;
2706 if (PL_localizing) {
2707 if (PL_localizing == 1)
2708 SAVESPTR(PL_last_in_gv);
2710 else if (SvOK(sv) && GvIO(PL_last_in_gv))
2711 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
2714 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
2715 s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2716 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2719 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
2720 s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2721 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2724 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
2727 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
2728 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
2729 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
2732 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
2736 IO * const io = GvIO(PL_defoutgv);
2739 if ((SvIV(sv)) == 0)
2740 IoFLAGS(io) &= ~IOf_FLUSH;
2742 if (!(IoFLAGS(io) & IOf_FLUSH)) {
2743 PerlIO *ofp = IoOFP(io);
2745 (void)PerlIO_flush(ofp);
2746 IoFLAGS(io) |= IOf_FLUSH;
2752 SvREFCNT_dec(PL_rs);
2753 PL_rs = newSVsv(sv);
2756 SvREFCNT_dec(PL_ors_sv);
2758 PL_ors_sv = newSVsv(sv);
2766 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
2769 #ifdef COMPLEX_STATUS
2770 if (PL_localizing == 2) {
2771 SvUPGRADE(sv, SVt_PVLV);
2772 PL_statusvalue = LvTARGOFF(sv);
2773 PL_statusvalue_vms = LvTARGLEN(sv);
2777 #ifdef VMSISH_STATUS
2779 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
2782 STATUS_UNIX_EXIT_SET(SvIV(sv));
2787 # define PERL_VMS_BANG vaxc$errno
2789 # define PERL_VMS_BANG 0
2791 #if defined(WIN32) && ! defined(UNDER_CE)
2792 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
2793 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2795 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
2796 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2803 const Uid_t new_uid = SvUID(sv);
2804 PL_delaymagic_uid = new_uid;
2805 if (PL_delaymagic) {
2806 PL_delaymagic |= DM_RUID;
2807 break; /* don't do magic till later */
2810 rc = setruid(new_uid);
2813 rc = setreuid(new_uid, (Uid_t)-1);
2815 #ifdef HAS_SETRESUID
2816 rc = setresuid(new_uid, (Uid_t)-1, (Uid_t)-1);
2818 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
2820 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
2821 if (new_uid != 0 && PerlProc_getuid() == 0)
2822 rc = PerlProc_setuid(0);
2824 rc = PerlProc_setuid(new_uid);
2826 Perl_croak(aTHX_ "setruid() not implemented");
2831 /* XXX $< currently silently ignores failures */
2832 PERL_UNUSED_VAR(rc);
2838 const Uid_t new_euid = SvUID(sv);
2839 PL_delaymagic_euid = new_euid;
2840 if (PL_delaymagic) {
2841 PL_delaymagic |= DM_EUID;
2842 break; /* don't do magic till later */
2845 rc = seteuid(new_euid);
2848 rc = setreuid((Uid_t)-1, new_euid);
2850 #ifdef HAS_SETRESUID
2851 rc = setresuid((Uid_t)-1, new_euid, (Uid_t)-1);
2853 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
2854 rc = PerlProc_setuid(new_euid);
2856 Perl_croak(aTHX_ "seteuid() not implemented");
2861 /* XXX $> currently silently ignores failures */
2862 PERL_UNUSED_VAR(rc);
2868 const Gid_t new_gid = SvGID(sv);
2869 PL_delaymagic_gid = new_gid;
2870 if (PL_delaymagic) {
2871 PL_delaymagic |= DM_RGID;
2872 break; /* don't do magic till later */
2875 rc = setrgid(new_gid);
2878 rc = setregid(new_gid, (Gid_t)-1);
2880 #ifdef HAS_SETRESGID
2881 rc = setresgid(new_gid, (Gid_t)-1, (Gid_t) -1);
2883 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
2884 rc = PerlProc_setgid(new_gid);
2886 Perl_croak(aTHX_ "setrgid() not implemented");
2891 /* XXX $( currently silently ignores failures */
2892 PERL_UNUSED_VAR(rc);
2899 #ifdef HAS_SETGROUPS
2901 const char *p = SvPV_const(sv, len);
2902 Groups_t *gary = NULL;
2903 #ifdef _SC_NGROUPS_MAX
2904 int maxgrp = sysconf(_SC_NGROUPS_MAX);
2909 int maxgrp = NGROUPS;
2914 new_egid = (Gid_t)Atol(p);
2915 for (i = 0; i < maxgrp; ++i) {
2916 while (*p && !isSPACE(*p))
2923 Newx(gary, i + 1, Groups_t);
2925 Renew(gary, i + 1, Groups_t);
2926 gary[i] = (Groups_t)Atol(p);
2929 rc = setgroups(i, gary);
2932 #else /* HAS_SETGROUPS */
2933 new_egid = SvGID(sv);
2934 #endif /* HAS_SETGROUPS */
2935 PL_delaymagic_egid = new_egid;
2936 if (PL_delaymagic) {
2937 PL_delaymagic |= DM_EGID;
2938 break; /* don't do magic till later */
2941 rc = setegid(new_egid);
2944 rc = setregid((Gid_t)-1, new_egid);
2946 #ifdef HAS_SETRESGID
2947 rc = setresgid((Gid_t)-1, new_egid, (Gid_t)-1);
2949 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
2950 rc = PerlProc_setgid(new_egid);
2952 Perl_croak(aTHX_ "setegid() not implemented");
2957 /* XXX $) currently silently ignores failures */
2958 PERL_UNUSED_VAR(rc);
2962 PL_chopset = SvPV_force(sv,len);
2965 /* Store the pid in mg->mg_obj so we can tell when a fork has
2966 occurred. mg->mg_obj points to *$ by default, so clear it. */
2967 if (isGV(mg->mg_obj)) {
2968 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
2969 SvREFCNT_dec(mg->mg_obj);
2970 mg->mg_flags |= MGf_REFCOUNTED;
2971 mg->mg_obj = newSViv((IV)PerlProc_getpid());
2973 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
2976 LOCK_DOLLARZERO_MUTEX;
2977 #ifdef HAS_SETPROCTITLE
2978 /* The BSDs don't show the argv[] in ps(1) output, they
2979 * show a string from the process struct and provide
2980 * the setproctitle() routine to manipulate that. */
2981 if (PL_origalen != 1) {
2982 s = SvPV_const(sv, len);
2983 # if __FreeBSD_version > 410001
2984 /* The leading "-" removes the "perl: " prefix,
2985 * but not the "(perl) suffix from the ps(1)
2986 * output, because that's what ps(1) shows if the
2987 * argv[] is modified. */
2988 setproctitle("-%s", s);
2989 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2990 /* This doesn't really work if you assume that
2991 * $0 = 'foobar'; will wipe out 'perl' from the $0
2992 * because in ps(1) output the result will be like
2993 * sprintf("perl: %s (perl)", s)
2994 * I guess this is a security feature:
2995 * one (a user process) cannot get rid of the original name.
2997 setproctitle("%s", s);
3000 #elif defined(__hpux) && defined(PSTAT_SETCMD)
3001 if (PL_origalen != 1) {
3003 s = SvPV_const(sv, len);
3004 un.pst_command = (char *)s;
3005 pstat(PSTAT_SETCMD, un, len, 0, 0);
3008 if (PL_origalen > 1) {
3009 /* PL_origalen is set in perl_parse(). */
3010 s = SvPV_force(sv,len);
3011 if (len >= (STRLEN)PL_origalen-1) {
3012 /* Longer than original, will be truncated. We assume that
3013 * PL_origalen bytes are available. */
3014 Copy(s, PL_origargv[0], PL_origalen-1, char);
3017 /* Shorter than original, will be padded. */
3019 /* Special case for Mac OS X: see [perl #38868] */
3022 /* Is the space counterintuitive? Yes.
3023 * (You were expecting \0?)
3024 * Does it work? Seems to. (In Linux 2.4.20 at least.)
3026 const int pad = ' ';
3028 Copy(s, PL_origargv[0], len, char);
3029 PL_origargv[0][len] = 0;
3030 memset(PL_origargv[0] + len + 1,
3031 pad, PL_origalen - len - 1);
3033 PL_origargv[0][PL_origalen-1] = 0;
3034 for (i = 1; i < PL_origargc; i++)
3036 #ifdef HAS_PRCTL_SET_NAME
3037 /* Set the legacy process name in addition to the POSIX name on Linux */
3038 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
3039 /* diag_listed_as: SKIPME */
3040 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
3045 UNLOCK_DOLLARZERO_MUTEX;
3052 Perl_whichsig_sv(pTHX_ SV *sigsv)
3056 PERL_ARGS_ASSERT_WHICHSIG_SV;
3057 PERL_UNUSED_CONTEXT;
3058 sigpv = SvPV_const(sigsv, siglen);
3059 return whichsig_pvn(sigpv, siglen);
3063 Perl_whichsig_pv(pTHX_ const char *sig)
3065 PERL_ARGS_ASSERT_WHICHSIG_PV;
3066 PERL_UNUSED_CONTEXT;
3067 return whichsig_pvn(sig, strlen(sig));
3071 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3075 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3076 PERL_UNUSED_CONTEXT;
3078 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3079 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3080 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3082 if (memEQs(sig, len, "CHLD"))
3086 if (memEQs(sig, len, "CLD"))
3093 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3094 Perl_sighandler(int sig, siginfo_t *sip, void *uap)
3096 Perl_sighandler(int sig)
3099 #ifdef PERL_GET_SIG_CONTEXT
3100 dTHXa(PERL_GET_SIG_CONTEXT);
3107 SV * const tSv = PL_Sv;
3111 XPV * const tXpv = PL_Xpv;
3112 I32 old_ss_ix = PL_savestack_ix;
3113 SV *errsv_save = NULL;
3116 if (!PL_psig_ptr[sig]) {
3117 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3122 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3123 /* Max number of items pushed there is 3*n or 4. We cannot fix
3124 infinity, so we fix 4 (in fact 5): */
3125 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3127 PL_savestack_ix += 5; /* Protect save in progress. */
3128 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3131 /* sv_2cv is too complicated, try a simpler variant first: */
3132 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3133 || SvTYPE(cv) != SVt_PVCV) {
3135 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3138 if (!cv || !CvROOT(cv)) {
3139 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "SIG%s handler \"%s\" not defined.\n",
3140 PL_sig_name[sig], (gv ? GvENAME(gv)
3147 sv = PL_psig_name[sig]
3148 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3149 : newSVpv(PL_sig_name[sig],0);
3153 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3154 /* make sure our assumption about the size of the SAVEs are correct:
3155 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3156 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3159 PUSHSTACKi(PERLSI_SIGNAL);
3162 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3164 struct sigaction oact;
3166 if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3169 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3170 /* The siginfo fields signo, code, errno, pid, uid,
3171 * addr, status, and band are defined by POSIX/SUSv3. */
3172 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3173 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3174 #if 0 /* XXX TODO: Configure scan for the existence of these, but even that does not help if the SA_SIGINFO is not implemented according to the spec. */
3175 hv_stores(sih, "errno", newSViv(sip->si_errno));
3176 hv_stores(sih, "status", newSViv(sip->si_status));
3177 hv_stores(sih, "uid", newSViv(sip->si_uid));
3178 hv_stores(sih, "pid", newSViv(sip->si_pid));
3179 hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3180 hv_stores(sih, "band", newSViv(sip->si_band));
3184 mPUSHp((char *)sip, sizeof(*sip));
3192 errsv_save = newSVsv(ERRSV);
3194 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3198 SV * const errsv = ERRSV;
3199 if (SvTRUE_NN(errsv)) {
3200 SvREFCNT_dec(errsv_save);
3202 /* Handler "died", for example to get out of a restart-able read().
3203 * Before we re-do that on its behalf re-enable the signal which was
3204 * blocked by the system when we entered.
3206 #ifdef HAS_SIGPROCMASK
3207 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3213 sigaddset(&set,sig);
3214 sigprocmask(SIG_UNBLOCK, &set, NULL);
3217 /* Not clear if this will work */
3218 (void)rsignal(sig, SIG_IGN);
3219 (void)rsignal(sig, PL_csighandlerp);
3221 #endif /* !PERL_MICRO */
3225 sv_setsv(errsv, errsv_save);
3226 SvREFCNT_dec(errsv_save);
3231 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3232 PL_savestack_ix = old_ss_ix;
3234 SvREFCNT_dec_NN(sv);
3235 PL_op = myop; /* Apparently not needed... */
3237 PL_Sv = tSv; /* Restore global temporaries. */
3244 S_restore_magic(pTHX_ const void *p)
3247 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3248 SV* const sv = mgs->mgs_sv;
3254 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3255 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3256 #ifdef PERL_OLD_COPY_ON_WRITE
3257 /* While magic was saved (and off) sv_setsv may well have seen
3258 this SV as a prime candidate for COW. */
3260 sv_force_normal_flags(sv, 0);
3262 if (mgs->mgs_readonly)
3264 if (mgs->mgs_magical)
3265 SvFLAGS(sv) |= mgs->mgs_magical;
3270 bumped = mgs->mgs_bumped;
3271 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3273 /* If we're still on top of the stack, pop us off. (That condition
3274 * will be satisfied if restore_magic was called explicitly, but *not*
3275 * if it's being called via leave_scope.)
3276 * The reason for doing this is that otherwise, things like sv_2cv()
3277 * may leave alloc gunk on the savestack, and some code
3278 * (e.g. sighandler) doesn't expect that...
3280 if (PL_savestack_ix == mgs->mgs_ss_ix)
3282 UV popval = SSPOPUV;
3283 assert(popval == SAVEt_DESTRUCTOR_X);
3284 PL_savestack_ix -= 2;
3286 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3287 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3290 if (SvREFCNT(sv) == 1) {
3291 /* We hold the last reference to this SV, which implies that the
3292 SV was deleted as a side effect of the routines we called.
3293 So artificially keep it alive a bit longer.
3294 We avoid turning on the TEMP flag, which can cause the SV's
3295 buffer to get stolen (and maybe other stuff). */
3300 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3304 /* clean up the mess created by Perl_sighandler().
3305 * Note that this is only called during an exit in a signal handler;
3306 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3310 S_unwind_handler_stack(pTHX_ const void *p)
3315 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3319 =for apidoc magic_sethint
3321 Triggered by a store to %^H, records the key/value pair to
3322 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3323 anything that would need a deep copy. Maybe we should warn if we find a
3329 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3332 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3333 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3335 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3337 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3338 an alternative leaf in there, with PL_compiling.cop_hints being used if
3339 it's NULL. If needed for threads, the alternative could lock a mutex,
3340 or take other more complex action. */
3342 /* Something changed in %^H, so it will need to be restored on scope exit.
3343 Doing this here saves a lot of doing it manually in perl code (and
3344 forgetting to do it, and consequent subtle errors. */
3345 PL_hints |= HINT_LOCALIZE_HH;
3346 CopHINTHASH_set(&PL_compiling,
3347 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3352 =for apidoc magic_clearhint
3354 Triggered by a delete from %^H, records the key to
3355 C<PL_compiling.cop_hints_hash>.
3360 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3364 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3365 PERL_UNUSED_ARG(sv);
3367 PL_hints |= HINT_LOCALIZE_HH;
3368 CopHINTHASH_set(&PL_compiling,
3369 mg->mg_len == HEf_SVKEY
3370 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3371 MUTABLE_SV(mg->mg_ptr), 0, 0)
3372 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3373 mg->mg_ptr, mg->mg_len, 0, 0));
3378 =for apidoc magic_clearhints
3380 Triggered by clearing %^H, resets C<PL_compiling.cop_hints_hash>.
3385 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3387 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3388 PERL_UNUSED_ARG(sv);
3389 PERL_UNUSED_ARG(mg);
3390 cophh_free(CopHINTHASH_get(&PL_compiling));
3391 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3396 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3397 const char *name, I32 namlen)
3401 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3402 PERL_UNUSED_ARG(sv);
3403 PERL_UNUSED_ARG(name);
3404 PERL_UNUSED_ARG(namlen);
3406 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3407 nmg = mg_find(nsv, mg->mg_type);
3408 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3409 nmg->mg_ptr = mg->mg_ptr;
3410 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3411 nmg->mg_flags |= MGf_REFCOUNTED;
3417 * c-indentation-style: bsd
3419 * indent-tabs-mode: nil
3422 * ex: set ts=8 sts=4 sw=4 et: