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);
778 /* In some locales the error string may come back as UTF-8, in which
779 * case we should turn on that flag. This didn't use to happen, and to
780 * avoid as many possible backward compatibility issues as possible, we
781 * don't turn on the flag unless we have to. So the flag stays off for
782 * an entirely invariant string. We assume that if the string looks
783 * like UTF-8 in a single script, it really is UTF-8: "text in any
784 * other encoding that uses bytes with the high bit set is extremely
785 * unlikely to pass a UTF-8 validity test"
786 * (http://en.wikipedia.org/wiki/Charset_detection). There is a
787 * potential that we will get it wrong however, especially on short
788 * error message text, so do an additional check. */
789 if ( ! IN_BYTES /* respect 'use bytes' */
790 && is_utf8_non_invariant_string((U8*) SvPVX_const(sv), SvCUR(sv))
792 #ifdef USE_LOCALE_MESSAGES
794 && _is_cur_LC_category_utf8(LC_MESSAGES)
796 #else /* If can't check directly, at least can see if script is consistent,
797 under UTF-8, which gives us an extra measure of confidence. */
799 && isSCRIPT_RUN((const U8 *) SvPVX_const(sv), (U8 *) SvEND(sv),
800 TRUE) /* Means assume UTF-8 */
810 =for apidoc_section $errno
811 =for apidoc sv_string_from_errnum
813 Generates the message string describing an OS error and returns it as
814 an SV. C<errnum> must be a value that C<errno> could take, identifying
817 If C<tgtsv> is non-null then the string will be written into that SV
818 (overwriting existing content) and it will be returned. If C<tgtsv>
819 is a null pointer then the string will be written into a new mortal SV
820 which will be returned.
822 The message will be taken from whatever locale would be used by C<$!>,
823 and will be encoded in the SV in whatever manner would be used by C<$!>.
824 The details of this process are subject to future change. Currently,
825 the message is taken from the C locale by default (usually producing an
826 English message), and from the currently selected locale when in the scope
827 of the C<use locale> pragma. A heuristic attempt is made to decode the
828 message from the locale's character encoding, but it will only be decoded
829 as either UTF-8 or ISO-8859-1. It is always correctly decoded in a UTF-8
830 locale, usually in an ISO-8859-1 locale, and never in any other locale.
832 The SV is always returned containing an actual string, and with no other
833 OK bits set. Unlike C<$!>, a message is even yielded for C<errnum> zero
834 (meaning success), and if no useful message is available then a useless
835 string (currently empty) is returned.
841 Perl_sv_string_from_errnum(pTHX_ int errnum, SV *tgtsv)
845 tgtsv = newSV_type_mortal(SVt_PV);
846 errstr = my_strerror(errnum);
848 sv_setpv(tgtsv, errstr);
849 fixup_errno_string(tgtsv);
862 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
865 const char *s = NULL;
869 PERL_ARGS_ASSERT_MAGIC_GET;
871 const char * const remaining = (mg->mg_ptr)
877 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
879 CALLREG_NUMBUF_FETCH(rx,paren,sv);
886 nextchar = *remaining;
887 switch (*mg->mg_ptr) {
888 case '\001': /* ^A */
889 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
892 if (SvTAINTED(PL_bodytarget))
895 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
896 if (nextchar == '\0') {
897 sv_setiv(sv, (IV)PL_minus_c);
899 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
900 sv_setiv(sv, (IV)STATUS_NATIVE);
904 case '\004': /* ^D */
905 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
907 case '\005': /* ^E */
908 if (nextchar != '\0') {
909 if (strEQ(remaining, "NCODING"))
914 #if defined(VMS) || defined(OS2) || defined(WIN32)
918 $DESCRIPTOR(msgdsc,msg);
919 sv_setnv(sv,(NV) vaxc$errno);
920 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
921 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
926 if (!(_emx_env & 0x200)) { /* Under DOS */
927 sv_setnv(sv, (NV)errno);
928 sv_setpv(sv, errno ? my_strerror(errno) : "");
930 if (errno != errno_isOS2) {
931 const int tmp = _syserrno();
932 if (tmp) /* 2nd call to _syserrno() makes it 0 */
935 sv_setnv(sv, (NV)Perl_rc);
936 sv_setpv(sv, os2error(Perl_rc));
938 if (SvOK(sv) && strNE(SvPVX(sv), "")) {
939 fixup_errno_string(sv);
941 # elif defined(WIN32)
943 const DWORD dwErr = GetLastError();
944 sv_setnv(sv, (NV)dwErr);
946 PerlProc_GetOSError(sv, dwErr);
947 fixup_errno_string(sv);
954 # error Missing code for platform
957 SvNOK_on(sv); /* what a wonderful hack! */
959 #endif /* End of platforms with special handling for $^E; others just fall
967 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
969 sv_setnv(sv, (NV)errno);
972 if (errno == errno_isOS2 || errno == errno_isOS2_set)
973 sv_setpv(sv, os2error(Perl_rc));
980 sv_string_from_errnum(errno, sv);
981 /* If no useful string is available, don't
982 * claim to have a string part. The SvNOK_on()
983 * below will cause just the number part to be valid */
991 SvNOK_on(sv); /* what a wonderful hack! */
994 case '\006': /* ^F */
995 if (nextchar == '\0') {
996 sv_setiv(sv, (IV)PL_maxsysfd);
999 case '\007': /* ^GLOBAL_PHASE */
1000 if (strEQ(remaining, "LOBAL_PHASE")) {
1001 sv_setpvn(sv, PL_phase_names[PL_phase],
1002 strlen(PL_phase_names[PL_phase]));
1005 case '\010': /* ^H */
1006 sv_setuv(sv, PL_hints);
1008 case '\011': /* ^I */ /* NOT \t in EBCDIC */
1009 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
1011 case '\014': /* ^LAST_FH */
1012 if (strEQ(remaining, "AST_FH")) {
1013 if (PL_last_in_gv && (SV*)PL_last_in_gv != &PL_sv_undef) {
1014 assert(isGV_with_GP(PL_last_in_gv));
1015 sv_setrv_inc(sv, MUTABLE_SV(PL_last_in_gv));
1022 case '\017': /* ^O & ^OPEN */
1023 if (nextchar == '\0') {
1024 sv_setpv(sv, PL_osname);
1027 else if (strEQ(remaining, "PEN")) {
1028 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
1032 sv_setiv(sv, (IV)PL_perldb);
1034 case '\023': /* ^S */
1035 if (nextchar == '\0') {
1036 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
1038 else if (PL_in_eval)
1039 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
1043 else if (strEQ(remaining, "AFE_LOCALES")) {
1045 #if ! defined(USE_ITHREADS) || defined(USE_THREAD_SAFE_LOCALE)
1047 sv_setuv(sv, (UV) 1);
1050 sv_setuv(sv, (UV) 0);
1056 case '\024': /* ^T */
1057 if (nextchar == '\0') {
1059 sv_setnv(sv, PL_basetime);
1061 sv_setiv(sv, (IV)PL_basetime);
1064 else if (strEQ(remaining, "AINT"))
1065 sv_setiv(sv, TAINTING_get
1066 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
1069 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
1070 if (strEQ(remaining, "NICODE"))
1071 sv_setuv(sv, (UV) PL_unicode);
1072 else if (strEQ(remaining, "TF8LOCALE"))
1073 sv_setuv(sv, (UV) PL_utf8locale);
1074 else if (strEQ(remaining, "TF8CACHE"))
1075 sv_setiv(sv, (IV) PL_utf8cache);
1077 case '\027': /* ^W & $^WARNING_BITS */
1078 if (nextchar == '\0')
1079 sv_setiv(sv, (IV)cBOOL(PL_dowarn & G_WARN_ON));
1080 else if (strEQ(remaining, "ARNING_BITS")) {
1081 if (PL_compiling.cop_warnings == pWARN_NONE) {
1082 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
1084 else if (PL_compiling.cop_warnings == pWARN_STD) {
1087 else if (PL_compiling.cop_warnings == pWARN_ALL) {
1088 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1091 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
1092 *PL_compiling.cop_warnings);
1097 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1098 paren = RX_LASTPAREN(rx);
1100 goto do_numbuf_fetch;
1103 case '\016': /* ^N */
1104 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1105 paren = RX_LASTCLOSEPAREN(rx);
1107 goto do_numbuf_fetch;
1111 if (GvIO(PL_last_in_gv)) {
1112 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1117 sv_setiv(sv, (IV)STATUS_CURRENT);
1118 #ifdef COMPLEX_STATUS
1119 SvUPGRADE(sv, SVt_PVLV);
1120 LvTARGOFF(sv) = PL_statusvalue;
1121 LvTARGLEN(sv) = PL_statusvalue_vms;
1126 if (GvIOp(PL_defoutgv))
1127 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1131 sv_setpv(sv,GvENAME(PL_defoutgv));
1132 sv_catpvs(sv,"_TOP");
1136 if (GvIOp(PL_defoutgv))
1137 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1139 s = GvENAME(PL_defoutgv);
1143 if (GvIO(PL_defoutgv))
1144 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1147 if (GvIO(PL_defoutgv))
1148 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1151 if (GvIO(PL_defoutgv))
1152 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1161 if (GvIO(PL_defoutgv))
1162 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1166 sv_copypv(sv, PL_ors_sv);
1172 IV const pid = (IV)PerlProc_getpid();
1173 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1174 /* never set manually, or at least not since last fork */
1176 /* never unsafe, even if reading in a tainted expression */
1179 /* else a value has been assigned manually, so do nothing */
1183 sv_setuid(sv, PerlProc_getuid());
1186 sv_setuid(sv, PerlProc_geteuid());
1189 sv_setgid(sv, PerlProc_getgid());
1192 sv_setgid(sv, PerlProc_getegid());
1194 #ifdef HAS_GETGROUPS
1196 Groups_t *gary = NULL;
1197 I32 num_groups = getgroups(0, gary);
1198 if (num_groups > 0) {
1200 Newx(gary, num_groups, Groups_t);
1201 num_groups = getgroups(num_groups, gary);
1202 for (i = 0; i < num_groups; i++)
1203 Perl_sv_catpvf(aTHX_ sv, " %" IVdf, (IV)gary[i]);
1209 Set this to avoid warnings when the SV is used as a number.
1210 Avoid setting the public IOK flag so that serializers will
1213 (void)SvIOKp_on(sv); /* what a wonderful hack! */
1227 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1229 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1231 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1233 if (uf && uf->uf_val)
1234 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1239 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1241 STRLEN len = 0, klen;
1246 SV *keysv = MgSV(mg);
1248 if (keysv == NULL) {
1253 if (!sv_utf8_downgrade(keysv, /* fail_ok */ TRUE)) {
1254 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv key (encoding to utf8)");
1257 key = SvPV_const(keysv,klen);
1260 PERL_ARGS_ASSERT_MAGIC_SETENV;
1264 /* defined environment variables are byte strings; unfortunately
1265 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1266 (void)SvPV_force_nomg_nolen(sv);
1267 (void)sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1269 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1275 my_setenv(key, s); /* does the deed */
1277 #ifdef DYNAMIC_ENV_FETCH
1278 /* We just undefd an environment var. Is a replacement */
1279 /* waiting in the wings? */
1281 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1283 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1287 #if !defined(OS2) && !defined(WIN32)
1288 /* And you'll never guess what the dog had */
1289 /* in its mouth... */
1291 MgTAINTEDDIR_off(mg);
1293 if (s && memEQs(key, klen, "DCL$PATH")) {
1294 char pathbuf[256], eltbuf[256], *cp, *elt;
1297 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1299 do { /* DCL$PATH may be a search list */
1300 while (1) { /* as may dev portion of any element */
1301 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1302 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1303 cando_by_name(S_IWUSR,0,elt) ) {
1304 MgTAINTEDDIR_on(mg);
1308 if ((cp = strchr(elt, ':')) != NULL)
1310 if (my_trnlnm(elt, eltbuf, j++))
1316 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1319 if (s && memEQs(key, klen, "PATH")) {
1320 const char * const strend = s + len;
1321 #ifdef __VMS /* Hmm. How do we get $Config{path_sep} from C? */
1322 const char path_sep = PL_perllib_sep;
1324 const char path_sep = ':';
1328 /* Does this apply for VMS?
1329 * Empty PATH on linux is treated same as ".", which is forbidden
1330 * under taint. So check if the PATH variable is empty. */
1332 MgTAINTEDDIR_on(mg);
1336 /* set MGf_TAINTEDDIR if any component of the new path is
1337 * relative or world-writeable */
1338 while (s < strend) {
1342 s = delimcpy_no_escape(tmpbuf, tmpbuf + sizeof tmpbuf,
1343 s, strend, path_sep, &i);
1345 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1347 /* no colon thus no device name -- assume relative path */
1348 || (PL_perllib_sep != ':' && !strchr(tmpbuf, ':'))
1349 /* Using Unix separator, e.g. under bash, so act line Unix */
1350 || (PL_perllib_sep == ':' && *tmpbuf != '/')
1352 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1353 || s == strend /* trailing empty component -- same as "." */
1355 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1356 MgTAINTEDDIR_on(mg);
1362 #endif /* neither OS2 nor WIN32 */
1368 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1370 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1371 PERL_UNUSED_ARG(sv);
1372 my_setenv(MgPV_nolen_const(mg),NULL);
1377 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1379 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1380 PERL_UNUSED_ARG(mg);
1382 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1384 if (PL_localizing) {
1387 hv_iterinit(MUTABLE_HV(sv));
1388 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1390 my_setenv(hv_iterkey(entry, &keylen),
1391 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1399 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1401 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1402 PERL_UNUSED_ARG(sv);
1403 PERL_UNUSED_ARG(mg);
1405 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1413 #ifdef HAS_SIGPROCMASK
1415 restore_sigmask(pTHX_ SV *save_sv)
1417 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1418 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1422 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1424 /* Are we fetching a signal entry? */
1425 int i = (I16)mg->mg_private;
1427 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1431 const char * sig = MgPV_const(mg, siglen);
1432 mg->mg_private = i = whichsig_pvn(sig, siglen);
1437 sv_setsv(sv,PL_psig_ptr[i]);
1439 Sighandler_t sigstate = rsignal_state(i);
1440 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1441 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1444 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1445 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1448 /* cache state so we don't fetch it again */
1449 if(sigstate == (Sighandler_t) SIG_IGN)
1450 sv_setpvs(sv,"IGNORE");
1453 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1460 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1462 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1464 magic_setsig(NULL, mg);
1465 return sv_unmagic(sv, mg->mg_type);
1469 #ifdef PERL_USE_3ARG_SIGHANDLER
1471 Perl_csighandler(int sig, Siginfo_t *sip, void *uap)
1473 Perl_csighandler3(sig, sip, uap);
1477 Perl_csighandler(int sig)
1479 Perl_csighandler3(sig, NULL, NULL);
1484 Perl_csighandler1(int sig)
1486 Perl_csighandler3(sig, NULL, NULL);
1489 /* Handler intended to directly handle signal calls from the kernel.
1490 * (Depending on configuration, the kernel may actually call one of the
1491 * wrappers csighandler() or csighandler1() instead.)
1492 * It either queues up the signal or dispatches it immediately depending
1493 * on whether safe signals are enabled and whether the signal is capable
1494 * of being deferred (e.g. SEGV isn't).
1498 Perl_csighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1500 #ifdef PERL_GET_SIG_CONTEXT
1501 dTHXa(PERL_GET_SIG_CONTEXT);
1506 #ifdef PERL_USE_3ARG_SIGHANDLER
1507 #if defined(__cplusplus) && defined(__GNUC__)
1508 /* g++ doesn't support PERL_UNUSED_DECL, so the sip and uap
1509 * parameters would be warned about. */
1510 PERL_UNUSED_ARG(sip);
1511 PERL_UNUSED_ARG(uap);
1515 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1516 (void) rsignal(sig, PL_csighandlerp);
1517 if (PL_sig_ignoring[sig]) return;
1519 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1520 if (PL_sig_defaulting[sig])
1521 #ifdef KILL_BY_SIGPRC
1522 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1540 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1541 /* Call the perl level handler now--
1542 * with risk we may be in malloc() or being destructed etc. */
1544 if (PL_sighandlerp == Perl_sighandler)
1545 /* default handler, so can call perly_sighandler() directly
1546 * rather than via Perl_sighandler, passing the extra
1547 * 'safe = false' arg
1549 Perl_perly_sighandler(sig, NULL, NULL, 0 /* unsafe */);
1551 #ifdef PERL_USE_3ARG_SIGHANDLER
1552 (*PL_sighandlerp)(sig, NULL, NULL);
1554 (*PL_sighandlerp)(sig);
1558 if (!PL_psig_pend) return;
1559 /* Set a flag to say this signal is pending, that is awaiting delivery after
1560 * the current Perl opcode completes */
1561 PL_psig_pend[sig]++;
1563 #ifndef SIG_PENDING_DIE_COUNT
1564 # define SIG_PENDING_DIE_COUNT 120
1566 /* Add one to say _a_ signal is pending */
1567 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1568 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1569 (unsigned long)SIG_PENDING_DIE_COUNT);
1573 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1575 Perl_csighandler_init(void)
1578 if (PL_sig_handlers_initted) return;
1580 for (sig = 1; sig < SIG_SIZE; sig++) {
1581 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1583 PL_sig_defaulting[sig] = 1;
1584 (void) rsignal(sig, PL_csighandlerp);
1586 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1587 PL_sig_ignoring[sig] = 0;
1590 PL_sig_handlers_initted = 1;
1594 #if defined HAS_SIGPROCMASK
1596 unblock_sigmask(pTHX_ void* newset)
1598 PERL_UNUSED_CONTEXT;
1599 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1604 Perl_despatch_signals(pTHX)
1608 for (sig = 1; sig < SIG_SIZE; sig++) {
1609 if (PL_psig_pend[sig]) {
1611 #ifdef HAS_SIGPROCMASK
1612 /* From sigaction(2) (FreeBSD man page):
1613 * | Signal routines normally execute with the signal that
1614 * | caused their invocation blocked, but other signals may
1616 * Emulation of this behavior (from within Perl) is enabled
1620 sigset_t newset, oldset;
1622 sigemptyset(&newset);
1623 sigaddset(&newset, sig);
1624 sigprocmask(SIG_BLOCK, &newset, &oldset);
1625 was_blocked = sigismember(&oldset, sig);
1627 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1629 SAVEFREESV(save_sv);
1630 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1633 PL_psig_pend[sig] = 0;
1634 if (PL_sighandlerp == Perl_sighandler)
1635 /* default handler, so can call perly_sighandler() directly
1636 * rather than via Perl_sighandler, passing the extra
1639 Perl_perly_sighandler(sig, NULL, NULL, 1 /* safe */);
1641 #ifdef PERL_USE_3ARG_SIGHANDLER
1642 (*PL_sighandlerp)(sig, NULL, NULL);
1644 (*PL_sighandlerp)(sig);
1647 #ifdef HAS_SIGPROCMASK
1656 /* sv of NULL signifies that we're acting as magic_clearsig. */
1658 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1662 /* Need to be careful with SvREFCNT_dec(), because that can have side
1663 * effects (due to closures). We must make sure that the new disposition
1664 * is in place before it is called.
1668 #ifdef HAS_SIGPROCMASK
1672 const char *s = MgPV_const(mg,len);
1674 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1677 if (memEQs(s, len, "__DIE__"))
1679 else if (memEQs(s, len, "__WARN__")
1680 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1681 /* Merge the existing behaviours, which are as follows:
1682 magic_setsig, we always set svp to &PL_warnhook
1683 (hence we always change the warnings handler)
1684 For magic_clearsig, we don't change the warnings handler if it's
1685 set to the &PL_warnhook. */
1688 SV *tmp = sv_newmortal();
1689 Perl_croak(aTHX_ "No such hook: %s",
1690 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1694 if (*svp != PERL_WARNHOOK_FATAL)
1700 i = (I16)mg->mg_private;
1702 i = whichsig_pvn(s, len); /* ...no, a brick */
1703 mg->mg_private = (U16)i;
1707 SV *tmp = sv_newmortal();
1708 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1709 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1713 #ifdef HAS_SIGPROCMASK
1714 /* Avoid having the signal arrive at a bad time, if possible. */
1717 sigprocmask(SIG_BLOCK, &set, &save);
1719 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1720 SAVEFREESV(save_sv);
1721 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1724 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1725 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1727 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1728 PL_sig_ignoring[i] = 0;
1730 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1731 PL_sig_defaulting[i] = 0;
1733 to_dec = PL_psig_ptr[i];
1735 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1736 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1738 /* Signals don't change name during the program's execution, so once
1739 they're cached in the appropriate slot of PL_psig_name, they can
1742 Ideally we'd find some way of making SVs at (C) compile time, or
1743 at least, doing most of the work. */
1744 if (!PL_psig_name[i]) {
1745 const char* name = PL_sig_name[i];
1746 PL_psig_name[i] = newSVpvn(name, strlen(name));
1747 SvREADONLY_on(PL_psig_name[i]);
1750 SvREFCNT_dec(PL_psig_name[i]);
1751 PL_psig_name[i] = NULL;
1752 PL_psig_ptr[i] = NULL;
1755 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1757 (void)rsignal(i, PL_csighandlerp);
1760 *svp = SvREFCNT_inc_simple_NN(sv);
1762 if (sv && SvOK(sv)) {
1763 s = SvPV_force(sv, len);
1767 if (sv && memEQs(s, len,"IGNORE")) {
1769 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1770 PL_sig_ignoring[i] = 1;
1771 (void)rsignal(i, PL_csighandlerp);
1773 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1777 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1779 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1780 PL_sig_defaulting[i] = 1;
1781 (void)rsignal(i, PL_csighandlerp);
1783 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1789 * We should warn if HINT_STRICT_REFS, but without
1790 * access to a known hint bit in a known OP, we can't
1791 * tell whether HINT_STRICT_REFS is in force or not.
1793 if (!memchr(s, ':', len) && !memchr(s, '\'', len))
1794 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1797 (void)rsignal(i, PL_csighandlerp);
1799 *svp = SvREFCNT_inc_simple_NN(sv);
1803 #ifdef HAS_SIGPROCMASK
1807 SvREFCNT_dec(to_dec);
1810 #endif /* !PERL_MICRO */
1813 Perl_magic_setsigall(pTHX_ SV* sv, MAGIC* mg)
1815 PERL_ARGS_ASSERT_MAGIC_SETSIGALL;
1816 PERL_UNUSED_ARG(mg);
1818 if (PL_localizing == 2) {
1822 while ((current = hv_iternext(hv))) {
1823 SV* sigelem = hv_iterval(hv, current);
1831 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1833 PERL_ARGS_ASSERT_MAGIC_SETISA;
1834 PERL_UNUSED_ARG(sv);
1836 /* Skip _isaelem because _isa will handle it shortly */
1837 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1840 return magic_clearisa(NULL, mg);
1843 /* sv of NULL signifies that we're acting as magic_setisa. */
1845 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1848 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1850 /* Bail out if destruction is going on */
1851 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1854 av_clear(MUTABLE_AV(sv));
1856 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1857 /* This occurs with setisa_elem magic, which calls this
1859 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1862 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1863 SV **svp = AvARRAY((AV *)mg->mg_obj);
1864 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1866 stash = GvSTASH((GV *)*svp++);
1867 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1874 (const GV *)mg->mg_obj
1877 /* The stash may have been detached from the symbol table, so check its
1878 name before doing anything. */
1879 if (stash && HvENAME_get(stash))
1880 mro_isa_changed_in(stash);
1886 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1888 HV * const hv = MUTABLE_HV(LvTARG(sv));
1891 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1892 PERL_UNUSED_ARG(mg);
1895 (void) hv_iterinit(hv);
1896 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1899 while (hv_iternext(hv))
1904 sv_setiv(sv, (IV)i);
1909 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1911 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1912 PERL_UNUSED_ARG(mg);
1914 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1920 =for apidoc_section $magic
1921 =for apidoc magic_methcall
1923 Invoke a magic method (like FETCH).
1925 C<sv> and C<mg> are the tied thingy and the tie magic.
1927 C<meth> is the name of the method to call.
1929 C<argc> is the number of args (in addition to $self) to pass to the method.
1931 The C<flags> can be:
1933 G_DISCARD invoke method with G_DISCARD flag and don't
1935 G_UNDEF_FILL fill the stack with argc pointers to
1938 The arguments themselves are any values following the C<flags> argument.
1940 Returns the SV (if any) returned by the method, or C<NULL> on failure.
1947 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1953 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1957 if (flags & G_WRITING_TO_STDERR) {
1961 SAVESPTR(PL_stderrgv);
1965 PUSHSTACKi(PERLSI_MAGIC);
1968 /* EXTEND() expects a signed argc; don't wrap when casting */
1969 assert(argc <= I32_MAX);
1970 EXTEND(SP, (I32)argc+1);
1971 PUSHs(SvTIED_obj(sv, mg));
1972 if (flags & G_UNDEF_FILL) {
1974 PUSHs(&PL_sv_undef);
1976 } else if (argc > 0) {
1978 va_start(args, argc);
1981 SV *const this_sv = va_arg(args, SV *);
1988 if (flags & G_DISCARD) {
1989 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
1992 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
1993 ret = *PL_stack_sp--;
1996 if (flags & G_WRITING_TO_STDERR)
2002 /* wrapper for magic_methcall that creates the first arg */
2005 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
2010 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
2013 if (mg->mg_len >= 0) {
2014 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
2016 else if (mg->mg_len == HEf_SVKEY)
2017 arg1 = MUTABLE_SV(mg->mg_ptr);
2019 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
2020 arg1 = newSViv((IV)(mg->mg_len));
2024 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
2026 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
2030 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
2034 PERL_ARGS_ASSERT_MAGIC_METHPACK;
2036 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
2043 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
2045 PERL_ARGS_ASSERT_MAGIC_GETPACK;
2047 if (mg->mg_type == PERL_MAGIC_tiedelem)
2048 mg->mg_flags |= MGf_GSKIP;
2049 magic_methpack(sv,mg,SV_CONST(FETCH));
2054 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
2059 PERL_ARGS_ASSERT_MAGIC_SETPACK;
2061 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
2062 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
2063 * public flags indicate its value based on copying from $val. Doing
2064 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
2065 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
2066 * wrong if $val happened to be tainted, as sv hasn't got magic
2067 * enabled, even though taint magic is in the chain. In which case,
2068 * fake up a temporary tainted value (this is easier than temporarily
2069 * re-enabling magic on sv). */
2071 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
2072 && (tmg->mg_len & 1))
2074 val = sv_mortalcopy(sv);
2080 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
2085 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
2087 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
2089 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
2090 return magic_methpack(sv,mg,SV_CONST(DELETE));
2095 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
2100 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
2102 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
2104 retval = SvIV(retsv)-1;
2106 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
2108 return (U32) retval;
2112 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
2114 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
2116 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
2121 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
2125 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
2127 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
2128 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
2135 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
2137 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
2139 return magic_methpack(sv,mg,SV_CONST(EXISTS));
2143 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
2146 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
2147 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
2149 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
2151 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
2153 if (HvEITER_get(hv))
2154 /* we are in an iteration so the hash cannot be empty */
2156 /* no xhv_eiter so now use FIRSTKEY */
2157 key = sv_newmortal();
2158 magic_nextpack(MUTABLE_SV(hv), mg, key);
2159 HvEITER_set(hv, NULL); /* need to reset iterator */
2160 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
2163 /* there is a SCALAR method that we can call */
2164 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
2166 retval = &PL_sv_undef;
2171 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
2175 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
2177 /* The magic ptr/len for the debugger's hash should always be an SV. */
2178 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
2179 Perl_croak(aTHX_ "panic: magic_setdbline len=%" IVdf ", ptr='%s'",
2180 (IV)mg->mg_len, mg->mg_ptr);
2183 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
2184 setting/clearing debugger breakpoints is not a hot path. */
2185 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
2186 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2188 if (svp && SvIOKp(*svp)) {
2189 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2191 #ifdef PERL_DEBUG_READONLY_OPS
2192 Slab_to_rw(OpSLAB(o));
2194 /* set or clear breakpoint in the relevant control op */
2196 o->op_flags |= OPf_SPECIAL;
2198 o->op_flags &= ~OPf_SPECIAL;
2199 #ifdef PERL_DEBUG_READONLY_OPS
2200 Slab_to_ro(OpSLAB(o));
2208 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2210 AV * const obj = MUTABLE_AV(mg->mg_obj);
2212 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2215 sv_setiv(sv, AvFILL(obj));
2223 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2225 AV * const obj = MUTABLE_AV(mg->mg_obj);
2227 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2230 av_fill(obj, SvIV(sv));
2232 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2233 "Attempt to set length of freed array");
2239 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2241 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2242 PERL_UNUSED_ARG(sv);
2243 PERL_UNUSED_CONTEXT;
2245 /* Reset the iterator when the array is cleared */
2246 if (sizeof(IV) == sizeof(SSize_t)) {
2247 *((IV *) &(mg->mg_len)) = 0;
2250 *((IV *) mg->mg_ptr) = 0;
2257 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2259 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2260 PERL_UNUSED_ARG(sv);
2262 /* during global destruction, mg_obj may already have been freed */
2263 if (PL_in_clean_all)
2266 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2269 /* arylen scalar holds a pointer back to the array, but doesn't own a
2270 reference. Hence the we (the array) are about to go away with it
2271 still pointing at us. Clear its pointer, else it would be pointing
2272 at free memory. See the comment in sv_magic about reference loops,
2273 and why it can't own a reference to us. */
2280 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2282 SV* const lsv = LvTARG(sv);
2283 MAGIC * const found = mg_find_mglob(lsv);
2285 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2286 PERL_UNUSED_ARG(mg);
2288 if (found && found->mg_len != -1) {
2289 STRLEN i = found->mg_len;
2290 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2291 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2300 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2302 SV* const lsv = LvTARG(sv);
2308 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2309 PERL_UNUSED_ARG(mg);
2311 found = mg_find_mglob(lsv);
2315 found = sv_magicext_mglob(lsv);
2317 else if (!SvOK(sv)) {
2321 s = SvPV_const(lsv, len);
2326 const STRLEN ulen = sv_or_pv_len_utf8(lsv, s, len);
2336 else if (pos > (SSize_t)len)
2339 found->mg_len = pos;
2340 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2346 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2349 SV * const lsv = LvTARG(sv);
2350 const char * const tmps = SvPV_const(lsv,len);
2351 STRLEN offs = LvTARGOFF(sv);
2352 STRLEN rem = LvTARGLEN(sv);
2353 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2354 const bool negrem = LvFLAGS(sv) & LVf_NEG_LEN;
2356 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2357 PERL_UNUSED_ARG(mg);
2359 if (!translate_substr_offsets(
2360 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2361 negoff ? -(IV)offs : (IV)offs, !negoff,
2362 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2364 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2370 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2371 sv_setpvn(sv, tmps + offs, rem);
2378 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2380 STRLEN len, lsv_len, oldtarglen, newtarglen;
2381 const char * const tmps = SvPV_const(sv, len);
2382 SV * const lsv = LvTARG(sv);
2383 STRLEN lvoff = LvTARGOFF(sv);
2384 STRLEN lvlen = LvTARGLEN(sv);
2385 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2386 const bool neglen = LvFLAGS(sv) & LVf_NEG_LEN;
2388 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2389 PERL_UNUSED_ARG(mg);
2393 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2394 "Attempt to use reference as lvalue in substr"
2396 SvPV_force_nomg(lsv,lsv_len);
2397 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2398 if (!translate_substr_offsets(
2400 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2401 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2403 Perl_croak(aTHX_ "substr outside of string");
2406 sv_utf8_upgrade_nomg(lsv);
2407 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2408 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2409 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2412 else if (SvUTF8(lsv)) {
2414 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2416 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2417 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2421 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2424 if (!neglen) LvTARGLEN(sv) = newtarglen;
2425 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2431 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2433 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2434 PERL_UNUSED_ARG(sv);
2435 #ifdef NO_TAINT_SUPPORT
2436 PERL_UNUSED_ARG(mg);
2439 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1) && IN_PERL_RUNTIME);
2444 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2446 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2447 PERL_UNUSED_ARG(sv);
2449 /* update taint status */
2458 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2460 SV * const lsv = LvTARG(sv);
2461 char errflags = LvFLAGS(sv);
2463 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2464 PERL_UNUSED_ARG(mg);
2466 /* non-zero errflags implies deferred out-of-range condition */
2467 assert(!(errflags & ~(LVf_NEG_OFF|LVf_OUT_OF_RANGE)));
2468 sv_setuv(sv, errflags ? 0 : do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2474 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2476 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2477 PERL_UNUSED_ARG(mg);
2478 do_vecset(sv); /* XXX slurp this routine */
2483 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2486 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2487 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2489 if (LvTARGLEN(sv)) {
2491 SV * const ahv = LvTARG(sv);
2492 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2496 else if (LvSTARGOFF(sv) >= 0) {
2497 AV *const av = MUTABLE_AV(LvTARG(sv));
2498 if (LvSTARGOFF(sv) <= AvFILL(av))
2500 if (SvRMAGICAL(av)) {
2501 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2502 targ = svp ? *svp : NULL;
2505 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2508 if (targ && (targ != &PL_sv_undef)) {
2509 /* somebody else defined it for us */
2510 SvREFCNT_dec(LvTARG(sv));
2511 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2513 SvREFCNT_dec(mg->mg_obj);
2515 mg->mg_flags &= ~MGf_REFCOUNTED;
2524 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2526 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2528 sv_setsv(sv, defelem_target(sv, mg));
2533 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2535 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2536 PERL_UNUSED_ARG(mg);
2540 sv_setsv(LvTARG(sv), sv);
2541 SvSETMAGIC(LvTARG(sv));
2547 Perl_vivify_defelem(pTHX_ SV *sv)
2552 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2554 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2557 SV * const ahv = LvTARG(sv);
2558 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2561 if (!value || value == &PL_sv_undef)
2562 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2564 else if (LvSTARGOFF(sv) < 0)
2565 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2567 AV *const av = MUTABLE_AV(LvTARG(sv));
2568 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2569 LvTARG(sv) = NULL; /* array can't be extended */
2571 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2572 if (!svp || !(value = *svp))
2573 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2576 SvREFCNT_inc_simple_void(value);
2577 SvREFCNT_dec(LvTARG(sv));
2580 SvREFCNT_dec(mg->mg_obj);
2582 mg->mg_flags &= ~MGf_REFCOUNTED;
2586 Perl_magic_setnonelem(pTHX_ SV *sv, MAGIC *mg)
2588 PERL_ARGS_ASSERT_MAGIC_SETNONELEM;
2589 PERL_UNUSED_ARG(mg);
2590 sv_unmagic(sv, PERL_MAGIC_nonelem);
2595 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2597 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2598 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2603 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2605 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2606 PERL_UNUSED_CONTEXT;
2607 PERL_UNUSED_ARG(sv);
2614 Perl_magic_freemglob(pTHX_ SV *sv, MAGIC *mg)
2616 PERL_ARGS_ASSERT_MAGIC_FREEMGLOB;
2617 PERL_UNUSED_ARG(sv);
2619 /* pos() magic uses mg_len as a string position rather than a buffer
2620 * length, and mg_ptr is currently unused, so skip freeing.
2622 assert(mg->mg_type == PERL_MAGIC_regex_global && mg->mg_len >= -1);
2629 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2631 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2633 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2635 if (uf && uf->uf_set)
2636 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2641 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2643 const char type = mg->mg_type;
2645 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2647 assert( type == PERL_MAGIC_fm
2648 || type == PERL_MAGIC_qr
2649 || type == PERL_MAGIC_bm);
2650 return sv_unmagic(sv, type);
2653 #ifdef USE_LOCALE_COLLATE
2655 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2657 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2660 * RenE<eacute> Descartes said "I think not."
2661 * and vanished with a faint plop.
2663 PERL_UNUSED_CONTEXT;
2664 PERL_UNUSED_ARG(sv);
2666 Safefree(mg->mg_ptr);
2674 Perl_magic_freecollxfrm(pTHX_ SV *sv, MAGIC *mg)
2676 PERL_ARGS_ASSERT_MAGIC_FREECOLLXFRM;
2677 PERL_UNUSED_ARG(sv);
2679 /* Collate magic uses mg_len as a string length rather than a buffer
2680 * length, so we need to free even with mg_len == 0: hence we can't
2681 * rely on standard magic free handling */
2682 if (mg->mg_len >= 0) {
2683 assert(mg->mg_type == PERL_MAGIC_collxfrm);
2684 Safefree(mg->mg_ptr);
2690 #endif /* USE_LOCALE_COLLATE */
2692 /* Just clear the UTF-8 cache data. */
2694 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2696 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2697 PERL_UNUSED_CONTEXT;
2698 PERL_UNUSED_ARG(sv);
2699 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2701 mg->mg_len = -1; /* The mg_len holds the len cache. */
2706 Perl_magic_freeutf8(pTHX_ SV *sv, MAGIC *mg)
2708 PERL_ARGS_ASSERT_MAGIC_FREEUTF8;
2709 PERL_UNUSED_ARG(sv);
2711 /* utf8 magic uses mg_len as a string length rather than a buffer
2712 * length, so we need to free even with mg_len == 0: hence we can't
2713 * rely on standard magic free handling */
2714 assert(mg->mg_type == PERL_MAGIC_utf8 && mg->mg_len >= -1);
2715 Safefree(mg->mg_ptr);
2722 Perl_magic_setlvref(pTHX_ SV *sv, MAGIC *mg)
2724 const char *bad = NULL;
2725 PERL_ARGS_ASSERT_MAGIC_SETLVREF;
2726 if (!SvROK(sv)) Perl_croak(aTHX_ "Assigned value is not a reference");
2727 switch (mg->mg_private & OPpLVREF_TYPE) {
2729 if (SvTYPE(SvRV(sv)) > SVt_PVLV)
2733 if (SvTYPE(SvRV(sv)) != SVt_PVAV)
2737 if (SvTYPE(SvRV(sv)) != SVt_PVHV)
2741 if (SvTYPE(SvRV(sv)) != SVt_PVCV)
2745 /* diag_listed_as: Assigned value is not %s reference */
2746 Perl_croak(aTHX_ "Assigned value is not a%s reference", bad);
2747 switch (mg->mg_obj ? SvTYPE(mg->mg_obj) : 0) {
2750 SV * const old = PAD_SV(mg->mg_len);
2751 PAD_SETSV(mg->mg_len, SvREFCNT_inc_NN(SvRV(sv)));
2756 gv_setref(mg->mg_obj, sv);
2757 SvSETMAGIC(mg->mg_obj);
2760 av_store((AV *)mg->mg_obj, SvIV((SV *)mg->mg_ptr),
2761 SvREFCNT_inc_simple_NN(SvRV(sv)));
2764 (void)hv_store_ent((HV *)mg->mg_obj, (SV *)mg->mg_ptr,
2765 SvREFCNT_inc_simple_NN(SvRV(sv)), 0);
2767 if (mg->mg_flags & MGf_PERSIST)
2768 NOOP; /* This sv is in use as an iterator var and will be reused,
2769 so we must leave the magic. */
2771 /* This sv could be returned by the assignment op, so clear the
2772 magic, as lvrefs are an implementation detail that must not be
2773 leaked to the user. */
2774 sv_unmagic(sv, PERL_MAGIC_lvref);
2779 S_set_dollarzero(pTHX_ SV *sv)
2780 PERL_TSA_REQUIRES(PL_dollarzero_mutex)
2784 #ifdef HAS_SETPROCTITLE
2785 /* The BSDs don't show the argv[] in ps(1) output, they
2786 * show a string from the process struct and provide
2787 * the setproctitle() routine to manipulate that. */
2788 if (PL_origalen != 1) {
2789 s = SvPV_const(sv, len);
2790 # if __FreeBSD_version > 410001 || defined(__DragonFly__)
2791 /* The leading "-" removes the "perl: " prefix,
2792 * but not the "(perl) suffix from the ps(1)
2793 * output, because that's what ps(1) shows if the
2794 * argv[] is modified. */
2795 setproctitle("-%s", s);
2796 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2797 /* This doesn't really work if you assume that
2798 * $0 = 'foobar'; will wipe out 'perl' from the $0
2799 * because in ps(1) output the result will be like
2800 * sprintf("perl: %s (perl)", s)
2801 * I guess this is a security feature:
2802 * one (a user process) cannot get rid of the original name.
2804 setproctitle("%s", s);
2807 #elif defined(__hpux) && defined(PSTAT_SETCMD)
2808 if (PL_origalen != 1) {
2810 s = SvPV_const(sv, len);
2811 un.pst_command = (char *)s;
2812 pstat(PSTAT_SETCMD, un, len, 0, 0);
2815 if (PL_origalen > 1) {
2817 /* PL_origalen is set in perl_parse(). */
2818 s = SvPV_force(sv,len);
2819 if (len >= (STRLEN)PL_origalen-1) {
2820 /* Longer than original, will be truncated. We assume that
2821 * PL_origalen bytes are available. */
2822 Copy(s, PL_origargv[0], PL_origalen-1, char);
2825 /* Shorter than original, will be padded. */
2827 /* Special case for Mac OS X: see [perl #38868] */
2830 /* Is the space counterintuitive? Yes.
2831 * (You were expecting \0?)
2832 * Does it work? Seems to. (In Linux 2.4.20 at least.)
2834 const int pad = ' ';
2836 Copy(s, PL_origargv[0], len, char);
2837 PL_origargv[0][len] = 0;
2838 memset(PL_origargv[0] + len + 1,
2839 pad, PL_origalen - len - 1);
2841 PL_origargv[0][PL_origalen-1] = 0;
2842 for (i = 1; i < PL_origargc; i++)
2844 #ifdef HAS_PRCTL_SET_NAME
2845 /* Set the legacy process name in addition to the POSIX name on Linux */
2846 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
2847 /* diag_listed_as: SKIPME */
2848 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
2856 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2864 PERL_ARGS_ASSERT_MAGIC_SET;
2868 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2870 CALLREG_NUMBUF_STORE((REGEXP *)rx,paren,sv);
2872 /* Croak with a READONLY error when a numbered match var is
2873 * set without a previous pattern match. Unless it's C<local $1>
2876 if (!PL_localizing) {
2877 Perl_croak_no_modify();
2883 switch (*mg->mg_ptr) {
2884 case '\001': /* ^A */
2885 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2886 else SvOK_off(PL_bodytarget);
2887 FmLINES(PL_bodytarget) = 0;
2888 if (SvPOK(PL_bodytarget)) {
2889 char *s = SvPVX(PL_bodytarget);
2890 char *e = SvEND(PL_bodytarget);
2891 while ( ((s = (char *) memchr(s, '\n', e - s))) ) {
2892 FmLINES(PL_bodytarget)++;
2896 /* mg_set() has temporarily made sv non-magical */
2898 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2899 SvTAINTED_on(PL_bodytarget);
2901 SvTAINTED_off(PL_bodytarget);
2904 case '\003': /* ^C */
2905 PL_minus_c = cBOOL(SvIV(sv));
2908 case '\004': /* ^D */
2911 const char *s = SvPV_nolen_const(sv);
2912 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2913 if (DEBUG_x_TEST || DEBUG_B_TEST)
2914 dump_all_perl(!DEBUG_B_TEST);
2917 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2920 case '\005': /* ^E */
2921 if (*(mg->mg_ptr+1) == '\0') {
2923 set_vaxc_errno(SvIV(sv));
2924 #elif defined(WIN32)
2925 SetLastError( SvIV(sv) );
2927 os2_setsyserrno(SvIV(sv));
2929 /* will anyone ever use this? */
2930 SETERRNO(SvIV(sv), 4);
2933 else if (strEQ(mg->mg_ptr + 1, "NCODING") && SvOK(sv))
2934 Perl_croak(aTHX_ "${^ENCODING} is no longer supported");
2936 case '\006': /* ^F */
2937 if (mg->mg_ptr[1] == '\0') {
2938 PL_maxsysfd = SvIV(sv);
2941 case '\010': /* ^H */
2943 U32 save_hints = PL_hints;
2944 PL_hints = SvUV(sv);
2946 /* If wasn't UTF-8, and now is, notify the parser */
2947 if ((PL_hints & HINT_UTF8) && ! (save_hints & HINT_UTF8)) {
2948 notify_parser_that_changed_to_utf8();
2952 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2953 Safefree(PL_inplace);
2954 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2956 case '\016': /* ^N */
2957 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2958 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2960 case '\017': /* ^O */
2961 if (*(mg->mg_ptr+1) == '\0') {
2962 Safefree(PL_osname);
2965 TAINT_PROPER("assigning to $^O");
2966 PL_osname = savesvpv(sv);
2969 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2971 const char *const start = SvPV(sv, len);
2972 const char *out = (const char*)memchr(start, '\0', len);
2976 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2977 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2979 /* Opening for input is more common than opening for output, so
2980 ensure that hints for input are sooner on linked list. */
2981 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2983 : newSVpvs_flags("", SvUTF8(sv));
2984 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2987 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2989 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2993 case '\020': /* ^P */
2994 PL_perldb = SvIV(sv);
2995 if (PL_perldb && !PL_DBsingle)
2998 case '\024': /* ^T */
3000 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
3002 PL_basetime = (Time_t)SvIV(sv);
3005 case '\025': /* ^UTF8CACHE */
3006 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
3007 PL_utf8cache = (signed char) sv_2iv(sv);
3010 case '\027': /* ^W & $^WARNING_BITS */
3011 if (*(mg->mg_ptr+1) == '\0') {
3012 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3014 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
3015 | (i ? G_WARN_ON : G_WARN_OFF) ;
3018 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
3019 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3021 free_and_set_cop_warnings(&PL_compiling, pWARN_STD);
3026 int not_none = 0, not_all = 0;
3027 const U8 * const ptr = (const U8 *)SvPV_const(sv, len) ;
3028 for (i = 0 ; i < len ; ++i) {
3030 not_all |= ptr[i] ^ 0x55;
3033 free_and_set_cop_warnings(&PL_compiling, pWARN_NONE);
3034 } else if (len >= WARNsize && !not_all) {
3035 free_and_set_cop_warnings(&PL_compiling, pWARN_ALL);
3036 PL_dowarn |= G_WARN_ONCE ;
3040 const char *const p = SvPV_const(sv, len);
3042 PL_compiling.cop_warnings
3043 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
3046 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
3047 PL_dowarn |= G_WARN_ONCE ;
3055 if (PL_localizing) {
3056 if (PL_localizing == 1)
3057 SAVESPTR(PL_last_in_gv);
3059 else if (SvOK(sv) && GvIO(PL_last_in_gv))
3060 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
3063 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
3064 IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3065 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3068 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
3069 IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3070 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3073 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
3076 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
3077 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
3078 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
3081 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
3085 IO * const io = GvIO(PL_defoutgv);
3088 if ((SvIV(sv)) == 0)
3089 IoFLAGS(io) &= ~IOf_FLUSH;
3091 if (!(IoFLAGS(io) & IOf_FLUSH)) {
3092 PerlIO *ofp = IoOFP(io);
3094 (void)PerlIO_flush(ofp);
3095 IoFLAGS(io) |= IOf_FLUSH;
3103 SV *referent = SvRV(sv);
3104 const char *reftype = sv_reftype(referent, 0);
3105 /* XXX: dodgy type check: This leaves me feeling dirty, but
3106 * the alternative is to copy pretty much the entire
3107 * sv_reftype() into this routine, or to do a full string
3108 * comparison on the return of sv_reftype() both of which
3109 * make me feel worse! NOTE, do not modify this comment
3110 * without reviewing the corresponding comment in
3111 * sv_reftype(). - Yves */
3112 if (reftype[0] == 'S' || reftype[0] == 'L') {
3113 IV val = SvIV(referent);
3115 sv_setsv(sv, PL_rs);
3116 Perl_croak(aTHX_ "Setting $/ to a reference to %s is forbidden",
3117 val < 0 ? "a negative integer" : "zero");
3120 sv_setsv(sv, PL_rs);
3121 /* diag_listed_as: Setting $/ to %s reference is forbidden */
3122 Perl_croak(aTHX_ "Setting $/ to a%s %s reference is forbidden",
3123 *reftype == 'A' ? "n" : "", reftype);
3126 SvREFCNT_dec(PL_rs);
3127 PL_rs = newSVsv(sv);
3131 SvREFCNT_dec(PL_ors_sv);
3133 PL_ors_sv = newSVsv(sv);
3141 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
3144 #ifdef COMPLEX_STATUS
3145 if (PL_localizing == 2) {
3146 SvUPGRADE(sv, SVt_PVLV);
3147 PL_statusvalue = LvTARGOFF(sv);
3148 PL_statusvalue_vms = LvTARGLEN(sv);
3152 #ifdef VMSISH_STATUS
3154 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
3157 STATUS_UNIX_EXIT_SET(SvIV(sv));
3162 # define PERL_VMS_BANG vaxc$errno
3164 # define PERL_VMS_BANG 0
3167 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
3168 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3170 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
3171 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3177 /* XXX $< currently silently ignores failures */
3178 const Uid_t new_uid = SvUID(sv);
3179 PL_delaymagic_uid = new_uid;
3180 if (PL_delaymagic) {
3181 PL_delaymagic |= DM_RUID;
3182 break; /* don't do magic till later */
3185 PERL_UNUSED_RESULT(setruid(new_uid));
3186 #elif defined(HAS_SETREUID)
3187 PERL_UNUSED_RESULT(setreuid(new_uid, (Uid_t)-1));
3188 #elif defined(HAS_SETRESUID)
3189 PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1));
3191 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
3193 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
3194 if (new_uid != 0 && PerlProc_getuid() == 0)
3195 PERL_UNUSED_RESULT(PerlProc_setuid(0));
3197 PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
3199 Perl_croak(aTHX_ "setruid() not implemented");
3206 /* XXX $> currently silently ignores failures */
3207 const Uid_t new_euid = SvUID(sv);
3208 PL_delaymagic_euid = new_euid;
3209 if (PL_delaymagic) {
3210 PL_delaymagic |= DM_EUID;
3211 break; /* don't do magic till later */
3214 PERL_UNUSED_RESULT(seteuid(new_euid));
3215 #elif defined(HAS_SETREUID)
3216 PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid));
3217 #elif defined(HAS_SETRESUID)
3218 PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1));
3220 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
3221 PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
3223 Perl_croak(aTHX_ "seteuid() not implemented");
3230 /* XXX $( currently silently ignores failures */
3231 const Gid_t new_gid = SvGID(sv);
3232 PL_delaymagic_gid = new_gid;
3233 if (PL_delaymagic) {
3234 PL_delaymagic |= DM_RGID;
3235 break; /* don't do magic till later */
3238 PERL_UNUSED_RESULT(setrgid(new_gid));
3239 #elif defined(HAS_SETREGID)
3240 PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1));
3241 #elif defined(HAS_SETRESGID)
3242 PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1));
3244 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
3245 PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
3247 Perl_croak(aTHX_ "setrgid() not implemented");
3254 /* (hv) best guess: maybe we'll need configure probes to do a better job,
3255 * but you can override it if you need to.
3258 #define INVALID_GID ((Gid_t)-1)
3260 /* XXX $) currently silently ignores failures */
3262 #ifdef HAS_SETGROUPS
3264 const char *p = SvPV_const(sv, len);
3265 Groups_t *gary = NULL;
3266 const char* p_end = p + len;
3267 const char* endptr = p_end;
3269 #ifdef _SC_NGROUPS_MAX
3270 int maxgrp = sysconf(_SC_NGROUPS_MAX);
3275 int maxgrp = NGROUPS;
3280 if (grok_atoUV(p, &uv, &endptr))
3281 new_egid = (Gid_t)uv;
3283 new_egid = INVALID_GID;
3286 for (i = 0; i < maxgrp; ++i) {
3296 Newx(gary, i + 1, Groups_t);
3298 Renew(gary, i + 1, Groups_t);
3299 if (grok_atoUV(p, &uv, &endptr))
3300 gary[i] = (Groups_t)uv;
3302 gary[i] = INVALID_GID;
3307 PERL_UNUSED_RESULT(setgroups(i, gary));
3310 #else /* HAS_SETGROUPS */
3311 new_egid = SvGID(sv);
3312 #endif /* HAS_SETGROUPS */
3313 PL_delaymagic_egid = new_egid;
3314 if (PL_delaymagic) {
3315 PL_delaymagic |= DM_EGID;
3316 break; /* don't do magic till later */
3319 PERL_UNUSED_RESULT(setegid(new_egid));
3320 #elif defined(HAS_SETREGID)
3321 PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid));
3322 #elif defined(HAS_SETRESGID)
3323 PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1));
3325 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
3326 PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
3328 Perl_croak(aTHX_ "setegid() not implemented");
3334 PL_chopset = SvPV_force(sv,len);
3337 /* Store the pid in mg->mg_obj so we can tell when a fork has
3338 occurred. mg->mg_obj points to *$ by default, so clear it. */
3339 if (isGV(mg->mg_obj)) {
3340 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
3341 SvREFCNT_dec(mg->mg_obj);
3342 mg->mg_flags |= MGf_REFCOUNTED;
3343 mg->mg_obj = newSViv((IV)PerlProc_getpid());
3345 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
3348 if (!sv_utf8_downgrade(sv, /* fail_ok */ TRUE)) {
3350 /* Since we are going to set the string's UTF8-encoded form
3351 as the process name we should update $0 itself to contain
3352 that same (UTF8-encoded) value. */
3353 sv_utf8_encode(GvSV(mg->mg_obj));
3355 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "$0");
3358 LOCK_DOLLARZERO_MUTEX;
3359 S_set_dollarzero(aTHX_ sv);
3360 UNLOCK_DOLLARZERO_MUTEX;
3367 =for apidoc_section $signals
3368 =for apidoc whichsig
3369 =for apidoc_item whichsig_pv
3370 =for apidoc_item whichsig_pvn
3371 =for apidoc_item whichsig_sv
3373 These all convert a signal name into its corresponding signal number;
3374 returning -1 if no corresponding number was found.
3376 They differ only in the source of the signal name:
3378 C<whichsig_pv> takes the name from the C<NUL>-terminated string starting at
3381 C<whichsig> is merely a different spelling, a synonym, of C<whichsig_pv>.
3383 C<whichsig_pvn> takes the name from the string starting at C<sig>, with length
3386 C<whichsig_sv> takes the name from the PV stored in the SV C<sigsv>.
3392 Perl_whichsig_sv(pTHX_ SV *sigsv)
3396 PERL_ARGS_ASSERT_WHICHSIG_SV;
3397 sigpv = SvPV_const(sigsv, siglen);
3398 return whichsig_pvn(sigpv, siglen);
3402 Perl_whichsig_pv(pTHX_ const char *sig)
3404 PERL_ARGS_ASSERT_WHICHSIG_PV;
3405 return whichsig_pvn(sig, strlen(sig));
3409 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3413 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3414 PERL_UNUSED_CONTEXT;
3416 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3417 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3418 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3420 if (memEQs(sig, len, "CHLD"))
3424 if (memEQs(sig, len, "CLD"))
3431 /* Perl_sighandler(), Perl_sighandler1(), Perl_sighandler3():
3432 * these three function are intended to be called by the OS as 'C' level
3433 * signal handler functions in the case where unsafe signals are being
3434 * used - i.e. they immediately invoke Perl_perly_sighandler() to call the
3435 * perl-level sighandler, rather than deferring.
3436 * In fact, the core itself will normally use Perl_csighandler as the
3437 * OS-level handler; that function will then decide whether to queue the
3438 * signal or call Perl_sighandler / Perl_perly_sighandler itself. So these
3439 * functions are more useful for e.g. POSIX.xs when it wants explicit
3440 * control of what's happening.
3444 #ifdef PERL_USE_3ARG_SIGHANDLER
3447 Perl_sighandler(int sig, Siginfo_t *sip, void *uap)
3449 Perl_perly_sighandler(sig, sip, uap, 0);
3455 Perl_sighandler(int sig)
3457 Perl_perly_sighandler(sig, NULL, NULL, 0);
3463 Perl_sighandler1(int sig)
3465 Perl_perly_sighandler(sig, NULL, NULL, 0);
3469 Perl_sighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
3471 Perl_perly_sighandler(sig, sip, uap, 0);
3475 /* Invoke the perl-level signal handler. This function is called either
3476 * directly from one of the C-level signals handlers (Perl_sighandler or
3477 * Perl_csighandler), or for safe signals, later from
3478 * Perl_despatch_signals() at a suitable safe point during execution.
3480 * 'safe' is a boolean indicating the latter call path.
3484 Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL,
3485 void *uap PERL_UNUSED_DECL, bool safe)
3487 #ifdef PERL_GET_SIG_CONTEXT
3488 dTHXa(PERL_GET_SIG_CONTEXT);
3495 SV * const tSv = PL_Sv;
3499 XPV * const tXpv = PL_Xpv;
3500 I32 old_ss_ix = PL_savestack_ix;
3501 SV *errsv_save = NULL;
3504 if (!PL_psig_ptr[sig]) {
3505 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3510 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3511 /* Max number of items pushed there is 3*n or 4. We cannot fix
3512 infinity, so we fix 4 (in fact 5): */
3513 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3515 PL_savestack_ix += 5; /* Protect save in progress. */
3516 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3519 /* sv_2cv is too complicated, try a simpler variant first: */
3520 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3521 || SvTYPE(cv) != SVt_PVCV) {
3523 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3526 if (!cv || !CvROOT(cv)) {
3527 const HEK * const hek = gv
3531 : cv && CvGV(cv) ? GvENAME_HEK(CvGV(cv)) : NULL;
3533 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3534 "SIG%s handler \"%" HEKf "\" not defined.\n",
3535 PL_sig_name[sig], HEKfARG(hek));
3536 /* diag_listed_as: SIG%s handler "%s" not defined */
3537 else Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3538 "SIG%s handler \"__ANON__\" not defined.\n",
3543 sv = PL_psig_name[sig]
3544 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3545 : newSVpv(PL_sig_name[sig],0);
3549 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3550 /* make sure our assumption about the size of the SAVEs are correct:
3551 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3552 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3555 PUSHSTACKi(PERLSI_SIGNAL);
3559 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3561 struct sigaction oact;
3563 if (sip && sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3565 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3566 /* The siginfo fields signo, code, errno, pid, uid,
3567 * addr, status, and band are defined by POSIX/SUSv3. */
3568 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3569 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3570 # ifdef HAS_SIGINFO_SI_ERRNO
3571 (void)hv_stores(sih, "errno", newSViv(sip->si_errno));
3573 # ifdef HAS_SIGINFO_SI_STATUS
3574 (void)hv_stores(sih, "status", newSViv(sip->si_status));
3576 # ifdef HAS_SIGINFO_SI_UID
3579 sv_setuid(uid, sip->si_uid);
3580 (void)hv_stores(sih, "uid", uid);
3583 # ifdef HAS_SIGINFO_SI_PID
3584 (void)hv_stores(sih, "pid", newSViv(sip->si_pid));
3586 # ifdef HAS_SIGINFO_SI_ADDR
3587 (void)hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3589 # ifdef HAS_SIGINFO_SI_BAND
3590 (void)hv_stores(sih, "band", newSViv(sip->si_band));
3594 mPUSHp((char *)sip, sizeof(*sip));
3602 errsv_save = newSVsv(ERRSV);
3604 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3608 SV * const errsv = ERRSV;
3609 if (SvTRUE_NN(errsv)) {
3610 SvREFCNT_dec(errsv_save);
3613 /* Handler "died", for example to get out of a restart-able read().
3614 * Before we re-do that on its behalf re-enable the signal which was
3615 * blocked by the system when we entered.
3617 # ifdef HAS_SIGPROCMASK
3619 /* safe signals called via dispatch_signals() set up a
3620 * savestack destructor, unblock_sigmask(), to
3621 * automatically unblock the handler at the end. If
3622 * instead we get here directly, we have to do it
3627 sigaddset(&set,sig);
3628 sigprocmask(SIG_UNBLOCK, &set, NULL);
3631 /* Not clear if this will work */
3632 /* XXX not clear if this should be protected by 'if (safe)'
3635 (void)rsignal(sig, SIG_IGN);
3636 (void)rsignal(sig, PL_csighandlerp);
3638 #endif /* !PERL_MICRO */
3643 sv_setsv(errsv, errsv_save);
3644 SvREFCNT_dec(errsv_save);
3649 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3650 PL_savestack_ix = old_ss_ix;
3652 SvREFCNT_dec_NN(sv);
3653 PL_op = myop; /* Apparently not needed... */
3655 PL_Sv = tSv; /* Restore global temporaries. */
3662 S_restore_magic(pTHX_ const void *p)
3664 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3665 SV* const sv = mgs->mgs_sv;
3671 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3672 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3674 SvFLAGS(sv) |= mgs->mgs_flags;
3679 bumped = mgs->mgs_bumped;
3680 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3682 /* If we're still on top of the stack, pop us off. (That condition
3683 * will be satisfied if restore_magic was called explicitly, but *not*
3684 * if it's being called via leave_scope.)
3685 * The reason for doing this is that otherwise, things like sv_2cv()
3686 * may leave alloc gunk on the savestack, and some code
3687 * (e.g. sighandler) doesn't expect that...
3689 if (PL_savestack_ix == mgs->mgs_ss_ix)
3691 UV popval = SSPOPUV;
3692 assert(popval == SAVEt_DESTRUCTOR_X);
3693 PL_savestack_ix -= 2;
3695 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3696 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3699 if (SvREFCNT(sv) == 1) {
3700 /* We hold the last reference to this SV, which implies that the
3701 SV was deleted as a side effect of the routines we called.
3702 So artificially keep it alive a bit longer.
3703 We avoid turning on the TEMP flag, which can cause the SV's
3704 buffer to get stolen (and maybe other stuff). */
3709 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3713 /* clean up the mess created by Perl_sighandler().
3714 * Note that this is only called during an exit in a signal handler;
3715 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3719 S_unwind_handler_stack(pTHX_ const void *p)
3723 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3727 =for apidoc_section $magic
3728 =for apidoc magic_sethint
3730 Triggered by a store to C<%^H>, records the key/value pair to
3731 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3732 anything that would need a deep copy. Maybe we should warn if we find a
3738 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3740 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3741 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3743 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3745 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3746 an alternative leaf in there, with PL_compiling.cop_hints being used if
3747 it's NULL. If needed for threads, the alternative could lock a mutex,
3748 or take other more complex action. */
3750 /* Something changed in %^H, so it will need to be restored on scope exit.
3751 Doing this here saves a lot of doing it manually in perl code (and
3752 forgetting to do it, and consequent subtle errors. */
3753 PL_hints |= HINT_LOCALIZE_HH;
3754 CopHINTHASH_set(&PL_compiling,
3755 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3756 magic_sethint_feature(key, NULL, 0, sv, 0);
3761 =for apidoc magic_clearhint
3763 Triggered by a delete from C<%^H>, records the key to
3764 C<PL_compiling.cop_hints_hash>.
3769 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3771 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3772 PERL_UNUSED_ARG(sv);
3774 PL_hints |= HINT_LOCALIZE_HH;
3775 CopHINTHASH_set(&PL_compiling,
3776 mg->mg_len == HEf_SVKEY
3777 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3778 MUTABLE_SV(mg->mg_ptr), 0, 0)
3779 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3780 mg->mg_ptr, mg->mg_len, 0, 0));
3781 if (mg->mg_len == HEf_SVKEY)
3782 magic_sethint_feature(MUTABLE_SV(mg->mg_ptr), NULL, 0, NULL, FALSE);
3784 magic_sethint_feature(NULL, mg->mg_ptr, mg->mg_len, NULL, FALSE);
3789 =for apidoc magic_clearhints
3791 Triggered by clearing C<%^H>, resets C<PL_compiling.cop_hints_hash>.
3796 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3798 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3799 PERL_UNUSED_ARG(sv);
3800 PERL_UNUSED_ARG(mg);
3801 cophh_free(CopHINTHASH_get(&PL_compiling));
3802 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3808 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3809 const char *name, I32 namlen)
3813 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3814 PERL_UNUSED_ARG(sv);
3815 PERL_UNUSED_ARG(name);
3816 PERL_UNUSED_ARG(namlen);
3818 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3819 nmg = mg_find(nsv, mg->mg_type);
3821 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3822 nmg->mg_ptr = mg->mg_ptr;
3823 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3824 nmg->mg_flags |= MGf_REFCOUNTED;
3829 Perl_magic_setdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3830 PERL_ARGS_ASSERT_MAGIC_SETDEBUGVAR;
3832 #if DBVARMG_SINGLE != 0
3833 assert(mg->mg_private >= DBVARMG_SINGLE);
3835 assert(mg->mg_private < DBVARMG_COUNT);
3837 PL_DBcontrol[mg->mg_private] = SvIV_nomg(sv);
3843 Perl_magic_getdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3844 PERL_ARGS_ASSERT_MAGIC_GETDEBUGVAR;
3846 #if DBVARMG_SINGLE != 0
3847 assert(mg->mg_private >= DBVARMG_SINGLE);
3849 assert(mg->mg_private < DBVARMG_COUNT);
3850 sv_setiv(sv, PL_DBcontrol[mg->mg_private]);
3856 * ex: set ts=8 sts=4 sw=4 et: