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"]
20 "Magic" is special data attached to SV structures in order to give them
21 "magical" properties. When any Perl code tries to read from, or assign to,
22 an SV marked as magical, it calls the 'get' or 'set' function associated
23 with that SV's magic. A get is called prior to reading an SV, in order to
24 give it a chance to update its internal value (get on $. writes the line
25 number of the last read filehandle into the SV's IV slot), while
26 set is called after an SV has been written to, in order to allow it to make
27 use of its changed value (set on $/ copies the SV's new value to the
28 PL_rs global variable).
30 Magic is implemented as a linked list of MAGIC structures attached to the
31 SV. Each MAGIC struct holds the type of the magic, a pointer to an array
32 of functions that implement the get(), set(), length() etc functions,
33 plus space for some flags and pointers. For example, a tied variable has
34 a MAGIC structure that contains a pointer to the object associated with the
37 =for apidoc Ayh||MAGIC
48 #if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
54 #if defined(HAS_SETGROUPS)
61 # include <sys/pstat.h>
64 #ifdef HAS_PRCTL_SET_NAME
65 # include <sys/prctl.h>
69 /* Missing protos on LynxOS */
70 void setruid(uid_t id);
71 void seteuid(uid_t id);
72 void setrgid(uid_t id);
73 void setegid(uid_t id);
77 * Pre-magic setup and post-magic takedown.
78 * Use the "DESTRUCTOR" scope cleanup to reinstate magic.
87 /* MGS is typedef'ed to struct magic_state in perl.h */
90 S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags)
95 PERL_ARGS_ASSERT_SAVE_MAGIC_FLAGS;
97 assert(SvMAGICAL(sv));
99 /* we shouldn't really be called here with RC==0, but it can sometimes
100 * happen via mg_clear() (which also shouldn't be called when RC==0,
101 * but it can happen). Handle this case gracefully(ish) by not RC++
102 * and thus avoiding the resultant double free */
103 if (SvREFCNT(sv) > 0) {
104 /* guard against sv getting freed midway through the mg clearing,
105 * by holding a private reference for the duration. */
106 SvREFCNT_inc_simple_void_NN(sv);
110 SAVEDESTRUCTOR_X(S_restore_magic, INT2PTR(void*, (IV)mgs_ix));
112 mgs = SSPTR(mgs_ix, MGS*);
114 mgs->mgs_flags = SvMAGICAL(sv) | SvREADONLY(sv);
115 mgs->mgs_ss_ix = PL_savestack_ix; /* points after the saved destructor */
116 mgs->mgs_bumped = bumped;
118 SvFLAGS(sv) &= ~flags;
122 #define save_magic(a,b) save_magic_flags(a,b,SVs_GMG|SVs_SMG|SVs_RMG)
125 =for apidoc mg_magical
127 Turns on the magical status of an SV. See C<L</sv_magic>>.
133 Perl_mg_magical(SV *sv)
136 PERL_ARGS_ASSERT_MG_MAGICAL;
139 if ((mg = SvMAGIC(sv))) {
141 const MGVTBL* const vtbl = mg->mg_virtual;
143 if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP))
150 } while ((mg = mg->mg_moremagic));
151 if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG)))
159 Do magic before a value is retrieved from the SV. The type of SV must
160 be >= C<SVt_PVMG>. See C<L</sv_magic>>.
166 Perl_mg_get(pTHX_ SV *sv)
168 const I32 mgs_ix = SSNEW(sizeof(MGS));
171 bool taint_only = TRUE; /* the only get method seen is taint */
172 MAGIC *newmg, *head, *cur, *mg;
174 PERL_ARGS_ASSERT_MG_GET;
176 if (PL_localizing == 1 && sv == DEFSV) return 0;
178 /* We must call svt_get(sv, mg) for each valid entry in the linked
179 list of magic. svt_get() may delete the current entry, add new
180 magic to the head of the list, or upgrade the SV. AMS 20010810 */
182 newmg = cur = head = mg = SvMAGIC(sv);
184 const MGVTBL * const vtbl = mg->mg_virtual;
185 MAGIC * const nextmg = mg->mg_moremagic; /* it may delete itself */
187 if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) {
189 /* taint's mg get is so dumb it doesn't need flag saving */
190 if (mg->mg_type != PERL_MAGIC_taint) {
193 save_magic(mgs_ix, sv);
198 vtbl->svt_get(aTHX_ sv, mg);
200 /* guard against magic having been deleted - eg FETCH calling
203 /* recalculate flags */
204 (SSPTR(mgs_ix, MGS *))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG);
208 /* recalculate flags if this entry was deleted. */
209 if (mg->mg_flags & MGf_GSKIP)
210 (SSPTR(mgs_ix, MGS *))->mgs_flags &=
211 ~(SVs_GMG|SVs_SMG|SVs_RMG);
213 else if (vtbl == &PL_vtbl_utf8) {
214 /* get-magic can reallocate the PV, unless there's only taint
218 for (mg2 = nextmg; mg2; mg2 = mg2->mg_moremagic) {
219 if ( mg2->mg_type != PERL_MAGIC_taint
220 && !(mg2->mg_flags & MGf_GSKIP)
222 && mg2->mg_virtual->svt_get
230 magic_setutf8(sv, mg);
236 /* Have we finished with the new entries we saw? Start again
237 where we left off (unless there are more new entries). */
245 /* Were any new entries added? */
246 if (!have_new && (newmg = SvMAGIC(sv)) != head) {
250 /* recalculate flags */
251 (SSPTR(mgs_ix, MGS *))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG);
256 restore_magic(INT2PTR(void *, (IV)mgs_ix));
264 Do magic after a value is assigned to the SV. See C<L</sv_magic>>.
270 Perl_mg_set(pTHX_ SV *sv)
272 const I32 mgs_ix = SSNEW(sizeof(MGS));
276 PERL_ARGS_ASSERT_MG_SET;
278 if (PL_localizing == 2 && sv == DEFSV) return 0;
280 save_magic_flags(mgs_ix, sv, SVs_GMG|SVs_SMG); /* leave SVs_RMG on */
282 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
283 const MGVTBL* vtbl = mg->mg_virtual;
284 nextmg = mg->mg_moremagic; /* it may delete itself */
285 if (mg->mg_flags & MGf_GSKIP) {
286 mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */
287 (SSPTR(mgs_ix, MGS*))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG);
289 if (PL_localizing == 2
290 && PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
292 if (vtbl && vtbl->svt_set)
293 vtbl->svt_set(aTHX_ sv, mg);
296 restore_magic(INT2PTR(void*, (IV)mgs_ix));
301 Perl_mg_size(pTHX_ SV *sv)
305 PERL_ARGS_ASSERT_MG_SIZE;
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));
312 save_magic(mgs_ix, sv);
313 /* omit MGf_GSKIP -- not changed here */
314 len = vtbl->svt_len(aTHX_ sv, mg);
315 restore_magic(INT2PTR(void*, (IV)mgs_ix));
322 return AvFILLp((const AV *) sv); /* Fallback to non-tied array */
326 Perl_croak(aTHX_ "Size magic not implemented");
329 NOT_REACHED; /* NOTREACHED */
335 Clear something magical that the SV represents. See C<L</sv_magic>>.
341 Perl_mg_clear(pTHX_ SV *sv)
343 const I32 mgs_ix = SSNEW(sizeof(MGS));
347 PERL_ARGS_ASSERT_MG_CLEAR;
349 save_magic(mgs_ix, sv);
351 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
352 const MGVTBL* const vtbl = mg->mg_virtual;
353 /* omit GSKIP -- never set here */
355 nextmg = mg->mg_moremagic; /* it may delete itself */
357 if (vtbl && vtbl->svt_clear)
358 vtbl->svt_clear(aTHX_ sv, mg);
361 restore_magic(INT2PTR(void*, (IV)mgs_ix));
366 S_mg_findext_flags(const SV *sv, int type, const MGVTBL *vtbl, U32 flags)
373 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
374 if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) {
386 Finds the magic pointer for C<type> matching the SV. See C<L</sv_magic>>.
392 Perl_mg_find(const SV *sv, int type)
394 return S_mg_findext_flags(sv, type, NULL, 0);
398 =for apidoc mg_findext
400 Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
407 Perl_mg_findext(const SV *sv, int type, const MGVTBL *vtbl)
409 return S_mg_findext_flags(sv, type, vtbl, 1);
413 Perl_mg_find_mglob(pTHX_ SV *sv)
415 PERL_ARGS_ASSERT_MG_FIND_MGLOB;
416 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
417 /* This sv is only a delegate. //g magic must be attached to
422 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
423 return S_mg_findext_flags(sv, PERL_MAGIC_regex_global, 0, 0);
430 Copies the magic from one SV to another. See C<L</sv_magic>>.
436 Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
441 PERL_ARGS_ASSERT_MG_COPY;
443 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
444 const MGVTBL* const vtbl = mg->mg_virtual;
445 if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){
446 count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen);
449 const char type = mg->mg_type;
450 if (isUPPER(type) && type != PERL_MAGIC_uvar) {
452 (type == PERL_MAGIC_tied)
455 toLOWER(type), key, klen);
464 =for apidoc mg_localize
466 Copy some of the magic from an existing SV to new localized version of that
467 SV. Container magic (I<e.g.>, C<%ENV>, C<$1>, C<tie>)
468 gets copied, value magic doesn't (I<e.g.>,
471 If C<setmagic> is false then no set magic will be called on the new (empty) SV.
472 This typically means that assignment will soon follow (e.g. S<C<'local $x = $y'>>),
473 and that will handle the magic.
479 Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic)
483 PERL_ARGS_ASSERT_MG_LOCALIZE;
488 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
489 const MGVTBL* const vtbl = mg->mg_virtual;
490 if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
493 if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local)
494 (void)vtbl->svt_local(aTHX_ nsv, mg);
496 sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl,
497 mg->mg_ptr, mg->mg_len);
499 /* container types should remain read-only across localization */
500 SvFLAGS(nsv) |= SvREADONLY(sv);
503 if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) {
504 SvFLAGS(nsv) |= SvMAGICAL(sv);
513 #define mg_free_struct(sv, mg) S_mg_free_struct(aTHX_ sv, mg)
515 S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg)
517 const MGVTBL* const vtbl = mg->mg_virtual;
518 if (vtbl && vtbl->svt_free)
519 vtbl->svt_free(aTHX_ sv, mg);
522 Safefree(mg->mg_ptr);
523 else if (mg->mg_len == HEf_SVKEY)
524 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
526 if (mg->mg_flags & MGf_REFCOUNTED)
527 SvREFCNT_dec(mg->mg_obj);
534 Free any magic storage used by the SV. See C<L</sv_magic>>.
540 Perl_mg_free(pTHX_ SV *sv)
545 PERL_ARGS_ASSERT_MG_FREE;
547 for (mg = SvMAGIC(sv); mg; mg = moremagic) {
548 moremagic = mg->mg_moremagic;
549 mg_free_struct(sv, mg);
550 SvMAGIC_set(sv, moremagic);
552 SvMAGIC_set(sv, NULL);
558 =for apidoc mg_free_type
560 Remove any magic of type C<how> from the SV C<sv>. See L</sv_magic>.
566 Perl_mg_free_type(pTHX_ SV *sv, int how)
568 MAGIC *mg, *prevmg, *moremg;
569 PERL_ARGS_ASSERT_MG_FREE_TYPE;
570 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
571 moremg = mg->mg_moremagic;
572 if (mg->mg_type == how) {
574 /* temporarily move to the head of the magic chain, in case
575 custom free code relies on this historical aspect of mg_free */
577 prevmg->mg_moremagic = moremg;
578 mg->mg_moremagic = SvMAGIC(sv);
581 newhead = mg->mg_moremagic;
582 mg_free_struct(sv, mg);
583 SvMAGIC_set(sv, newhead);
591 =for apidoc mg_freeext
593 Remove any magic of type C<how> using virtual table C<vtbl> from the
594 SV C<sv>. See L</sv_magic>.
596 C<mg_freeext(sv, how, NULL)> is equivalent to C<mg_free_type(sv, how)>.
602 Perl_mg_freeext(pTHX_ SV *sv, int how, const MGVTBL *vtbl)
604 MAGIC *mg, *prevmg, *moremg;
605 PERL_ARGS_ASSERT_MG_FREEEXT;
606 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
608 moremg = mg->mg_moremagic;
609 if (mg->mg_type == how && (vtbl == NULL || mg->mg_virtual == vtbl)) {
610 /* temporarily move to the head of the magic chain, in case
611 custom free code relies on this historical aspect of mg_free */
613 prevmg->mg_moremagic = moremg;
614 mg->mg_moremagic = SvMAGIC(sv);
617 newhead = mg->mg_moremagic;
618 mg_free_struct(sv, mg);
619 SvMAGIC_set(sv, newhead);
629 Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
633 PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT;
636 REGEXP * const rx = PM_GETRE(PL_curpm);
638 const SSize_t n = (SSize_t)mg->mg_obj;
639 if (n == '+') { /* @+ */
640 /* return the number possible */
641 return RX_NPARENS(rx);
642 } else { /* @- @^CAPTURE @{^CAPTURE} */
643 I32 paren = RX_LASTPAREN(rx);
645 /* return the last filled */
647 && (RX_OFFS(rx)[paren].start == -1
648 || RX_OFFS(rx)[paren].end == -1) )
654 /* @^CAPTURE @{^CAPTURE} */
655 return paren >= 0 ? (U32)(paren-1) : (U32)-1;
667 Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
669 PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET;
672 REGEXP * const rx = PM_GETRE(PL_curpm);
674 const SSize_t n = (SSize_t)mg->mg_obj;
675 /* @{^CAPTURE} does not contain $&, so we need to increment by 1 */
676 const I32 paren = mg->mg_len
677 + (n == '\003' ? 1 : 0);
682 if (paren <= (I32)RX_NPARENS(rx) &&
683 (s = RX_OFFS(rx)[paren].start) != -1 &&
684 (t = RX_OFFS(rx)[paren].end) != -1)
688 if (n == '+') /* @+ */
690 else if (n == '-') /* @- */
692 else { /* @^CAPTURE @{^CAPTURE} */
693 CALLREG_NUMBUF_FETCH(rx,paren,sv);
697 if (RX_MATCH_UTF8(rx)) {
698 const char * const b = RX_SUBBEG(rx);
700 i = RX_SUBCOFFSET(rx) +
702 (U8*)(b-RX_SUBOFFSET(rx)+i));
717 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
719 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
723 Perl_croak_no_modify();
724 NORETURN_FUNCTION_END;
727 #define SvRTRIM(sv) STMT_START { \
730 STRLEN len = SvCUR(sv_); \
731 char * const p = SvPVX(sv_); \
732 while (len > 0 && isSPACE(p[len-1])) \
734 SvCUR_set(sv_, len); \
740 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
742 PERL_ARGS_ASSERT_EMULATE_COP_IO;
744 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
749 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
750 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
755 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
756 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
764 S_fixup_errno_string(pTHX_ SV* sv)
766 /* Do what is necessary to fixup the non-empty string in 'sv' for return to
769 PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING;
773 if(strEQ(SvPVX(sv), "")) {
774 sv_catpv(sv, UNKNOWN_ERRNO_MSG);
779 =for apidoc_section $errno
780 =for apidoc sv_string_from_errnum
782 Generates the message string describing an OS error and returns it as
783 an SV. C<errnum> must be a value that C<errno> could take, identifying
786 If C<tgtsv> is non-null then the string will be written into that SV
787 (overwriting existing content) and it will be returned. If C<tgtsv>
788 is a null pointer then the string will be written into a new mortal SV
789 which will be returned.
791 The message will be taken from whatever locale would be used by C<$!>,
792 and will be encoded in the SV in whatever manner would be used by C<$!>.
793 The details of this process are subject to future change. Currently,
794 the message is taken from the C locale by default (usually producing an
795 English message), and from the currently selected locale when in the scope
796 of the C<use locale> pragma. A heuristic attempt is made to decode the
797 message from the locale's character encoding, but it will only be decoded
798 as either UTF-8 or ISO-8859-1. It is always correctly decoded in a UTF-8
799 locale, usually in an ISO-8859-1 locale, and never in any other locale.
801 The SV is always returned containing an actual string, and with no other
802 OK bits set. Unlike C<$!>, a message is even yielded for C<errnum> zero
803 (meaning success), and if no useful message is available then a useless
804 string (currently empty) is returned.
810 Perl_sv_string_from_errnum(pTHX_ int errnum, SV *tgtsv)
816 tgtsv = newSV_type_mortal(SVt_PV);
817 errstr = my_strerror(errnum, &utf8ness);
819 sv_setpv(tgtsv, errstr);
820 if (utf8ness == UTF8NESS_YES) {
823 fixup_errno_string(tgtsv);
836 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
839 const char *s = NULL;
843 PERL_ARGS_ASSERT_MAGIC_GET;
845 const char * const remaining = (mg->mg_ptr)
851 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
853 CALLREG_NUMBUF_FETCH(rx,paren,sv);
860 nextchar = *remaining;
861 switch (*mg->mg_ptr) {
862 case '\001': /* ^A */
863 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
866 if (SvTAINTED(PL_bodytarget))
869 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
870 if (nextchar == '\0') {
871 sv_setiv(sv, (IV)PL_minus_c);
873 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
874 sv_setiv(sv, (IV)STATUS_NATIVE);
878 case '\004': /* ^D */
879 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
881 case '\005': /* ^E */
882 if (nextchar != '\0') {
883 if (strEQ(remaining, "NCODING"))
888 #if defined(VMS) || defined(OS2) || defined(WIN32)
892 $DESCRIPTOR(msgdsc,msg);
893 sv_setnv(sv,(NV) vaxc$errno);
894 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
895 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
900 if (!(_emx_env & 0x200)) { /* Under DOS */
901 sv_setnv(sv, (NV)errno);
904 const char * errstr = my_strerror(errnum, &utf8ness);
906 sv_setpv(sv, errstr);
908 if (utf8ness == UTF8NESS_YES) {
916 if (errno != errno_isOS2) {
917 const int tmp = _syserrno();
918 if (tmp) /* 2nd call to _syserrno() makes it 0 */
921 sv_setnv(sv, (NV)Perl_rc);
922 sv_setpv(sv, os2error(Perl_rc));
924 if (SvOK(sv) && strNE(SvPVX(sv), "")) {
925 fixup_errno_string(sv);
927 # elif defined(WIN32)
929 const DWORD dwErr = GetLastError();
930 sv_setnv(sv, (NV)dwErr);
932 PerlProc_GetOSError(sv, dwErr);
933 fixup_errno_string(sv);
937 && get_win32_message_utf8ness(SvPV_nomg_const_nolen(sv)))
948 # error Missing code for platform
951 SvNOK_on(sv); /* what a wonderful hack! */
953 #endif /* End of platforms with special handling for $^E; others just fall
961 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
963 sv_setnv(sv, (NV)errno);
966 if (errno == errno_isOS2 || errno == errno_isOS2_set)
967 sv_setpv(sv, os2error(Perl_rc));
974 sv_string_from_errnum(errno, sv);
975 /* If no useful string is available, don't
976 * claim to have a string part. The SvNOK_on()
977 * below will cause just the number part to be valid */
985 SvNOK_on(sv); /* what a wonderful hack! */
988 case '\006': /* ^F */
989 if (nextchar == '\0') {
990 sv_setiv(sv, (IV)PL_maxsysfd);
993 case '\007': /* ^GLOBAL_PHASE */
994 if (strEQ(remaining, "LOBAL_PHASE")) {
995 sv_setpvn(sv, PL_phase_names[PL_phase],
996 strlen(PL_phase_names[PL_phase]));
999 case '\010': /* ^H */
1000 sv_setuv(sv, PL_hints);
1002 case '\011': /* ^I */ /* NOT \t in EBCDIC */
1003 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
1005 case '\014': /* ^LAST_FH */
1006 if (strEQ(remaining, "AST_FH")) {
1007 if (PL_last_in_gv && (SV*)PL_last_in_gv != &PL_sv_undef) {
1008 assert(isGV_with_GP(PL_last_in_gv));
1009 sv_setrv_inc(sv, MUTABLE_SV(PL_last_in_gv));
1016 case '\017': /* ^O & ^OPEN */
1017 if (nextchar == '\0') {
1018 sv_setpv(sv, PL_osname);
1021 else if (strEQ(remaining, "PEN")) {
1022 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
1026 sv_setiv(sv, (IV)PL_perldb);
1028 case '\023': /* ^S */
1029 if (nextchar == '\0') {
1030 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
1032 else if (PL_in_eval)
1033 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
1037 else if (strEQ(remaining, "AFE_LOCALES")) {
1039 #if ! defined(USE_ITHREADS) || defined(USE_THREAD_SAFE_LOCALE)
1041 sv_setuv(sv, (UV) 1);
1044 sv_setuv(sv, (UV) 0);
1050 case '\024': /* ^T */
1051 if (nextchar == '\0') {
1053 sv_setnv(sv, PL_basetime);
1055 sv_setiv(sv, (IV)PL_basetime);
1058 else if (strEQ(remaining, "AINT"))
1059 sv_setiv(sv, TAINTING_get
1060 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
1063 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
1064 if (strEQ(remaining, "NICODE"))
1065 sv_setuv(sv, (UV) PL_unicode);
1066 else if (strEQ(remaining, "TF8LOCALE"))
1067 sv_setuv(sv, (UV) PL_utf8locale);
1068 else if (strEQ(remaining, "TF8CACHE"))
1069 sv_setiv(sv, (IV) PL_utf8cache);
1071 case '\027': /* ^W & $^WARNING_BITS */
1072 if (nextchar == '\0')
1073 sv_setiv(sv, (IV)cBOOL(PL_dowarn & G_WARN_ON));
1074 else if (strEQ(remaining, "ARNING_BITS")) {
1075 if (PL_compiling.cop_warnings == pWARN_NONE) {
1076 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
1078 else if (PL_compiling.cop_warnings == pWARN_STD) {
1081 else if (PL_compiling.cop_warnings == pWARN_ALL) {
1082 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1085 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
1086 *PL_compiling.cop_warnings);
1091 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1092 paren = RX_LASTPAREN(rx);
1094 goto do_numbuf_fetch;
1097 case '\016': /* ^N */
1098 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1099 paren = RX_LASTCLOSEPAREN(rx);
1101 goto do_numbuf_fetch;
1105 if (GvIO(PL_last_in_gv)) {
1106 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1111 sv_setiv(sv, (IV)STATUS_CURRENT);
1112 #ifdef COMPLEX_STATUS
1113 SvUPGRADE(sv, SVt_PVLV);
1114 LvTARGOFF(sv) = PL_statusvalue;
1115 LvTARGLEN(sv) = PL_statusvalue_vms;
1120 if (GvIOp(PL_defoutgv))
1121 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1125 sv_setpv(sv,GvENAME(PL_defoutgv));
1126 sv_catpvs(sv,"_TOP");
1130 if (GvIOp(PL_defoutgv))
1131 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1133 s = GvENAME(PL_defoutgv);
1137 if (GvIO(PL_defoutgv))
1138 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1141 if (GvIO(PL_defoutgv))
1142 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1145 if (GvIO(PL_defoutgv))
1146 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1155 if (GvIO(PL_defoutgv))
1156 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1160 sv_copypv(sv, PL_ors_sv);
1166 IV const pid = (IV)PerlProc_getpid();
1167 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1168 /* never set manually, or at least not since last fork */
1170 /* never unsafe, even if reading in a tainted expression */
1173 /* else a value has been assigned manually, so do nothing */
1177 sv_setuid(sv, PerlProc_getuid());
1180 sv_setuid(sv, PerlProc_geteuid());
1183 sv_setgid(sv, PerlProc_getgid());
1186 sv_setgid(sv, PerlProc_getegid());
1188 #ifdef HAS_GETGROUPS
1190 Groups_t *gary = NULL;
1191 I32 num_groups = getgroups(0, gary);
1192 if (num_groups > 0) {
1194 Newx(gary, num_groups, Groups_t);
1195 num_groups = getgroups(num_groups, gary);
1196 for (i = 0; i < num_groups; i++)
1197 Perl_sv_catpvf(aTHX_ sv, " %" IVdf, (IV)gary[i]);
1203 Set this to avoid warnings when the SV is used as a number.
1204 Avoid setting the public IOK flag so that serializers will
1207 (void)SvIOKp_on(sv); /* what a wonderful hack! */
1221 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1223 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1225 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1227 if (uf && uf->uf_val)
1228 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1233 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1235 STRLEN len = 0, klen;
1240 SV *keysv = MgSV(mg);
1242 if (keysv == NULL) {
1247 if (!sv_utf8_downgrade(keysv, /* fail_ok */ TRUE)) {
1248 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv key (encoding to utf8)");
1251 key = SvPV_const(keysv,klen);
1254 PERL_ARGS_ASSERT_MAGIC_SETENV;
1258 /* defined environment variables are byte strings; unfortunately
1259 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1260 (void)SvPV_force_nomg_nolen(sv);
1261 (void)sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1263 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1269 my_setenv(key, s); /* does the deed */
1271 #ifdef DYNAMIC_ENV_FETCH
1272 /* We just undefd an environment var. Is a replacement */
1273 /* waiting in the wings? */
1275 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1277 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1281 #if !defined(OS2) && !defined(WIN32)
1282 /* And you'll never guess what the dog had */
1283 /* in its mouth... */
1285 MgTAINTEDDIR_off(mg);
1287 if (s && memEQs(key, klen, "DCL$PATH")) {
1288 char pathbuf[256], eltbuf[256], *cp, *elt;
1291 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1293 do { /* DCL$PATH may be a search list */
1294 while (1) { /* as may dev portion of any element */
1295 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1296 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1297 cando_by_name(S_IWUSR,0,elt) ) {
1298 MgTAINTEDDIR_on(mg);
1302 if ((cp = strchr(elt, ':')) != NULL)
1304 if (my_trnlnm(elt, eltbuf, j++))
1310 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1313 if (s && memEQs(key, klen, "PATH")) {
1314 const char * const strend = s + len;
1315 #ifdef __VMS /* Hmm. How do we get $Config{path_sep} from C? */
1316 const char path_sep = PL_perllib_sep;
1318 const char path_sep = ':';
1322 /* Does this apply for VMS?
1323 * Empty PATH on linux is treated same as ".", which is forbidden
1324 * under taint. So check if the PATH variable is empty. */
1326 MgTAINTEDDIR_on(mg);
1330 /* set MGf_TAINTEDDIR if any component of the new path is
1331 * relative or world-writeable */
1332 while (s < strend) {
1336 s = delimcpy_no_escape(tmpbuf, tmpbuf + sizeof tmpbuf,
1337 s, strend, path_sep, &i);
1339 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1341 /* no colon thus no device name -- assume relative path */
1342 || (PL_perllib_sep != ':' && !strchr(tmpbuf, ':'))
1343 /* Using Unix separator, e.g. under bash, so act line Unix */
1344 || (PL_perllib_sep == ':' && *tmpbuf != '/')
1346 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1347 || s == strend /* trailing empty component -- same as "." */
1349 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1350 MgTAINTEDDIR_on(mg);
1356 #endif /* neither OS2 nor WIN32 */
1362 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1364 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1365 PERL_UNUSED_ARG(sv);
1366 my_setenv(MgPV_nolen_const(mg),NULL);
1371 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1373 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1374 PERL_UNUSED_ARG(mg);
1376 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1378 if (PL_localizing) {
1381 hv_iterinit(MUTABLE_HV(sv));
1382 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1384 my_setenv(hv_iterkey(entry, &keylen),
1385 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1393 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1395 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1396 PERL_UNUSED_ARG(sv);
1397 PERL_UNUSED_ARG(mg);
1399 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1407 #ifdef HAS_SIGPROCMASK
1409 restore_sigmask(pTHX_ SV *save_sv)
1411 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1412 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1416 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1418 /* Are we fetching a signal entry? */
1419 int i = (I16)mg->mg_private;
1421 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1425 const char * sig = MgPV_const(mg, siglen);
1426 mg->mg_private = i = whichsig_pvn(sig, siglen);
1431 sv_setsv(sv,PL_psig_ptr[i]);
1433 Sighandler_t sigstate = rsignal_state(i);
1434 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1435 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1438 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1439 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1442 /* cache state so we don't fetch it again */
1443 if(sigstate == (Sighandler_t) SIG_IGN)
1444 sv_setpvs(sv,"IGNORE");
1447 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1454 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1456 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1458 magic_setsig(NULL, mg);
1459 return sv_unmagic(sv, mg->mg_type);
1463 #ifdef PERL_USE_3ARG_SIGHANDLER
1465 Perl_csighandler(int sig, Siginfo_t *sip, void *uap)
1467 Perl_csighandler3(sig, sip, uap);
1471 Perl_csighandler(int sig)
1473 Perl_csighandler3(sig, NULL, NULL);
1478 Perl_csighandler1(int sig)
1480 Perl_csighandler3(sig, NULL, NULL);
1483 /* Handler intended to directly handle signal calls from the kernel.
1484 * (Depending on configuration, the kernel may actually call one of the
1485 * wrappers csighandler() or csighandler1() instead.)
1486 * It either queues up the signal or dispatches it immediately depending
1487 * on whether safe signals are enabled and whether the signal is capable
1488 * of being deferred (e.g. SEGV isn't).
1492 Perl_csighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1494 #ifdef PERL_GET_SIG_CONTEXT
1495 dTHXa(PERL_GET_SIG_CONTEXT);
1500 #ifdef PERL_USE_3ARG_SIGHANDLER
1501 #if defined(__cplusplus) && defined(__GNUC__)
1502 /* g++ doesn't support PERL_UNUSED_DECL, so the sip and uap
1503 * parameters would be warned about. */
1504 PERL_UNUSED_ARG(sip);
1505 PERL_UNUSED_ARG(uap);
1509 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1510 (void) rsignal(sig, PL_csighandlerp);
1511 if (PL_sig_ignoring[sig]) return;
1513 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1514 if (PL_sig_defaulting[sig])
1515 #ifdef KILL_BY_SIGPRC
1516 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1534 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1535 /* Call the perl level handler now--
1536 * with risk we may be in malloc() or being destructed etc. */
1538 if (PL_sighandlerp == Perl_sighandler)
1539 /* default handler, so can call perly_sighandler() directly
1540 * rather than via Perl_sighandler, passing the extra
1541 * 'safe = false' arg
1543 Perl_perly_sighandler(sig, NULL, NULL, 0 /* unsafe */);
1545 #ifdef PERL_USE_3ARG_SIGHANDLER
1546 (*PL_sighandlerp)(sig, NULL, NULL);
1548 (*PL_sighandlerp)(sig);
1552 if (!PL_psig_pend) return;
1553 /* Set a flag to say this signal is pending, that is awaiting delivery after
1554 * the current Perl opcode completes */
1555 PL_psig_pend[sig]++;
1557 #ifndef SIG_PENDING_DIE_COUNT
1558 # define SIG_PENDING_DIE_COUNT 120
1560 /* Add one to say _a_ signal is pending */
1561 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1562 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1563 (unsigned long)SIG_PENDING_DIE_COUNT);
1567 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1569 Perl_csighandler_init(void)
1572 if (PL_sig_handlers_initted) return;
1574 for (sig = 1; sig < SIG_SIZE; sig++) {
1575 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1577 PL_sig_defaulting[sig] = 1;
1578 (void) rsignal(sig, PL_csighandlerp);
1580 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1581 PL_sig_ignoring[sig] = 0;
1584 PL_sig_handlers_initted = 1;
1588 #if defined HAS_SIGPROCMASK
1590 unblock_sigmask(pTHX_ void* newset)
1592 PERL_UNUSED_CONTEXT;
1593 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1598 Perl_despatch_signals(pTHX)
1602 for (sig = 1; sig < SIG_SIZE; sig++) {
1603 if (PL_psig_pend[sig]) {
1605 #ifdef HAS_SIGPROCMASK
1606 /* From sigaction(2) (FreeBSD man page):
1607 * | Signal routines normally execute with the signal that
1608 * | caused their invocation blocked, but other signals may
1610 * Emulation of this behavior (from within Perl) is enabled
1614 sigset_t newset, oldset;
1616 sigemptyset(&newset);
1617 sigaddset(&newset, sig);
1618 sigprocmask(SIG_BLOCK, &newset, &oldset);
1619 was_blocked = sigismember(&oldset, sig);
1621 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1623 SAVEFREESV(save_sv);
1624 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1627 PL_psig_pend[sig] = 0;
1628 if (PL_sighandlerp == Perl_sighandler)
1629 /* default handler, so can call perly_sighandler() directly
1630 * rather than via Perl_sighandler, passing the extra
1633 Perl_perly_sighandler(sig, NULL, NULL, 1 /* safe */);
1635 #ifdef PERL_USE_3ARG_SIGHANDLER
1636 (*PL_sighandlerp)(sig, NULL, NULL);
1638 (*PL_sighandlerp)(sig);
1641 #ifdef HAS_SIGPROCMASK
1650 /* sv of NULL signifies that we're acting as magic_clearsig. */
1652 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1656 /* Need to be careful with SvREFCNT_dec(), because that can have side
1657 * effects (due to closures). We must make sure that the new disposition
1658 * is in place before it is called.
1662 #ifdef HAS_SIGPROCMASK
1666 const char *s = MgPV_const(mg,len);
1668 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1671 if (memEQs(s, len, "__DIE__"))
1673 else if (memEQs(s, len, "__WARN__")
1674 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1675 /* Merge the existing behaviours, which are as follows:
1676 magic_setsig, we always set svp to &PL_warnhook
1677 (hence we always change the warnings handler)
1678 For magic_clearsig, we don't change the warnings handler if it's
1679 set to the &PL_warnhook. */
1682 SV *tmp = sv_newmortal();
1683 Perl_croak(aTHX_ "No such hook: %s",
1684 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1688 if (*svp != PERL_WARNHOOK_FATAL)
1694 i = (I16)mg->mg_private;
1696 i = whichsig_pvn(s, len); /* ...no, a brick */
1697 mg->mg_private = (U16)i;
1701 SV *tmp = sv_newmortal();
1702 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1703 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1707 #ifdef HAS_SIGPROCMASK
1708 /* Avoid having the signal arrive at a bad time, if possible. */
1711 sigprocmask(SIG_BLOCK, &set, &save);
1713 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1714 SAVEFREESV(save_sv);
1715 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1718 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1719 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1721 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1722 PL_sig_ignoring[i] = 0;
1724 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1725 PL_sig_defaulting[i] = 0;
1727 to_dec = PL_psig_ptr[i];
1729 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1730 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1732 /* Signals don't change name during the program's execution, so once
1733 they're cached in the appropriate slot of PL_psig_name, they can
1736 Ideally we'd find some way of making SVs at (C) compile time, or
1737 at least, doing most of the work. */
1738 if (!PL_psig_name[i]) {
1739 const char* name = PL_sig_name[i];
1740 PL_psig_name[i] = newSVpvn(name, strlen(name));
1741 SvREADONLY_on(PL_psig_name[i]);
1744 SvREFCNT_dec(PL_psig_name[i]);
1745 PL_psig_name[i] = NULL;
1746 PL_psig_ptr[i] = NULL;
1749 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1751 (void)rsignal(i, PL_csighandlerp);
1754 *svp = SvREFCNT_inc_simple_NN(sv);
1756 if (sv && SvOK(sv)) {
1757 s = SvPV_force(sv, len);
1761 if (sv && memEQs(s, len,"IGNORE")) {
1763 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1764 PL_sig_ignoring[i] = 1;
1765 (void)rsignal(i, PL_csighandlerp);
1767 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1771 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1773 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1774 PL_sig_defaulting[i] = 1;
1775 (void)rsignal(i, PL_csighandlerp);
1777 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1783 * We should warn if HINT_STRICT_REFS, but without
1784 * access to a known hint bit in a known OP, we can't
1785 * tell whether HINT_STRICT_REFS is in force or not.
1787 if (!memchr(s, ':', len) && !memchr(s, '\'', len))
1788 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1791 (void)rsignal(i, PL_csighandlerp);
1793 *svp = SvREFCNT_inc_simple_NN(sv);
1797 #ifdef HAS_SIGPROCMASK
1801 SvREFCNT_dec(to_dec);
1804 #endif /* !PERL_MICRO */
1807 Perl_magic_setsigall(pTHX_ SV* sv, MAGIC* mg)
1809 PERL_ARGS_ASSERT_MAGIC_SETSIGALL;
1810 PERL_UNUSED_ARG(mg);
1812 if (PL_localizing == 2) {
1816 while ((current = hv_iternext(hv))) {
1817 SV* sigelem = hv_iterval(hv, current);
1825 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1827 PERL_ARGS_ASSERT_MAGIC_SETISA;
1828 PERL_UNUSED_ARG(sv);
1830 /* Skip _isaelem because _isa will handle it shortly */
1831 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1834 return magic_clearisa(NULL, mg);
1837 /* sv of NULL signifies that we're acting as magic_setisa. */
1839 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1842 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1844 /* Bail out if destruction is going on */
1845 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1848 av_clear(MUTABLE_AV(sv));
1850 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1851 /* This occurs with setisa_elem magic, which calls this
1853 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1856 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1857 SV **svp = AvARRAY((AV *)mg->mg_obj);
1858 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1860 stash = GvSTASH((GV *)*svp++);
1861 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1868 (const GV *)mg->mg_obj
1871 /* The stash may have been detached from the symbol table, so check its
1872 name before doing anything. */
1873 if (stash && HvENAME_get(stash))
1874 mro_isa_changed_in(stash);
1880 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1882 HV * const hv = MUTABLE_HV(LvTARG(sv));
1885 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1886 PERL_UNUSED_ARG(mg);
1889 (void) hv_iterinit(hv);
1890 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1893 while (hv_iternext(hv))
1898 sv_setiv(sv, (IV)i);
1903 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1905 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1906 PERL_UNUSED_ARG(mg);
1908 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1914 =for apidoc_section $magic
1915 =for apidoc magic_methcall
1917 Invoke a magic method (like FETCH).
1919 C<sv> and C<mg> are the tied thingy and the tie magic.
1921 C<meth> is the name of the method to call.
1923 C<argc> is the number of args (in addition to $self) to pass to the method.
1925 The C<flags> can be:
1927 G_DISCARD invoke method with G_DISCARD flag and don't
1929 G_UNDEF_FILL fill the stack with argc pointers to
1932 The arguments themselves are any values following the C<flags> argument.
1934 Returns the SV (if any) returned by the method, or C<NULL> on failure.
1941 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1947 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1951 if (flags & G_WRITING_TO_STDERR) {
1955 SAVESPTR(PL_stderrgv);
1959 PUSHSTACKi(PERLSI_MAGIC);
1962 /* EXTEND() expects a signed argc; don't wrap when casting */
1963 assert(argc <= I32_MAX);
1964 EXTEND(SP, (I32)argc+1);
1965 PUSHs(SvTIED_obj(sv, mg));
1966 if (flags & G_UNDEF_FILL) {
1968 PUSHs(&PL_sv_undef);
1970 } else if (argc > 0) {
1972 va_start(args, argc);
1975 SV *const this_sv = va_arg(args, SV *);
1982 if (flags & G_DISCARD) {
1983 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
1986 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
1987 ret = *PL_stack_sp--;
1990 if (flags & G_WRITING_TO_STDERR)
1996 /* wrapper for magic_methcall that creates the first arg */
1999 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
2004 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
2007 if (mg->mg_len >= 0) {
2008 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
2010 else if (mg->mg_len == HEf_SVKEY)
2011 arg1 = MUTABLE_SV(mg->mg_ptr);
2013 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
2014 arg1 = newSViv((IV)(mg->mg_len));
2018 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
2020 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
2024 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
2028 PERL_ARGS_ASSERT_MAGIC_METHPACK;
2030 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
2037 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
2039 PERL_ARGS_ASSERT_MAGIC_GETPACK;
2041 if (mg->mg_type == PERL_MAGIC_tiedelem)
2042 mg->mg_flags |= MGf_GSKIP;
2043 magic_methpack(sv,mg,SV_CONST(FETCH));
2048 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
2053 PERL_ARGS_ASSERT_MAGIC_SETPACK;
2055 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
2056 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
2057 * public flags indicate its value based on copying from $val. Doing
2058 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
2059 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
2060 * wrong if $val happened to be tainted, as sv hasn't got magic
2061 * enabled, even though taint magic is in the chain. In which case,
2062 * fake up a temporary tainted value (this is easier than temporarily
2063 * re-enabling magic on sv). */
2065 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
2066 && (tmg->mg_len & 1))
2068 val = sv_mortalcopy(sv);
2074 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
2079 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
2081 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
2083 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
2084 return magic_methpack(sv,mg,SV_CONST(DELETE));
2089 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
2094 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
2096 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
2098 retval = SvIV(retsv)-1;
2100 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
2102 return (U32) retval;
2106 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
2108 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
2110 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
2115 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
2119 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
2121 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
2122 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
2129 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
2131 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
2133 return magic_methpack(sv,mg,SV_CONST(EXISTS));
2137 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
2140 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
2141 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
2143 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
2145 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
2147 if (HvEITER_get(hv))
2148 /* we are in an iteration so the hash cannot be empty */
2150 /* no xhv_eiter so now use FIRSTKEY */
2151 key = sv_newmortal();
2152 magic_nextpack(MUTABLE_SV(hv), mg, key);
2153 HvEITER_set(hv, NULL); /* need to reset iterator */
2154 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
2157 /* there is a SCALAR method that we can call */
2158 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
2160 retval = &PL_sv_undef;
2165 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
2169 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
2171 /* The magic ptr/len for the debugger's hash should always be an SV. */
2172 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
2173 Perl_croak(aTHX_ "panic: magic_setdbline len=%" IVdf ", ptr='%s'",
2174 (IV)mg->mg_len, mg->mg_ptr);
2177 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
2178 setting/clearing debugger breakpoints is not a hot path. */
2179 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
2180 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2182 if (svp && SvIOKp(*svp)) {
2183 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2185 #ifdef PERL_DEBUG_READONLY_OPS
2186 Slab_to_rw(OpSLAB(o));
2188 /* set or clear breakpoint in the relevant control op */
2190 o->op_flags |= OPf_SPECIAL;
2192 o->op_flags &= ~OPf_SPECIAL;
2193 #ifdef PERL_DEBUG_READONLY_OPS
2194 Slab_to_ro(OpSLAB(o));
2202 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2204 AV * const obj = MUTABLE_AV(mg->mg_obj);
2206 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2209 sv_setiv(sv, AvFILL(obj));
2217 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2219 AV * const obj = MUTABLE_AV(mg->mg_obj);
2221 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2224 av_fill(obj, SvIV(sv));
2226 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2227 "Attempt to set length of freed array");
2233 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2235 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2236 PERL_UNUSED_ARG(sv);
2237 PERL_UNUSED_CONTEXT;
2239 /* Reset the iterator when the array is cleared */
2240 if (sizeof(IV) == sizeof(SSize_t)) {
2241 *((IV *) &(mg->mg_len)) = 0;
2244 *((IV *) mg->mg_ptr) = 0;
2251 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2253 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2254 PERL_UNUSED_ARG(sv);
2256 /* during global destruction, mg_obj may already have been freed */
2257 if (PL_in_clean_all)
2260 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2263 /* arylen scalar holds a pointer back to the array, but doesn't own a
2264 reference. Hence the we (the array) are about to go away with it
2265 still pointing at us. Clear its pointer, else it would be pointing
2266 at free memory. See the comment in sv_magic about reference loops,
2267 and why it can't own a reference to us. */
2274 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2276 SV* const lsv = LvTARG(sv);
2277 MAGIC * const found = mg_find_mglob(lsv);
2279 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2280 PERL_UNUSED_ARG(mg);
2282 if (found && found->mg_len != -1) {
2283 STRLEN i = found->mg_len;
2284 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2285 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2294 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2296 SV* const lsv = LvTARG(sv);
2302 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2303 PERL_UNUSED_ARG(mg);
2305 found = mg_find_mglob(lsv);
2309 found = sv_magicext_mglob(lsv);
2311 else if (!SvOK(sv)) {
2315 s = SvPV_const(lsv, len);
2320 const STRLEN ulen = sv_or_pv_len_utf8(lsv, s, len);
2330 else if (pos > (SSize_t)len)
2333 found->mg_len = pos;
2334 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2340 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2343 SV * const lsv = LvTARG(sv);
2344 const char * const tmps = SvPV_const(lsv,len);
2345 STRLEN offs = LvTARGOFF(sv);
2346 STRLEN rem = LvTARGLEN(sv);
2347 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2348 const bool negrem = LvFLAGS(sv) & LVf_NEG_LEN;
2350 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2351 PERL_UNUSED_ARG(mg);
2353 if (!translate_substr_offsets(
2354 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2355 negoff ? -(IV)offs : (IV)offs, !negoff,
2356 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2358 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2364 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2365 sv_setpvn(sv, tmps + offs, rem);
2372 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2374 STRLEN len, lsv_len, oldtarglen, newtarglen;
2375 const char * const tmps = SvPV_const(sv, len);
2376 SV * const lsv = LvTARG(sv);
2377 STRLEN lvoff = LvTARGOFF(sv);
2378 STRLEN lvlen = LvTARGLEN(sv);
2379 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2380 const bool neglen = LvFLAGS(sv) & LVf_NEG_LEN;
2382 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2383 PERL_UNUSED_ARG(mg);
2387 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2388 "Attempt to use reference as lvalue in substr"
2390 SvPV_force_nomg(lsv,lsv_len);
2391 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2392 if (!translate_substr_offsets(
2394 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2395 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2397 Perl_croak(aTHX_ "substr outside of string");
2400 sv_utf8_upgrade_nomg(lsv);
2401 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2402 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2403 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2406 else if (SvUTF8(lsv)) {
2408 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2410 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2411 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2415 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2418 if (!neglen) LvTARGLEN(sv) = newtarglen;
2419 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2425 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2427 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2428 PERL_UNUSED_ARG(sv);
2429 #ifdef NO_TAINT_SUPPORT
2430 PERL_UNUSED_ARG(mg);
2433 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1) && IN_PERL_RUNTIME);
2438 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2440 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2441 PERL_UNUSED_ARG(sv);
2443 /* update taint status */
2452 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2454 SV * const lsv = LvTARG(sv);
2455 char errflags = LvFLAGS(sv);
2457 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2458 PERL_UNUSED_ARG(mg);
2460 /* non-zero errflags implies deferred out-of-range condition */
2461 assert(!(errflags & ~(LVf_NEG_OFF|LVf_OUT_OF_RANGE)));
2462 sv_setuv(sv, errflags ? 0 : do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2468 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2470 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2471 PERL_UNUSED_ARG(mg);
2472 do_vecset(sv); /* XXX slurp this routine */
2477 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2480 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2481 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2483 if (LvTARGLEN(sv)) {
2485 SV * const ahv = LvTARG(sv);
2486 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2490 else if (LvSTARGOFF(sv) >= 0) {
2491 AV *const av = MUTABLE_AV(LvTARG(sv));
2492 if (LvSTARGOFF(sv) <= AvFILL(av))
2494 if (SvRMAGICAL(av)) {
2495 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2496 targ = svp ? *svp : NULL;
2499 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2502 if (targ && (targ != &PL_sv_undef)) {
2503 /* somebody else defined it for us */
2504 SvREFCNT_dec(LvTARG(sv));
2505 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2507 SvREFCNT_dec(mg->mg_obj);
2509 mg->mg_flags &= ~MGf_REFCOUNTED;
2518 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2520 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2522 sv_setsv(sv, defelem_target(sv, mg));
2527 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2529 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2530 PERL_UNUSED_ARG(mg);
2534 sv_setsv(LvTARG(sv), sv);
2535 SvSETMAGIC(LvTARG(sv));
2541 Perl_vivify_defelem(pTHX_ SV *sv)
2546 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2548 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2551 SV * const ahv = LvTARG(sv);
2552 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2555 if (!value || value == &PL_sv_undef)
2556 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2558 else if (LvSTARGOFF(sv) < 0)
2559 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2561 AV *const av = MUTABLE_AV(LvTARG(sv));
2562 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2563 LvTARG(sv) = NULL; /* array can't be extended */
2565 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2566 if (!svp || !(value = *svp))
2567 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2570 SvREFCNT_inc_simple_void(value);
2571 SvREFCNT_dec(LvTARG(sv));
2574 SvREFCNT_dec(mg->mg_obj);
2576 mg->mg_flags &= ~MGf_REFCOUNTED;
2580 Perl_magic_setnonelem(pTHX_ SV *sv, MAGIC *mg)
2582 PERL_ARGS_ASSERT_MAGIC_SETNONELEM;
2583 PERL_UNUSED_ARG(mg);
2584 sv_unmagic(sv, PERL_MAGIC_nonelem);
2589 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2591 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2592 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2597 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2599 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2600 PERL_UNUSED_CONTEXT;
2601 PERL_UNUSED_ARG(sv);
2608 Perl_magic_freemglob(pTHX_ SV *sv, MAGIC *mg)
2610 PERL_ARGS_ASSERT_MAGIC_FREEMGLOB;
2611 PERL_UNUSED_ARG(sv);
2613 /* pos() magic uses mg_len as a string position rather than a buffer
2614 * length, and mg_ptr is currently unused, so skip freeing.
2616 assert(mg->mg_type == PERL_MAGIC_regex_global && mg->mg_len >= -1);
2623 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2625 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2627 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2629 if (uf && uf->uf_set)
2630 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2635 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2637 const char type = mg->mg_type;
2639 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2641 assert( type == PERL_MAGIC_fm
2642 || type == PERL_MAGIC_qr
2643 || type == PERL_MAGIC_bm);
2644 return sv_unmagic(sv, type);
2647 #ifdef USE_LOCALE_COLLATE
2649 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2651 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2654 * RenE<eacute> Descartes said "I think not."
2655 * and vanished with a faint plop.
2657 PERL_UNUSED_CONTEXT;
2658 PERL_UNUSED_ARG(sv);
2660 Safefree(mg->mg_ptr);
2668 Perl_magic_freecollxfrm(pTHX_ SV *sv, MAGIC *mg)
2670 PERL_ARGS_ASSERT_MAGIC_FREECOLLXFRM;
2671 PERL_UNUSED_ARG(sv);
2673 /* Collate magic uses mg_len as a string length rather than a buffer
2674 * length, so we need to free even with mg_len == 0: hence we can't
2675 * rely on standard magic free handling */
2676 if (mg->mg_len >= 0) {
2677 assert(mg->mg_type == PERL_MAGIC_collxfrm);
2678 Safefree(mg->mg_ptr);
2684 #endif /* USE_LOCALE_COLLATE */
2686 /* Just clear the UTF-8 cache data. */
2688 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2690 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2691 PERL_UNUSED_CONTEXT;
2692 PERL_UNUSED_ARG(sv);
2693 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2695 mg->mg_len = -1; /* The mg_len holds the len cache. */
2700 Perl_magic_freeutf8(pTHX_ SV *sv, MAGIC *mg)
2702 PERL_ARGS_ASSERT_MAGIC_FREEUTF8;
2703 PERL_UNUSED_ARG(sv);
2705 /* utf8 magic uses mg_len as a string length rather than a buffer
2706 * length, so we need to free even with mg_len == 0: hence we can't
2707 * rely on standard magic free handling */
2708 assert(mg->mg_type == PERL_MAGIC_utf8 && mg->mg_len >= -1);
2709 Safefree(mg->mg_ptr);
2716 Perl_magic_setlvref(pTHX_ SV *sv, MAGIC *mg)
2718 const char *bad = NULL;
2719 PERL_ARGS_ASSERT_MAGIC_SETLVREF;
2720 if (!SvROK(sv)) Perl_croak(aTHX_ "Assigned value is not a reference");
2721 switch (mg->mg_private & OPpLVREF_TYPE) {
2723 if (SvTYPE(SvRV(sv)) > SVt_PVLV)
2727 if (SvTYPE(SvRV(sv)) != SVt_PVAV)
2731 if (SvTYPE(SvRV(sv)) != SVt_PVHV)
2735 if (SvTYPE(SvRV(sv)) != SVt_PVCV)
2739 /* diag_listed_as: Assigned value is not %s reference */
2740 Perl_croak(aTHX_ "Assigned value is not a%s reference", bad);
2741 switch (mg->mg_obj ? SvTYPE(mg->mg_obj) : 0) {
2744 SV * const old = PAD_SV(mg->mg_len);
2745 PAD_SETSV(mg->mg_len, SvREFCNT_inc_NN(SvRV(sv)));
2750 gv_setref(mg->mg_obj, sv);
2751 SvSETMAGIC(mg->mg_obj);
2754 av_store((AV *)mg->mg_obj, SvIV((SV *)mg->mg_ptr),
2755 SvREFCNT_inc_simple_NN(SvRV(sv)));
2758 (void)hv_store_ent((HV *)mg->mg_obj, (SV *)mg->mg_ptr,
2759 SvREFCNT_inc_simple_NN(SvRV(sv)), 0);
2761 if (mg->mg_flags & MGf_PERSIST)
2762 NOOP; /* This sv is in use as an iterator var and will be reused,
2763 so we must leave the magic. */
2765 /* This sv could be returned by the assignment op, so clear the
2766 magic, as lvrefs are an implementation detail that must not be
2767 leaked to the user. */
2768 sv_unmagic(sv, PERL_MAGIC_lvref);
2773 S_set_dollarzero(pTHX_ SV *sv)
2774 PERL_TSA_REQUIRES(PL_dollarzero_mutex)
2778 #ifdef HAS_SETPROCTITLE
2779 /* The BSDs don't show the argv[] in ps(1) output, they
2780 * show a string from the process struct and provide
2781 * the setproctitle() routine to manipulate that. */
2782 if (PL_origalen != 1) {
2783 s = SvPV_const(sv, len);
2784 # if __FreeBSD_version > 410001 || defined(__DragonFly__)
2785 /* The leading "-" removes the "perl: " prefix,
2786 * but not the "(perl) suffix from the ps(1)
2787 * output, because that's what ps(1) shows if the
2788 * argv[] is modified. */
2789 setproctitle("-%s", s);
2790 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2791 /* This doesn't really work if you assume that
2792 * $0 = 'foobar'; will wipe out 'perl' from the $0
2793 * because in ps(1) output the result will be like
2794 * sprintf("perl: %s (perl)", s)
2795 * I guess this is a security feature:
2796 * one (a user process) cannot get rid of the original name.
2798 setproctitle("%s", s);
2801 #elif defined(__hpux) && defined(PSTAT_SETCMD)
2802 if (PL_origalen != 1) {
2804 s = SvPV_const(sv, len);
2805 un.pst_command = (char *)s;
2806 pstat(PSTAT_SETCMD, un, len, 0, 0);
2809 if (PL_origalen > 1) {
2811 /* PL_origalen is set in perl_parse(). */
2812 s = SvPV_force(sv,len);
2813 if (len >= (STRLEN)PL_origalen-1) {
2814 /* Longer than original, will be truncated. We assume that
2815 * PL_origalen bytes are available. */
2816 Copy(s, PL_origargv[0], PL_origalen-1, char);
2819 /* Shorter than original, will be padded. */
2821 /* Special case for Mac OS X: see [perl #38868] */
2824 /* Is the space counterintuitive? Yes.
2825 * (You were expecting \0?)
2826 * Does it work? Seems to. (In Linux 2.4.20 at least.)
2828 const int pad = ' ';
2830 Copy(s, PL_origargv[0], len, char);
2831 PL_origargv[0][len] = 0;
2832 memset(PL_origargv[0] + len + 1,
2833 pad, PL_origalen - len - 1);
2835 PL_origargv[0][PL_origalen-1] = 0;
2836 for (i = 1; i < PL_origargc; i++)
2838 #ifdef HAS_PRCTL_SET_NAME
2839 /* Set the legacy process name in addition to the POSIX name on Linux */
2840 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
2841 /* diag_listed_as: SKIPME */
2842 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
2850 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2858 PERL_ARGS_ASSERT_MAGIC_SET;
2862 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2864 CALLREG_NUMBUF_STORE((REGEXP *)rx,paren,sv);
2866 /* Croak with a READONLY error when a numbered match var is
2867 * set without a previous pattern match. Unless it's C<local $1>
2870 if (!PL_localizing) {
2871 Perl_croak_no_modify();
2877 switch (*mg->mg_ptr) {
2878 case '\001': /* ^A */
2879 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2880 else SvOK_off(PL_bodytarget);
2881 FmLINES(PL_bodytarget) = 0;
2882 if (SvPOK(PL_bodytarget)) {
2883 char *s = SvPVX(PL_bodytarget);
2884 char *e = SvEND(PL_bodytarget);
2885 while ( ((s = (char *) memchr(s, '\n', e - s))) ) {
2886 FmLINES(PL_bodytarget)++;
2890 /* mg_set() has temporarily made sv non-magical */
2892 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2893 SvTAINTED_on(PL_bodytarget);
2895 SvTAINTED_off(PL_bodytarget);
2898 case '\003': /* ^C */
2899 PL_minus_c = cBOOL(SvIV(sv));
2902 case '\004': /* ^D */
2905 const char *s = SvPV_nolen_const(sv);
2906 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2907 if (DEBUG_x_TEST || DEBUG_B_TEST)
2908 dump_all_perl(!DEBUG_B_TEST);
2911 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2914 case '\005': /* ^E */
2915 if (*(mg->mg_ptr+1) == '\0') {
2917 set_vaxc_errno(SvIV(sv));
2918 #elif defined(WIN32)
2919 SetLastError( SvIV(sv) );
2921 os2_setsyserrno(SvIV(sv));
2923 /* will anyone ever use this? */
2924 SETERRNO(SvIV(sv), 4);
2927 else if (strEQ(mg->mg_ptr + 1, "NCODING") && SvOK(sv))
2928 Perl_croak(aTHX_ "${^ENCODING} is no longer supported");
2930 case '\006': /* ^F */
2931 if (mg->mg_ptr[1] == '\0') {
2932 PL_maxsysfd = SvIV(sv);
2935 case '\010': /* ^H */
2937 U32 save_hints = PL_hints;
2938 PL_hints = SvUV(sv);
2940 /* If wasn't UTF-8, and now is, notify the parser */
2941 if ((PL_hints & HINT_UTF8) && ! (save_hints & HINT_UTF8)) {
2942 notify_parser_that_changed_to_utf8();
2946 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2947 Safefree(PL_inplace);
2948 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2950 case '\016': /* ^N */
2951 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2952 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2954 case '\017': /* ^O */
2955 if (*(mg->mg_ptr+1) == '\0') {
2956 Safefree(PL_osname);
2959 TAINT_PROPER("assigning to $^O");
2960 PL_osname = savesvpv(sv);
2963 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2965 const char *const start = SvPV(sv, len);
2966 const char *out = (const char*)memchr(start, '\0', len);
2970 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2971 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2973 /* Opening for input is more common than opening for output, so
2974 ensure that hints for input are sooner on linked list. */
2975 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2977 : newSVpvs_flags("", SvUTF8(sv));
2978 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2981 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2983 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2987 case '\020': /* ^P */
2988 PL_perldb = SvIV(sv);
2989 if (PL_perldb && !PL_DBsingle)
2992 case '\024': /* ^T */
2994 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2996 PL_basetime = (Time_t)SvIV(sv);
2999 case '\025': /* ^UTF8CACHE */
3000 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
3001 PL_utf8cache = (signed char) sv_2iv(sv);
3004 case '\027': /* ^W & $^WARNING_BITS */
3005 if (*(mg->mg_ptr+1) == '\0') {
3006 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3008 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
3009 | (i ? G_WARN_ON : G_WARN_OFF) ;
3012 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
3013 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3015 free_and_set_cop_warnings(&PL_compiling, pWARN_STD);
3020 int not_none = 0, not_all = 0;
3021 const U8 * const ptr = (const U8 *)SvPV_const(sv, len) ;
3022 for (i = 0 ; i < len ; ++i) {
3024 not_all |= ptr[i] ^ 0x55;
3027 free_and_set_cop_warnings(&PL_compiling, pWARN_NONE);
3028 } else if (len >= WARNsize && !not_all) {
3029 free_and_set_cop_warnings(&PL_compiling, pWARN_ALL);
3030 PL_dowarn |= G_WARN_ONCE ;
3034 const char *const p = SvPV_const(sv, len);
3036 PL_compiling.cop_warnings
3037 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
3040 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
3041 PL_dowarn |= G_WARN_ONCE ;
3049 if (PL_localizing) {
3050 if (PL_localizing == 1)
3051 SAVESPTR(PL_last_in_gv);
3053 else if (SvOK(sv) && GvIO(PL_last_in_gv))
3054 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
3057 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
3058 IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3059 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3062 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
3063 IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3064 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3067 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
3070 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
3071 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
3072 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
3075 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
3079 IO * const io = GvIO(PL_defoutgv);
3082 if ((SvIV(sv)) == 0)
3083 IoFLAGS(io) &= ~IOf_FLUSH;
3085 if (!(IoFLAGS(io) & IOf_FLUSH)) {
3086 PerlIO *ofp = IoOFP(io);
3088 (void)PerlIO_flush(ofp);
3089 IoFLAGS(io) |= IOf_FLUSH;
3097 SV *referent = SvRV(sv);
3098 const char *reftype = sv_reftype(referent, 0);
3099 /* XXX: dodgy type check: This leaves me feeling dirty, but
3100 * the alternative is to copy pretty much the entire
3101 * sv_reftype() into this routine, or to do a full string
3102 * comparison on the return of sv_reftype() both of which
3103 * make me feel worse! NOTE, do not modify this comment
3104 * without reviewing the corresponding comment in
3105 * sv_reftype(). - Yves */
3106 if (reftype[0] == 'S' || reftype[0] == 'L') {
3107 IV val = SvIV(referent);
3109 sv_setsv(sv, PL_rs);
3110 Perl_croak(aTHX_ "Setting $/ to a reference to %s is forbidden",
3111 val < 0 ? "a negative integer" : "zero");
3114 sv_setsv(sv, PL_rs);
3115 /* diag_listed_as: Setting $/ to %s reference is forbidden */
3116 Perl_croak(aTHX_ "Setting $/ to a%s %s reference is forbidden",
3117 *reftype == 'A' ? "n" : "", reftype);
3120 SvREFCNT_dec(PL_rs);
3121 PL_rs = newSVsv(sv);
3125 SvREFCNT_dec(PL_ors_sv);
3127 PL_ors_sv = newSVsv(sv);
3135 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
3138 #ifdef COMPLEX_STATUS
3139 if (PL_localizing == 2) {
3140 SvUPGRADE(sv, SVt_PVLV);
3141 PL_statusvalue = LvTARGOFF(sv);
3142 PL_statusvalue_vms = LvTARGLEN(sv);
3146 #ifdef VMSISH_STATUS
3148 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
3151 STATUS_UNIX_EXIT_SET(SvIV(sv));
3156 # define PERL_VMS_BANG vaxc$errno
3158 # define PERL_VMS_BANG 0
3161 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
3162 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3164 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
3165 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3171 /* XXX $< currently silently ignores failures */
3172 const Uid_t new_uid = SvUID(sv);
3173 PL_delaymagic_uid = new_uid;
3174 if (PL_delaymagic) {
3175 PL_delaymagic |= DM_RUID;
3176 break; /* don't do magic till later */
3179 PERL_UNUSED_RESULT(setruid(new_uid));
3180 #elif defined(HAS_SETREUID)
3181 PERL_UNUSED_RESULT(setreuid(new_uid, (Uid_t)-1));
3182 #elif defined(HAS_SETRESUID)
3183 PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1));
3185 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
3187 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
3188 if (new_uid != 0 && PerlProc_getuid() == 0)
3189 PERL_UNUSED_RESULT(PerlProc_setuid(0));
3191 PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
3193 Perl_croak(aTHX_ "setruid() not implemented");
3200 /* XXX $> currently silently ignores failures */
3201 const Uid_t new_euid = SvUID(sv);
3202 PL_delaymagic_euid = new_euid;
3203 if (PL_delaymagic) {
3204 PL_delaymagic |= DM_EUID;
3205 break; /* don't do magic till later */
3208 PERL_UNUSED_RESULT(seteuid(new_euid));
3209 #elif defined(HAS_SETREUID)
3210 PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid));
3211 #elif defined(HAS_SETRESUID)
3212 PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1));
3214 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
3215 PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
3217 Perl_croak(aTHX_ "seteuid() not implemented");
3224 /* XXX $( currently silently ignores failures */
3225 const Gid_t new_gid = SvGID(sv);
3226 PL_delaymagic_gid = new_gid;
3227 if (PL_delaymagic) {
3228 PL_delaymagic |= DM_RGID;
3229 break; /* don't do magic till later */
3232 PERL_UNUSED_RESULT(setrgid(new_gid));
3233 #elif defined(HAS_SETREGID)
3234 PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1));
3235 #elif defined(HAS_SETRESGID)
3236 PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1));
3238 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
3239 PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
3241 Perl_croak(aTHX_ "setrgid() not implemented");
3248 /* (hv) best guess: maybe we'll need configure probes to do a better job,
3249 * but you can override it if you need to.
3252 #define INVALID_GID ((Gid_t)-1)
3254 /* XXX $) currently silently ignores failures */
3256 #ifdef HAS_SETGROUPS
3258 const char *p = SvPV_const(sv, len);
3259 Groups_t *gary = NULL;
3260 const char* p_end = p + len;
3261 const char* endptr = p_end;
3263 #ifdef _SC_NGROUPS_MAX
3264 int maxgrp = sysconf(_SC_NGROUPS_MAX);
3269 int maxgrp = NGROUPS;
3274 if (grok_atoUV(p, &uv, &endptr))
3275 new_egid = (Gid_t)uv;
3277 new_egid = INVALID_GID;
3280 for (i = 0; i < maxgrp; ++i) {
3290 Newx(gary, i + 1, Groups_t);
3292 Renew(gary, i + 1, Groups_t);
3293 if (grok_atoUV(p, &uv, &endptr))
3294 gary[i] = (Groups_t)uv;
3296 gary[i] = INVALID_GID;
3301 PERL_UNUSED_RESULT(setgroups(i, gary));
3304 #else /* HAS_SETGROUPS */
3305 new_egid = SvGID(sv);
3306 #endif /* HAS_SETGROUPS */
3307 PL_delaymagic_egid = new_egid;
3308 if (PL_delaymagic) {
3309 PL_delaymagic |= DM_EGID;
3310 break; /* don't do magic till later */
3313 PERL_UNUSED_RESULT(setegid(new_egid));
3314 #elif defined(HAS_SETREGID)
3315 PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid));
3316 #elif defined(HAS_SETRESGID)
3317 PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1));
3319 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
3320 PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
3322 Perl_croak(aTHX_ "setegid() not implemented");
3328 PL_chopset = SvPV_force(sv,len);
3331 /* Store the pid in mg->mg_obj so we can tell when a fork has
3332 occurred. mg->mg_obj points to *$ by default, so clear it. */
3333 if (isGV(mg->mg_obj)) {
3334 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
3335 SvREFCNT_dec(mg->mg_obj);
3336 mg->mg_flags |= MGf_REFCOUNTED;
3337 mg->mg_obj = newSViv((IV)PerlProc_getpid());
3339 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
3342 if (!sv_utf8_downgrade(sv, /* fail_ok */ TRUE)) {
3344 /* Since we are going to set the string's UTF8-encoded form
3345 as the process name we should update $0 itself to contain
3346 that same (UTF8-encoded) value. */
3347 sv_utf8_encode(GvSV(mg->mg_obj));
3349 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "$0");
3352 LOCK_DOLLARZERO_MUTEX;
3353 S_set_dollarzero(aTHX_ sv);
3354 UNLOCK_DOLLARZERO_MUTEX;
3361 =for apidoc_section $signals
3362 =for apidoc whichsig
3363 =for apidoc_item whichsig_pv
3364 =for apidoc_item whichsig_pvn
3365 =for apidoc_item whichsig_sv
3367 These all convert a signal name into its corresponding signal number;
3368 returning -1 if no corresponding number was found.
3370 They differ only in the source of the signal name:
3372 C<whichsig_pv> takes the name from the C<NUL>-terminated string starting at
3375 C<whichsig> is merely a different spelling, a synonym, of C<whichsig_pv>.
3377 C<whichsig_pvn> takes the name from the string starting at C<sig>, with length
3380 C<whichsig_sv> takes the name from the PV stored in the SV C<sigsv>.
3386 Perl_whichsig_sv(pTHX_ SV *sigsv)
3390 PERL_ARGS_ASSERT_WHICHSIG_SV;
3391 sigpv = SvPV_const(sigsv, siglen);
3392 return whichsig_pvn(sigpv, siglen);
3396 Perl_whichsig_pv(pTHX_ const char *sig)
3398 PERL_ARGS_ASSERT_WHICHSIG_PV;
3399 return whichsig_pvn(sig, strlen(sig));
3403 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3407 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3408 PERL_UNUSED_CONTEXT;
3410 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3411 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3412 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3414 if (memEQs(sig, len, "CHLD"))
3418 if (memEQs(sig, len, "CLD"))
3425 /* Perl_sighandler(), Perl_sighandler1(), Perl_sighandler3():
3426 * these three function are intended to be called by the OS as 'C' level
3427 * signal handler functions in the case where unsafe signals are being
3428 * used - i.e. they immediately invoke Perl_perly_sighandler() to call the
3429 * perl-level sighandler, rather than deferring.
3430 * In fact, the core itself will normally use Perl_csighandler as the
3431 * OS-level handler; that function will then decide whether to queue the
3432 * signal or call Perl_sighandler / Perl_perly_sighandler itself. So these
3433 * functions are more useful for e.g. POSIX.xs when it wants explicit
3434 * control of what's happening.
3438 #ifdef PERL_USE_3ARG_SIGHANDLER
3441 Perl_sighandler(int sig, Siginfo_t *sip, void *uap)
3443 Perl_perly_sighandler(sig, sip, uap, 0);
3449 Perl_sighandler(int sig)
3451 Perl_perly_sighandler(sig, NULL, NULL, 0);
3457 Perl_sighandler1(int sig)
3459 Perl_perly_sighandler(sig, NULL, NULL, 0);
3463 Perl_sighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
3465 Perl_perly_sighandler(sig, sip, uap, 0);
3469 /* Invoke the perl-level signal handler. This function is called either
3470 * directly from one of the C-level signals handlers (Perl_sighandler or
3471 * Perl_csighandler), or for safe signals, later from
3472 * Perl_despatch_signals() at a suitable safe point during execution.
3474 * 'safe' is a boolean indicating the latter call path.
3478 Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL,
3479 void *uap PERL_UNUSED_DECL, bool safe)
3481 #ifdef PERL_GET_SIG_CONTEXT
3482 dTHXa(PERL_GET_SIG_CONTEXT);
3489 SV * const tSv = PL_Sv;
3493 XPV * const tXpv = PL_Xpv;
3494 I32 old_ss_ix = PL_savestack_ix;
3495 SV *errsv_save = NULL;
3498 if (!PL_psig_ptr[sig]) {
3499 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3504 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3505 /* Max number of items pushed there is 3*n or 4. We cannot fix
3506 infinity, so we fix 4 (in fact 5): */
3507 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3509 PL_savestack_ix += 5; /* Protect save in progress. */
3510 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3513 /* sv_2cv is too complicated, try a simpler variant first: */
3514 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3515 || SvTYPE(cv) != SVt_PVCV) {
3517 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3520 if (!cv || !CvROOT(cv)) {
3521 const HEK * const hek = gv
3525 : cv && CvGV(cv) ? GvENAME_HEK(CvGV(cv)) : NULL;
3527 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3528 "SIG%s handler \"%" HEKf "\" not defined.\n",
3529 PL_sig_name[sig], HEKfARG(hek));
3530 /* diag_listed_as: SIG%s handler "%s" not defined */
3531 else Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3532 "SIG%s handler \"__ANON__\" not defined.\n",
3537 sv = PL_psig_name[sig]
3538 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3539 : newSVpv(PL_sig_name[sig],0);
3543 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3544 /* make sure our assumption about the size of the SAVEs are correct:
3545 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3546 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3549 PUSHSTACKi(PERLSI_SIGNAL);
3553 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3555 struct sigaction oact;
3557 if (sip && sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3559 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3560 /* The siginfo fields signo, code, errno, pid, uid,
3561 * addr, status, and band are defined by POSIX/SUSv3. */
3562 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3563 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3564 # ifdef HAS_SIGINFO_SI_ERRNO
3565 (void)hv_stores(sih, "errno", newSViv(sip->si_errno));
3567 # ifdef HAS_SIGINFO_SI_STATUS
3568 (void)hv_stores(sih, "status", newSViv(sip->si_status));
3570 # ifdef HAS_SIGINFO_SI_UID
3573 sv_setuid(uid, sip->si_uid);
3574 (void)hv_stores(sih, "uid", uid);
3577 # ifdef HAS_SIGINFO_SI_PID
3578 (void)hv_stores(sih, "pid", newSViv(sip->si_pid));
3580 # ifdef HAS_SIGINFO_SI_ADDR
3581 (void)hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3583 # ifdef HAS_SIGINFO_SI_BAND
3584 (void)hv_stores(sih, "band", newSViv(sip->si_band));
3588 mPUSHp((char *)sip, sizeof(*sip));
3596 errsv_save = newSVsv(ERRSV);
3598 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3602 SV * const errsv = ERRSV;
3603 if (SvTRUE_NN(errsv)) {
3604 SvREFCNT_dec(errsv_save);
3607 /* Handler "died", for example to get out of a restart-able read().
3608 * Before we re-do that on its behalf re-enable the signal which was
3609 * blocked by the system when we entered.
3611 # ifdef HAS_SIGPROCMASK
3613 /* safe signals called via dispatch_signals() set up a
3614 * savestack destructor, unblock_sigmask(), to
3615 * automatically unblock the handler at the end. If
3616 * instead we get here directly, we have to do it
3621 sigaddset(&set,sig);
3622 sigprocmask(SIG_UNBLOCK, &set, NULL);
3625 /* Not clear if this will work */
3626 /* XXX not clear if this should be protected by 'if (safe)'
3629 (void)rsignal(sig, SIG_IGN);
3630 (void)rsignal(sig, PL_csighandlerp);
3632 #endif /* !PERL_MICRO */
3637 sv_setsv(errsv, errsv_save);
3638 SvREFCNT_dec(errsv_save);
3643 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3644 PL_savestack_ix = old_ss_ix;
3646 SvREFCNT_dec_NN(sv);
3647 PL_op = myop; /* Apparently not needed... */
3649 PL_Sv = tSv; /* Restore global temporaries. */
3656 S_restore_magic(pTHX_ const void *p)
3658 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3659 SV* const sv = mgs->mgs_sv;
3665 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3666 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3668 SvFLAGS(sv) |= mgs->mgs_flags;
3673 bumped = mgs->mgs_bumped;
3674 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3676 /* If we're still on top of the stack, pop us off. (That condition
3677 * will be satisfied if restore_magic was called explicitly, but *not*
3678 * if it's being called via leave_scope.)
3679 * The reason for doing this is that otherwise, things like sv_2cv()
3680 * may leave alloc gunk on the savestack, and some code
3681 * (e.g. sighandler) doesn't expect that...
3683 if (PL_savestack_ix == mgs->mgs_ss_ix)
3685 UV popval = SSPOPUV;
3686 assert(popval == SAVEt_DESTRUCTOR_X);
3687 PL_savestack_ix -= 2;
3689 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3690 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3693 if (SvREFCNT(sv) == 1) {
3694 /* We hold the last reference to this SV, which implies that the
3695 SV was deleted as a side effect of the routines we called.
3696 So artificially keep it alive a bit longer.
3697 We avoid turning on the TEMP flag, which can cause the SV's
3698 buffer to get stolen (and maybe other stuff). */
3703 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3707 /* clean up the mess created by Perl_sighandler().
3708 * Note that this is only called during an exit in a signal handler;
3709 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3713 S_unwind_handler_stack(pTHX_ const void *p)
3717 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3721 =for apidoc_section $magic
3722 =for apidoc magic_sethint
3724 Triggered by a store to C<%^H>, records the key/value pair to
3725 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3726 anything that would need a deep copy. Maybe we should warn if we find a
3732 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3734 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3735 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3737 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3739 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3740 an alternative leaf in there, with PL_compiling.cop_hints being used if
3741 it's NULL. If needed for threads, the alternative could lock a mutex,
3742 or take other more complex action. */
3744 /* Something changed in %^H, so it will need to be restored on scope exit.
3745 Doing this here saves a lot of doing it manually in perl code (and
3746 forgetting to do it, and consequent subtle errors. */
3747 PL_hints |= HINT_LOCALIZE_HH;
3748 CopHINTHASH_set(&PL_compiling,
3749 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3750 magic_sethint_feature(key, NULL, 0, sv, 0);
3755 =for apidoc magic_clearhint
3757 Triggered by a delete from C<%^H>, records the key to
3758 C<PL_compiling.cop_hints_hash>.
3763 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3765 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3766 PERL_UNUSED_ARG(sv);
3768 PL_hints |= HINT_LOCALIZE_HH;
3769 CopHINTHASH_set(&PL_compiling,
3770 mg->mg_len == HEf_SVKEY
3771 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3772 MUTABLE_SV(mg->mg_ptr), 0, 0)
3773 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3774 mg->mg_ptr, mg->mg_len, 0, 0));
3775 if (mg->mg_len == HEf_SVKEY)
3776 magic_sethint_feature(MUTABLE_SV(mg->mg_ptr), NULL, 0, NULL, FALSE);
3778 magic_sethint_feature(NULL, mg->mg_ptr, mg->mg_len, NULL, FALSE);
3783 =for apidoc magic_clearhints
3785 Triggered by clearing C<%^H>, resets C<PL_compiling.cop_hints_hash>.
3790 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3792 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3793 PERL_UNUSED_ARG(sv);
3794 PERL_UNUSED_ARG(mg);
3795 cophh_free(CopHINTHASH_get(&PL_compiling));
3796 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3802 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3803 const char *name, I32 namlen)
3807 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3808 PERL_UNUSED_ARG(sv);
3809 PERL_UNUSED_ARG(name);
3810 PERL_UNUSED_ARG(namlen);
3812 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3813 nmg = mg_find(nsv, mg->mg_type);
3815 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3816 nmg->mg_ptr = mg->mg_ptr;
3817 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3818 nmg->mg_flags |= MGf_REFCOUNTED;
3823 Perl_magic_setdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3824 PERL_ARGS_ASSERT_MAGIC_SETDEBUGVAR;
3826 #if DBVARMG_SINGLE != 0
3827 assert(mg->mg_private >= DBVARMG_SINGLE);
3829 assert(mg->mg_private < DBVARMG_COUNT);
3831 PL_DBcontrol[mg->mg_private] = SvIV_nomg(sv);
3837 Perl_magic_getdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3838 PERL_ARGS_ASSERT_MAGIC_GETDEBUGVAR;
3840 #if DBVARMG_SINGLE != 0
3841 assert(mg->mg_private >= DBVARMG_SINGLE);
3843 assert(mg->mg_private < DBVARMG_COUNT);
3844 sv_setiv(sv, PL_DBcontrol[mg->mg_private]);
3850 * ex: set ts=8 sts=4 sw=4 et: