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_ SSize_t 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 SSize_t 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 SSize_t 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 SSize_t 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 SSize_t 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_LOGICAL_NPARENS(rx) ? RX_LOGICAL_NPARENS(rx) : RX_NPARENS(rx);
642 } else { /* @- @^CAPTURE @{^CAPTURE} */
643 I32 paren = RX_LASTPAREN(rx);
645 /* return the last filled */
646 while ( paren >= 0 && !RX_OFFS_VALID(rx,paren) )
648 if (paren && RX_PARNO_TO_LOGICAL(rx))
649 paren = RX_PARNO_TO_LOGICAL(rx)[paren];
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;
670 REGEXP * const rx = PL_curpm ? PM_GETRE(PL_curpm) : NULL;
673 const SSize_t n = (SSize_t)mg->mg_obj;
674 /* @{^CAPTURE} does not contain $&, so we need to increment by 1 */
675 const I32 paren = mg->mg_len
676 + (n == '\003' ? 1 : 0);
683 I32 logical_nparens = (I32)RX_LOGICAL_NPARENS(rx);
685 if (!logical_nparens)
686 logical_nparens = (I32)RX_NPARENS(rx);
688 if (n != '+' && n != '-') {
689 CALLREG_NUMBUF_FETCH(rx,paren,sv);
692 if (paren <= (I32)logical_nparens) {
693 I32 true_paren = RX_LOGICAL_TO_PARNO(rx)
694 ? RX_LOGICAL_TO_PARNO(rx)[paren]
697 if (((s = RX_OFFS_START(rx,true_paren)) != -1) &&
698 ((t = RX_OFFS_END(rx,true_paren)) != -1))
702 if (n == '+') /* @+ */
707 if (RX_MATCH_UTF8(rx)) {
708 const char * const b = RX_SUBBEG(rx);
710 i = RX_SUBCOFFSET(rx) +
712 (U8*)(b-RX_SUBOFFSET(rx)+i));
718 if (RX_PARNO_TO_LOGICAL_NEXT(rx))
719 true_paren = RX_PARNO_TO_LOGICAL_NEXT(rx)[true_paren];
722 } while (true_paren);
732 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
734 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
738 Perl_croak_no_modify();
739 NORETURN_FUNCTION_END;
742 #define SvRTRIM(sv) STMT_START { \
745 STRLEN len = SvCUR(sv_); \
746 char * const p = SvPVX(sv_); \
747 while (len > 0 && isSPACE(p[len-1])) \
749 SvCUR_set(sv_, len); \
755 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
757 PERL_ARGS_ASSERT_EMULATE_COP_IO;
759 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
764 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
765 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
770 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
771 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
779 S_fixup_errno_string(pTHX_ SV* sv)
781 /* Do what is necessary to fixup the non-empty string in 'sv' for return to
784 PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING;
788 if(strEQ(SvPVX(sv), "")) {
789 sv_catpv(sv, UNKNOWN_ERRNO_MSG);
794 =for apidoc_section $errno
795 =for apidoc sv_string_from_errnum
797 Generates the message string describing an OS error and returns it as
798 an SV. C<errnum> must be a value that C<errno> could take, identifying
801 If C<tgtsv> is non-null then the string will be written into that SV
802 (overwriting existing content) and it will be returned. If C<tgtsv>
803 is a null pointer then the string will be written into a new mortal SV
804 which will be returned.
806 The message will be taken from whatever locale would be used by C<$!>,
807 and will be encoded in the SV in whatever manner would be used by C<$!>.
808 The details of this process are subject to future change. Currently,
809 the message is taken from the C locale by default (usually producing an
810 English message), and from the currently selected locale when in the scope
811 of the C<use locale> pragma. A heuristic attempt is made to decode the
812 message from the locale's character encoding, but it will only be decoded
813 as either UTF-8 or ISO-8859-1. It is always correctly decoded in a UTF-8
814 locale, usually in an ISO-8859-1 locale, and never in any other locale.
816 The SV is always returned containing an actual string, and with no other
817 OK bits set. Unlike C<$!>, a message is even yielded for C<errnum> zero
818 (meaning success), and if no useful message is available then a useless
819 string (currently empty) is returned.
825 Perl_sv_string_from_errnum(pTHX_ int errnum, SV *tgtsv)
831 tgtsv = newSV_type_mortal(SVt_PV);
832 errstr = my_strerror(errnum, &utf8ness);
834 sv_setpv(tgtsv, errstr);
835 if (utf8ness == UTF8NESS_YES) {
838 fixup_errno_string(tgtsv);
851 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
854 const char *s = NULL;
858 PERL_ARGS_ASSERT_MAGIC_GET;
860 const char * const remaining = (mg->mg_ptr)
866 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
868 CALLREG_NUMBUF_FETCH(rx,paren,sv);
875 nextchar = *remaining;
876 switch (*mg->mg_ptr) {
877 case '\001': /* ^A */
878 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
881 if (SvTAINTED(PL_bodytarget))
884 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
885 if (nextchar == '\0') {
886 sv_setiv(sv, (IV)PL_minus_c);
888 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
889 sv_setiv(sv, (IV)STATUS_NATIVE);
893 case '\004': /* ^D */
894 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
896 case '\005': /* ^E */
897 if (nextchar != '\0') {
898 if (strEQ(remaining, "NCODING"))
903 #if defined(VMS) || defined(OS2) || defined(WIN32)
907 $DESCRIPTOR(msgdsc,msg);
908 sv_setnv(sv,(NV) vaxc$errno);
909 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
910 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
915 if (!(_emx_env & 0x200)) { /* Under DOS */
916 sv_setnv(sv, (NV)errno);
919 const char * errstr = my_strerror(errnum, &utf8ness);
921 sv_setpv(sv, errstr);
923 if (utf8ness == UTF8NESS_YES) {
931 if (errno != errno_isOS2) {
932 const int tmp = _syserrno();
933 if (tmp) /* 2nd call to _syserrno() makes it 0 */
936 sv_setnv(sv, (NV)Perl_rc);
937 sv_setpv(sv, os2error(Perl_rc));
939 if (SvOK(sv) && strNE(SvPVX(sv), "")) {
940 fixup_errno_string(sv);
942 # elif defined(WIN32)
944 const DWORD dwErr = GetLastError();
945 sv_setnv(sv, (NV)dwErr);
947 PerlProc_GetOSError(sv, dwErr);
948 fixup_errno_string(sv);
952 && get_win32_message_utf8ness(SvPV_nomg_const_nolen(sv)))
963 # error Missing code for platform
966 SvNOK_on(sv); /* what a wonderful hack! */
968 #endif /* End of platforms with special handling for $^E; others just fall
976 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
978 sv_setnv(sv, (NV)errno);
981 if (errno == errno_isOS2 || errno == errno_isOS2_set)
982 sv_setpv(sv, os2error(Perl_rc));
989 sv_string_from_errnum(errno, sv);
990 /* If no useful string is available, don't
991 * claim to have a string part. The SvNOK_on()
992 * below will cause just the number part to be valid */
1000 SvNOK_on(sv); /* what a wonderful hack! */
1003 case '\006': /* ^F */
1004 if (nextchar == '\0') {
1005 sv_setiv(sv, (IV)PL_maxsysfd);
1008 case '\007': /* ^GLOBAL_PHASE */
1009 if (strEQ(remaining, "LOBAL_PHASE")) {
1010 sv_setpvn(sv, PL_phase_names[PL_phase],
1011 strlen(PL_phase_names[PL_phase]));
1014 case '\010': /* ^H */
1015 sv_setuv(sv, PL_hints);
1017 case '\011': /* ^I */ /* NOT \t in EBCDIC */
1018 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
1020 case '\014': /* ^LAST_FH */
1021 if (strEQ(remaining, "AST_FH")) {
1022 if (PL_last_in_gv && (SV*)PL_last_in_gv != &PL_sv_undef) {
1023 assert(isGV_with_GP(PL_last_in_gv));
1024 sv_setrv_inc(sv, MUTABLE_SV(PL_last_in_gv));
1031 case '\017': /* ^O & ^OPEN */
1032 if (nextchar == '\0') {
1033 sv_setpv(sv, PL_osname);
1036 else if (strEQ(remaining, "PEN")) {
1037 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
1041 sv_setiv(sv, (IV)PL_perldb);
1043 case '\023': /* ^S */
1044 if (nextchar == '\0') {
1045 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
1047 else if (PL_in_eval)
1048 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
1052 else if (strEQ(remaining, "AFE_LOCALES")) {
1054 #if ! defined(USE_ITHREADS) || defined(USE_THREAD_SAFE_LOCALE)
1056 sv_setuv(sv, (UV) 1);
1059 sv_setuv(sv, (UV) 0);
1065 case '\024': /* ^T */
1066 if (nextchar == '\0') {
1068 sv_setnv(sv, PL_basetime);
1070 sv_setiv(sv, (IV)PL_basetime);
1073 else if (strEQ(remaining, "AINT"))
1074 sv_setiv(sv, TAINTING_get
1075 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
1078 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
1079 if (strEQ(remaining, "NICODE"))
1080 sv_setuv(sv, (UV) PL_unicode);
1081 else if (strEQ(remaining, "TF8LOCALE"))
1082 sv_setuv(sv, (UV) PL_utf8locale);
1083 else if (strEQ(remaining, "TF8CACHE"))
1084 sv_setiv(sv, (IV) PL_utf8cache);
1086 case '\027': /* ^W & $^WARNING_BITS */
1087 if (nextchar == '\0')
1088 sv_setiv(sv, (IV)cBOOL(PL_dowarn & G_WARN_ON));
1089 else if (strEQ(remaining, "ARNING_BITS")) {
1090 if (PL_compiling.cop_warnings == pWARN_NONE) {
1091 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
1093 else if (PL_compiling.cop_warnings == pWARN_STD) {
1096 else if (PL_compiling.cop_warnings == pWARN_ALL) {
1097 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1100 sv_setpvn(sv, PL_compiling.cop_warnings,
1101 RCPV_LEN(PL_compiling.cop_warnings));
1106 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1107 paren = RX_LASTPAREN(rx);
1109 goto do_numbuf_fetch;
1112 case '\016': /* ^N */
1113 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1114 paren = RX_LASTCLOSEPAREN(rx);
1115 if (RX_PARNO_TO_LOGICAL(rx))
1116 paren = RX_PARNO_TO_LOGICAL(rx)[paren];
1118 goto do_numbuf_fetch;
1122 if (GvIO(PL_last_in_gv)) {
1123 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1128 sv_setiv(sv, (IV)STATUS_CURRENT);
1129 #ifdef COMPLEX_STATUS
1130 SvUPGRADE(sv, SVt_PVLV);
1131 LvTARGOFF(sv) = PL_statusvalue;
1132 LvTARGLEN(sv) = PL_statusvalue_vms;
1137 if (GvIOp(PL_defoutgv))
1138 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1142 sv_setpv(sv,GvENAME(PL_defoutgv));
1143 sv_catpvs(sv,"_TOP");
1147 if (GvIOp(PL_defoutgv))
1148 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1150 s = GvENAME(PL_defoutgv);
1154 if (GvIO(PL_defoutgv))
1155 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1158 if (GvIO(PL_defoutgv))
1159 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1162 if (GvIO(PL_defoutgv))
1163 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1172 if (GvIO(PL_defoutgv))
1173 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1177 sv_copypv(sv, PL_ors_sv);
1183 IV const pid = (IV)PerlProc_getpid();
1184 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1185 /* never set manually, or at least not since last fork */
1187 /* never unsafe, even if reading in a tainted expression */
1190 /* else a value has been assigned manually, so do nothing */
1194 sv_setuid(sv, PerlProc_getuid());
1197 sv_setuid(sv, PerlProc_geteuid());
1200 sv_setgid(sv, PerlProc_getgid());
1203 sv_setgid(sv, PerlProc_getegid());
1205 #ifdef HAS_GETGROUPS
1207 Groups_t *gary = NULL;
1208 I32 num_groups = getgroups(0, gary);
1209 if (num_groups > 0) {
1211 Newx(gary, num_groups, Groups_t);
1212 num_groups = getgroups(num_groups, gary);
1213 for (i = 0; i < num_groups; i++)
1214 Perl_sv_catpvf(aTHX_ sv, " %" IVdf, (IV)gary[i]);
1220 Set this to avoid warnings when the SV is used as a number.
1221 Avoid setting the public IOK flag so that serializers will
1224 (void)SvIOKp_on(sv); /* what a wonderful hack! */
1238 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1240 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1242 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1244 if (uf && uf->uf_val)
1245 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1250 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1252 STRLEN len = 0, klen;
1257 SV *keysv = MgSV(mg);
1259 if (keysv == NULL) {
1264 if (!sv_utf8_downgrade(keysv, /* fail_ok */ TRUE)) {
1265 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv key (encoding to utf8)");
1268 key = SvPV_const(keysv,klen);
1271 PERL_ARGS_ASSERT_MAGIC_SETENV;
1275 /* defined environment variables are byte strings; unfortunately
1276 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1277 (void)SvPV_force_nomg_nolen(sv);
1278 (void)sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1280 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1286 my_setenv(key, s); /* does the deed */
1288 #ifdef DYNAMIC_ENV_FETCH
1289 /* We just undefd an environment var. Is a replacement */
1290 /* waiting in the wings? */
1292 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1294 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1298 #if !defined(OS2) && !defined(WIN32)
1299 /* And you'll never guess what the dog had */
1300 /* in its mouth... */
1302 MgTAINTEDDIR_off(mg);
1304 if (s && memEQs(key, klen, "DCL$PATH")) {
1305 char pathbuf[256], eltbuf[256], *cp, *elt;
1308 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1310 do { /* DCL$PATH may be a search list */
1311 while (1) { /* as may dev portion of any element */
1312 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1313 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1314 cando_by_name(S_IWUSR,0,elt) ) {
1315 MgTAINTEDDIR_on(mg);
1319 if ((cp = strchr(elt, ':')) != NULL)
1321 if (my_trnlnm(elt, eltbuf, j++))
1327 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1330 if (s && memEQs(key, klen, "PATH")) {
1331 const char * const strend = s + len;
1332 #ifdef __VMS /* Hmm. How do we get $Config{path_sep} from C? */
1333 const char path_sep = PL_perllib_sep;
1335 const char path_sep = ':';
1339 /* Does this apply for VMS?
1340 * Empty PATH on linux is treated same as ".", which is forbidden
1341 * under taint. So check if the PATH variable is empty. */
1343 MgTAINTEDDIR_on(mg);
1347 /* set MGf_TAINTEDDIR if any component of the new path is
1348 * relative or world-writeable */
1349 while (s < strend) {
1353 s = delimcpy_no_escape(tmpbuf, tmpbuf + sizeof tmpbuf,
1354 s, strend, path_sep, &i);
1356 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1358 /* no colon thus no device name -- assume relative path */
1359 || (PL_perllib_sep != ':' && !strchr(tmpbuf, ':'))
1360 /* Using Unix separator, e.g. under bash, so act line Unix */
1361 || (PL_perllib_sep == ':' && *tmpbuf != '/')
1363 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1364 || s == strend /* trailing empty component -- same as "." */
1366 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1367 MgTAINTEDDIR_on(mg);
1373 #endif /* neither OS2 nor WIN32 */
1379 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1381 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1382 PERL_UNUSED_ARG(sv);
1383 my_setenv(MgPV_nolen_const(mg),NULL);
1388 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1390 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1391 PERL_UNUSED_ARG(mg);
1393 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1395 if (PL_localizing) {
1398 hv_iterinit(MUTABLE_HV(sv));
1399 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1401 my_setenv(hv_iterkey(entry, &keylen),
1402 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1410 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1412 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1413 PERL_UNUSED_ARG(sv);
1414 PERL_UNUSED_ARG(mg);
1416 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1424 #ifdef HAS_SIGPROCMASK
1426 restore_sigmask(pTHX_ SV *save_sv)
1428 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1429 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1433 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1435 /* Are we fetching a signal entry? */
1436 int i = (I16)mg->mg_private;
1438 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1442 const char * sig = MgPV_const(mg, siglen);
1443 mg->mg_private = i = whichsig_pvn(sig, siglen);
1448 sv_setsv(sv,PL_psig_ptr[i]);
1450 Sighandler_t sigstate = rsignal_state(i);
1451 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1452 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1455 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1456 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1459 /* cache state so we don't fetch it again */
1460 if(sigstate == (Sighandler_t) SIG_IGN)
1461 sv_setpvs(sv,"IGNORE");
1464 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1471 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1473 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1475 magic_setsig(NULL, mg);
1476 return sv_unmagic(sv, mg->mg_type);
1480 #ifdef PERL_USE_3ARG_SIGHANDLER
1482 Perl_csighandler(int sig, Siginfo_t *sip, void *uap)
1484 Perl_csighandler3(sig, sip, uap);
1488 Perl_csighandler(int sig)
1490 Perl_csighandler3(sig, NULL, NULL);
1495 Perl_csighandler1(int sig)
1497 Perl_csighandler3(sig, NULL, NULL);
1500 /* Handler intended to directly handle signal calls from the kernel.
1501 * (Depending on configuration, the kernel may actually call one of the
1502 * wrappers csighandler() or csighandler1() instead.)
1503 * It either queues up the signal or dispatches it immediately depending
1504 * on whether safe signals are enabled and whether the signal is capable
1505 * of being deferred (e.g. SEGV isn't).
1509 Perl_csighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1511 #ifdef PERL_GET_SIG_CONTEXT
1512 dTHXa(PERL_GET_SIG_CONTEXT);
1517 #ifdef PERL_USE_3ARG_SIGHANDLER
1518 #if defined(__cplusplus) && defined(__GNUC__)
1519 /* g++ doesn't support PERL_UNUSED_DECL, so the sip and uap
1520 * parameters would be warned about. */
1521 PERL_UNUSED_ARG(sip);
1522 PERL_UNUSED_ARG(uap);
1526 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1527 (void) rsignal(sig, PL_csighandlerp);
1528 if (PL_sig_ignoring[sig]) return;
1530 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1531 if (PL_sig_defaulting[sig])
1532 #ifdef KILL_BY_SIGPRC
1533 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1551 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1552 /* Call the perl level handler now--
1553 * with risk we may be in malloc() or being destructed etc. */
1555 if (PL_sighandlerp == Perl_sighandler)
1556 /* default handler, so can call perly_sighandler() directly
1557 * rather than via Perl_sighandler, passing the extra
1558 * 'safe = false' arg
1560 Perl_perly_sighandler(sig, NULL, NULL, 0 /* unsafe */);
1562 #ifdef PERL_USE_3ARG_SIGHANDLER
1563 (*PL_sighandlerp)(sig, NULL, NULL);
1565 (*PL_sighandlerp)(sig);
1569 if (!PL_psig_pend) return;
1570 /* Set a flag to say this signal is pending, that is awaiting delivery after
1571 * the current Perl opcode completes */
1572 PL_psig_pend[sig]++;
1574 #ifndef SIG_PENDING_DIE_COUNT
1575 # define SIG_PENDING_DIE_COUNT 120
1577 /* Add one to say _a_ signal is pending */
1578 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1579 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1580 (unsigned long)SIG_PENDING_DIE_COUNT);
1584 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1586 Perl_csighandler_init(void)
1589 if (PL_sig_handlers_initted) return;
1591 for (sig = 1; sig < SIG_SIZE; sig++) {
1592 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1594 PL_sig_defaulting[sig] = 1;
1595 (void) rsignal(sig, PL_csighandlerp);
1597 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1598 PL_sig_ignoring[sig] = 0;
1601 PL_sig_handlers_initted = 1;
1605 #if defined HAS_SIGPROCMASK
1607 unblock_sigmask(pTHX_ void* newset)
1609 PERL_UNUSED_CONTEXT;
1610 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1615 Perl_despatch_signals(pTHX)
1619 for (sig = 1; sig < SIG_SIZE; sig++) {
1620 if (PL_psig_pend[sig]) {
1622 #ifdef HAS_SIGPROCMASK
1623 /* From sigaction(2) (FreeBSD man page):
1624 * | Signal routines normally execute with the signal that
1625 * | caused their invocation blocked, but other signals may
1627 * Emulation of this behavior (from within Perl) is enabled
1631 sigset_t newset, oldset;
1633 sigemptyset(&newset);
1634 sigaddset(&newset, sig);
1635 sigprocmask(SIG_BLOCK, &newset, &oldset);
1636 was_blocked = sigismember(&oldset, sig);
1638 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1640 SAVEFREESV(save_sv);
1641 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1644 PL_psig_pend[sig] = 0;
1645 if (PL_sighandlerp == Perl_sighandler)
1646 /* default handler, so can call perly_sighandler() directly
1647 * rather than via Perl_sighandler, passing the extra
1650 Perl_perly_sighandler(sig, NULL, NULL, 1 /* safe */);
1652 #ifdef PERL_USE_3ARG_SIGHANDLER
1653 (*PL_sighandlerp)(sig, NULL, NULL);
1655 (*PL_sighandlerp)(sig);
1658 #ifdef HAS_SIGPROCMASK
1667 /* sv of NULL signifies that we're acting as magic_clearsig. */
1669 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1673 /* Need to be careful with SvREFCNT_dec(), because that can have side
1674 * effects (due to closures). We must make sure that the new disposition
1675 * is in place before it is called.
1679 #ifdef HAS_SIGPROCMASK
1683 const char *s = MgPV_const(mg,len);
1685 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1688 if (memEQs(s, len, "__DIE__"))
1690 else if (memEQs(s, len, "__WARN__")
1691 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1692 /* Merge the existing behaviours, which are as follows:
1693 magic_setsig, we always set svp to &PL_warnhook
1694 (hence we always change the warnings handler)
1695 For magic_clearsig, we don't change the warnings handler if it's
1696 set to the &PL_warnhook. */
1699 SV *tmp = sv_newmortal();
1700 Perl_croak(aTHX_ "No such hook: %s",
1701 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1705 if (*svp != PERL_WARNHOOK_FATAL)
1711 i = (I16)mg->mg_private;
1713 i = whichsig_pvn(s, len); /* ...no, a brick */
1714 mg->mg_private = (U16)i;
1718 SV *tmp = sv_newmortal();
1719 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1720 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1724 #ifdef HAS_SIGPROCMASK
1725 /* Avoid having the signal arrive at a bad time, if possible. */
1728 sigprocmask(SIG_BLOCK, &set, &save);
1730 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1731 SAVEFREESV(save_sv);
1732 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1735 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1736 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1738 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1739 PL_sig_ignoring[i] = 0;
1741 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1742 PL_sig_defaulting[i] = 0;
1744 to_dec = PL_psig_ptr[i];
1746 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1747 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1749 /* Signals don't change name during the program's execution, so once
1750 they're cached in the appropriate slot of PL_psig_name, they can
1753 Ideally we'd find some way of making SVs at (C) compile time, or
1754 at least, doing most of the work. */
1755 if (!PL_psig_name[i]) {
1756 const char* name = PL_sig_name[i];
1757 PL_psig_name[i] = newSVpvn(name, strlen(name));
1758 SvREADONLY_on(PL_psig_name[i]);
1761 SvREFCNT_dec(PL_psig_name[i]);
1762 PL_psig_name[i] = NULL;
1763 PL_psig_ptr[i] = NULL;
1766 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1768 (void)rsignal(i, PL_csighandlerp);
1771 *svp = SvREFCNT_inc_simple_NN(sv);
1773 if (sv && SvOK(sv)) {
1774 s = SvPV_force(sv, len);
1778 if (sv && memEQs(s, len,"IGNORE")) {
1780 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1781 PL_sig_ignoring[i] = 1;
1782 (void)rsignal(i, PL_csighandlerp);
1784 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1788 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1790 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1791 PL_sig_defaulting[i] = 1;
1792 (void)rsignal(i, PL_csighandlerp);
1794 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1800 * We should warn if HINT_STRICT_REFS, but without
1801 * access to a known hint bit in a known OP, we can't
1802 * tell whether HINT_STRICT_REFS is in force or not.
1804 if (!memchr(s, ':', len) && !memchr(s, '\'', len))
1805 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1808 (void)rsignal(i, PL_csighandlerp);
1810 *svp = SvREFCNT_inc_simple_NN(sv);
1814 #ifdef HAS_SIGPROCMASK
1818 SvREFCNT_dec(to_dec);
1821 #endif /* !PERL_MICRO */
1824 Perl_magic_setsigall(pTHX_ SV* sv, MAGIC* mg)
1826 PERL_ARGS_ASSERT_MAGIC_SETSIGALL;
1827 PERL_UNUSED_ARG(mg);
1829 if (PL_localizing == 2) {
1833 while ((current = hv_iternext(hv))) {
1834 SV* sigelem = hv_iterval(hv, current);
1842 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1844 PERL_ARGS_ASSERT_MAGIC_SETISA;
1845 PERL_UNUSED_ARG(sv);
1847 /* Skip _isaelem because _isa will handle it shortly */
1848 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1851 return magic_clearisa(NULL, mg);
1854 /* sv of NULL signifies that we're acting as magic_setisa. */
1856 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1859 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1861 /* Bail out if destruction is going on */
1862 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1865 av_clear(MUTABLE_AV(sv));
1867 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1868 /* This occurs with setisa_elem magic, which calls this
1870 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1873 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1874 SV **svp = AvARRAY((AV *)mg->mg_obj);
1875 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1877 stash = GvSTASH((GV *)*svp++);
1878 if (stash && HvHasENAME(stash)) mro_isa_changed_in(stash);
1885 (const GV *)mg->mg_obj
1888 /* The stash may have been detached from the symbol table, so check its
1889 name before doing anything. */
1890 if (stash && HvHasENAME(stash))
1891 mro_isa_changed_in(stash);
1897 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1899 HV * const hv = MUTABLE_HV(LvTARG(sv));
1902 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1903 PERL_UNUSED_ARG(mg);
1906 (void) hv_iterinit(hv);
1907 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1910 while (hv_iternext(hv))
1915 sv_setiv(sv, (IV)i);
1920 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1922 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1923 PERL_UNUSED_ARG(mg);
1925 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1931 =for apidoc_section $magic
1932 =for apidoc magic_methcall
1934 Invoke a magic method (like FETCH).
1936 C<sv> and C<mg> are the tied thingy and the tie magic.
1938 C<meth> is the name of the method to call.
1940 C<argc> is the number of args (in addition to $self) to pass to the method.
1942 The C<flags> can be:
1944 G_DISCARD invoke method with G_DISCARD flag and don't
1946 G_UNDEF_FILL fill the stack with argc pointers to
1949 The arguments themselves are any values following the C<flags> argument.
1951 Returns the SV (if any) returned by the method, or C<NULL> on failure.
1958 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1964 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1968 if (flags & G_WRITING_TO_STDERR) {
1972 SAVESPTR(PL_stderrgv);
1976 PUSHSTACKi(PERLSI_MAGIC);
1979 /* EXTEND() expects a signed argc; don't wrap when casting */
1980 assert(argc <= I32_MAX);
1981 EXTEND(SP, (I32)argc+1);
1982 PUSHs(SvTIED_obj(sv, mg));
1983 if (flags & G_UNDEF_FILL) {
1985 PUSHs(&PL_sv_undef);
1987 } else if (argc > 0) {
1989 va_start(args, argc);
1992 SV *const this_sv = va_arg(args, SV *);
1999 if (flags & G_DISCARD) {
2000 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
2003 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
2004 ret = *PL_stack_sp--;
2007 if (flags & G_WRITING_TO_STDERR)
2013 /* wrapper for magic_methcall that creates the first arg */
2016 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
2021 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
2024 if (mg->mg_len >= 0) {
2025 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
2027 else if (mg->mg_len == HEf_SVKEY)
2028 arg1 = MUTABLE_SV(mg->mg_ptr);
2030 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
2031 arg1 = newSViv((IV)(mg->mg_len));
2035 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
2037 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
2041 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
2045 PERL_ARGS_ASSERT_MAGIC_METHPACK;
2047 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
2054 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
2056 PERL_ARGS_ASSERT_MAGIC_GETPACK;
2058 if (mg->mg_type == PERL_MAGIC_tiedelem)
2059 mg->mg_flags |= MGf_GSKIP;
2060 magic_methpack(sv,mg,SV_CONST(FETCH));
2065 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
2070 PERL_ARGS_ASSERT_MAGIC_SETPACK;
2072 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
2073 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
2074 * public flags indicate its value based on copying from $val. Doing
2075 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
2076 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
2077 * wrong if $val happened to be tainted, as sv hasn't got magic
2078 * enabled, even though taint magic is in the chain. In which case,
2079 * fake up a temporary tainted value (this is easier than temporarily
2080 * re-enabling magic on sv). */
2082 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
2083 && (tmg->mg_len & 1))
2085 val = sv_mortalcopy(sv);
2091 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
2096 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
2098 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
2100 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
2101 return magic_methpack(sv,mg,SV_CONST(DELETE));
2106 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
2111 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
2113 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
2115 retval = SvIV(retsv)-1;
2117 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
2119 return (U32) retval;
2123 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
2125 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
2127 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
2132 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
2136 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
2138 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
2139 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
2146 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
2148 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
2150 return magic_methpack(sv,mg,SV_CONST(EXISTS));
2154 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
2157 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
2158 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
2160 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
2162 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
2164 if (HvEITER_get(hv))
2165 /* we are in an iteration so the hash cannot be empty */
2167 /* no xhv_eiter so now use FIRSTKEY */
2168 key = sv_newmortal();
2169 magic_nextpack(MUTABLE_SV(hv), mg, key);
2170 HvEITER_set(hv, NULL); /* need to reset iterator */
2171 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
2174 /* there is a SCALAR method that we can call */
2175 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
2177 retval = &PL_sv_undef;
2182 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
2186 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
2188 /* The magic ptr/len for the debugger's hash should always be an SV. */
2189 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
2190 Perl_croak(aTHX_ "panic: magic_setdbline len=%" IVdf ", ptr='%s'",
2191 (IV)mg->mg_len, mg->mg_ptr);
2194 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
2195 setting/clearing debugger breakpoints is not a hot path. */
2196 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
2197 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2199 if (svp && SvIOKp(*svp)) {
2200 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2202 #ifdef PERL_DEBUG_READONLY_OPS
2203 Slab_to_rw(OpSLAB(o));
2205 /* set or clear breakpoint in the relevant control op */
2207 o->op_flags |= OPf_SPECIAL;
2209 o->op_flags &= ~OPf_SPECIAL;
2210 #ifdef PERL_DEBUG_READONLY_OPS
2211 Slab_to_ro(OpSLAB(o));
2219 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2221 AV * const obj = MUTABLE_AV(mg->mg_obj);
2223 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2226 sv_setiv(sv, AvFILL(obj));
2234 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2236 AV * const obj = MUTABLE_AV(mg->mg_obj);
2238 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2241 av_fill(obj, SvIV(sv));
2243 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2244 "Attempt to set length of freed array");
2250 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2252 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2253 PERL_UNUSED_ARG(sv);
2254 PERL_UNUSED_CONTEXT;
2256 /* Reset the iterator when the array is cleared */
2257 if (sizeof(IV) == sizeof(SSize_t)) {
2258 *((IV *) &(mg->mg_len)) = 0;
2261 *((IV *) mg->mg_ptr) = 0;
2268 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2270 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2271 PERL_UNUSED_ARG(sv);
2273 /* during global destruction, mg_obj may already have been freed */
2274 if (PL_in_clean_all)
2277 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2280 /* arylen scalar holds a pointer back to the array, but doesn't own a
2281 reference. Hence the we (the array) are about to go away with it
2282 still pointing at us. Clear its pointer, else it would be pointing
2283 at free memory. See the comment in sv_magic about reference loops,
2284 and why it can't own a reference to us. */
2291 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2293 SV* const lsv = LvTARG(sv);
2294 MAGIC * const found = mg_find_mglob(lsv);
2296 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2297 PERL_UNUSED_ARG(mg);
2299 if (found && found->mg_len != -1) {
2300 STRLEN i = found->mg_len;
2301 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2302 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2311 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2313 SV* const lsv = LvTARG(sv);
2319 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2320 PERL_UNUSED_ARG(mg);
2322 found = mg_find_mglob(lsv);
2326 found = sv_magicext_mglob(lsv);
2328 else if (!SvOK(sv)) {
2332 s = SvPV_const(lsv, len);
2337 const STRLEN ulen = sv_or_pv_len_utf8(lsv, s, len);
2347 else if (pos > (SSize_t)len)
2350 found->mg_len = pos;
2351 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2357 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2360 SV * const lsv = LvTARG(sv);
2361 const char * const tmps = SvPV_const(lsv,len);
2362 STRLEN offs = LvTARGOFF(sv);
2363 STRLEN rem = LvTARGLEN(sv);
2364 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2365 const bool negrem = LvFLAGS(sv) & LVf_NEG_LEN;
2367 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2368 PERL_UNUSED_ARG(mg);
2370 if (!translate_substr_offsets(
2371 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2372 negoff ? -(IV)offs : (IV)offs, !negoff,
2373 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2375 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2381 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2382 sv_setpvn(sv, tmps + offs, rem);
2389 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2391 STRLEN len, lsv_len, oldtarglen, newtarglen;
2392 const char * const tmps = SvPV_const(sv, len);
2393 SV * const lsv = LvTARG(sv);
2394 STRLEN lvoff = LvTARGOFF(sv);
2395 STRLEN lvlen = LvTARGLEN(sv);
2396 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2397 const bool neglen = LvFLAGS(sv) & LVf_NEG_LEN;
2399 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2400 PERL_UNUSED_ARG(mg);
2404 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2405 "Attempt to use reference as lvalue in substr"
2407 SvPV_force_nomg(lsv,lsv_len);
2408 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2409 if (!translate_substr_offsets(
2411 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2412 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2414 Perl_croak(aTHX_ "substr outside of string");
2417 sv_utf8_upgrade_nomg(lsv);
2418 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2419 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2420 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2423 else if (SvUTF8(lsv)) {
2425 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2427 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2428 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2432 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2435 if (!neglen) LvTARGLEN(sv) = newtarglen;
2436 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2442 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2444 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2445 PERL_UNUSED_ARG(sv);
2446 #ifdef NO_TAINT_SUPPORT
2447 PERL_UNUSED_ARG(mg);
2450 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1) && IN_PERL_RUNTIME);
2455 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2457 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2458 PERL_UNUSED_ARG(sv);
2460 /* update taint status */
2469 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2471 SV * const lsv = LvTARG(sv);
2472 char errflags = LvFLAGS(sv);
2474 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2475 PERL_UNUSED_ARG(mg);
2477 /* non-zero errflags implies deferred out-of-range condition */
2478 assert(!(errflags & ~(LVf_NEG_OFF|LVf_OUT_OF_RANGE)));
2479 sv_setuv(sv, errflags ? 0 : do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2485 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2487 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2488 PERL_UNUSED_ARG(mg);
2489 do_vecset(sv); /* XXX slurp this routine */
2494 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2497 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2498 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2500 if (LvTARGLEN(sv)) {
2502 SV * const ahv = LvTARG(sv);
2503 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2507 else if (LvSTARGOFF(sv) >= 0) {
2508 AV *const av = MUTABLE_AV(LvTARG(sv));
2509 if (LvSTARGOFF(sv) <= AvFILL(av))
2511 if (SvRMAGICAL(av)) {
2512 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2513 targ = svp ? *svp : NULL;
2516 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2519 if (targ && (targ != &PL_sv_undef)) {
2520 /* somebody else defined it for us */
2521 SvREFCNT_dec(LvTARG(sv));
2522 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2524 SvREFCNT_dec(mg->mg_obj);
2526 mg->mg_flags &= ~MGf_REFCOUNTED;
2535 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2537 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2539 sv_setsv(sv, defelem_target(sv, mg));
2544 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2546 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2547 PERL_UNUSED_ARG(mg);
2551 sv_setsv(LvTARG(sv), sv);
2552 SvSETMAGIC(LvTARG(sv));
2558 Perl_vivify_defelem(pTHX_ SV *sv)
2563 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2565 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2568 SV * const ahv = LvTARG(sv);
2569 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2572 if (!value || value == &PL_sv_undef)
2573 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2575 else if (LvSTARGOFF(sv) < 0)
2576 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2578 AV *const av = MUTABLE_AV(LvTARG(sv));
2579 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2580 LvTARG(sv) = NULL; /* array can't be extended */
2582 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2583 if (!svp || !(value = *svp))
2584 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2587 SvREFCNT_inc_simple_void(value);
2588 SvREFCNT_dec(LvTARG(sv));
2591 SvREFCNT_dec(mg->mg_obj);
2593 mg->mg_flags &= ~MGf_REFCOUNTED;
2597 Perl_magic_setnonelem(pTHX_ SV *sv, MAGIC *mg)
2599 PERL_ARGS_ASSERT_MAGIC_SETNONELEM;
2600 PERL_UNUSED_ARG(mg);
2601 sv_unmagic(sv, PERL_MAGIC_nonelem);
2606 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2608 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2609 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2614 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2616 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2617 PERL_UNUSED_CONTEXT;
2618 PERL_UNUSED_ARG(sv);
2625 Perl_magic_freemglob(pTHX_ SV *sv, MAGIC *mg)
2627 PERL_ARGS_ASSERT_MAGIC_FREEMGLOB;
2628 PERL_UNUSED_ARG(sv);
2630 /* pos() magic uses mg_len as a string position rather than a buffer
2631 * length, and mg_ptr is currently unused, so skip freeing.
2633 assert(mg->mg_type == PERL_MAGIC_regex_global && mg->mg_len >= -1);
2640 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2642 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2644 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2646 if (uf && uf->uf_set)
2647 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2652 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2654 const char type = mg->mg_type;
2656 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2658 assert( type == PERL_MAGIC_fm
2659 || type == PERL_MAGIC_qr
2660 || type == PERL_MAGIC_bm);
2661 return sv_unmagic(sv, type);
2664 #ifdef USE_LOCALE_COLLATE
2666 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2668 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2671 * RenE<eacute> Descartes said "I think not."
2672 * and vanished with a faint plop.
2674 PERL_UNUSED_CONTEXT;
2675 PERL_UNUSED_ARG(sv);
2677 Safefree(mg->mg_ptr);
2685 Perl_magic_freecollxfrm(pTHX_ SV *sv, MAGIC *mg)
2687 PERL_ARGS_ASSERT_MAGIC_FREECOLLXFRM;
2688 PERL_UNUSED_ARG(sv);
2690 /* Collate magic uses mg_len as a string length rather than a buffer
2691 * length, so we need to free even with mg_len == 0: hence we can't
2692 * rely on standard magic free handling */
2693 if (mg->mg_len >= 0) {
2694 assert(mg->mg_type == PERL_MAGIC_collxfrm);
2695 Safefree(mg->mg_ptr);
2701 #endif /* USE_LOCALE_COLLATE */
2703 /* Just clear the UTF-8 cache data. */
2705 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2707 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2708 PERL_UNUSED_CONTEXT;
2709 PERL_UNUSED_ARG(sv);
2710 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2712 mg->mg_len = -1; /* The mg_len holds the len cache. */
2717 Perl_magic_freeutf8(pTHX_ SV *sv, MAGIC *mg)
2719 PERL_ARGS_ASSERT_MAGIC_FREEUTF8;
2720 PERL_UNUSED_ARG(sv);
2722 /* utf8 magic uses mg_len as a string length rather than a buffer
2723 * length, so we need to free even with mg_len == 0: hence we can't
2724 * rely on standard magic free handling */
2725 assert(mg->mg_type == PERL_MAGIC_utf8 && mg->mg_len >= -1);
2726 Safefree(mg->mg_ptr);
2733 Perl_magic_setlvref(pTHX_ SV *sv, MAGIC *mg)
2735 const char *bad = NULL;
2736 PERL_ARGS_ASSERT_MAGIC_SETLVREF;
2737 if (!SvROK(sv)) Perl_croak(aTHX_ "Assigned value is not a reference");
2738 switch (mg->mg_private & OPpLVREF_TYPE) {
2740 if (SvTYPE(SvRV(sv)) > SVt_PVLV)
2744 if (SvTYPE(SvRV(sv)) != SVt_PVAV)
2748 if (SvTYPE(SvRV(sv)) != SVt_PVHV)
2752 if (SvTYPE(SvRV(sv)) != SVt_PVCV)
2756 /* diag_listed_as: Assigned value is not %s reference */
2757 Perl_croak(aTHX_ "Assigned value is not a%s reference", bad);
2758 switch (mg->mg_obj ? SvTYPE(mg->mg_obj) : 0) {
2761 SV * const old = PAD_SV(mg->mg_len);
2762 PAD_SETSV(mg->mg_len, SvREFCNT_inc_NN(SvRV(sv)));
2767 gv_setref(mg->mg_obj, sv);
2768 SvSETMAGIC(mg->mg_obj);
2771 av_store((AV *)mg->mg_obj, SvIV((SV *)mg->mg_ptr),
2772 SvREFCNT_inc_simple_NN(SvRV(sv)));
2775 (void)hv_store_ent((HV *)mg->mg_obj, (SV *)mg->mg_ptr,
2776 SvREFCNT_inc_simple_NN(SvRV(sv)), 0);
2778 if (mg->mg_flags & MGf_PERSIST)
2779 NOOP; /* This sv is in use as an iterator var and will be reused,
2780 so we must leave the magic. */
2782 /* This sv could be returned by the assignment op, so clear the
2783 magic, as lvrefs are an implementation detail that must not be
2784 leaked to the user. */
2785 sv_unmagic(sv, PERL_MAGIC_lvref);
2790 S_set_dollarzero(pTHX_ SV *sv)
2791 PERL_TSA_REQUIRES(PL_dollarzero_mutex)
2795 #ifdef HAS_SETPROCTITLE
2796 /* The BSDs don't show the argv[] in ps(1) output, they
2797 * show a string from the process struct and provide
2798 * the setproctitle() routine to manipulate that. */
2799 if (PL_origalen != 1) {
2800 s = SvPV_const(sv, len);
2801 # if __FreeBSD_version > 410001 || defined(__DragonFly__)
2802 /* The leading "-" removes the "perl: " prefix,
2803 * but not the "(perl) suffix from the ps(1)
2804 * output, because that's what ps(1) shows if the
2805 * argv[] is modified. */
2806 setproctitle("-%s", s);
2807 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2808 /* This doesn't really work if you assume that
2809 * $0 = 'foobar'; will wipe out 'perl' from the $0
2810 * because in ps(1) output the result will be like
2811 * sprintf("perl: %s (perl)", s)
2812 * I guess this is a security feature:
2813 * one (a user process) cannot get rid of the original name.
2815 setproctitle("%s", s);
2818 #elif defined(__hpux) && defined(PSTAT_SETCMD)
2819 if (PL_origalen != 1) {
2821 s = SvPV_const(sv, len);
2822 un.pst_command = (char *)s;
2823 pstat(PSTAT_SETCMD, un, len, 0, 0);
2826 if (PL_origalen > 1) {
2828 /* PL_origalen is set in perl_parse(). */
2829 s = SvPV_force(sv,len);
2830 if (len >= (STRLEN)PL_origalen-1) {
2831 /* Longer than original, will be truncated. We assume that
2832 * PL_origalen bytes are available. */
2833 Copy(s, PL_origargv[0], PL_origalen-1, char);
2836 /* Shorter than original, will be padded. */
2838 /* Special case for Mac OS X: see [perl #38868] */
2841 /* Is the space counterintuitive? Yes.
2842 * (You were expecting \0?)
2843 * Does it work? Seems to. (In Linux 2.4.20 at least.)
2845 const int pad = ' ';
2847 Copy(s, PL_origargv[0], len, char);
2848 PL_origargv[0][len] = 0;
2849 memset(PL_origargv[0] + len + 1,
2850 pad, PL_origalen - len - 1);
2852 PL_origargv[0][PL_origalen-1] = 0;
2853 for (i = 1; i < PL_origargc; i++)
2855 #ifdef HAS_PRCTL_SET_NAME
2856 /* Set the legacy process name in addition to the POSIX name on Linux */
2857 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
2858 /* diag_listed_as: SKIPME */
2859 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
2867 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2875 PERL_ARGS_ASSERT_MAGIC_SET;
2879 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2881 CALLREG_NUMBUF_STORE((REGEXP *)rx,paren,sv);
2883 /* Croak with a READONLY error when a numbered match var is
2884 * set without a previous pattern match. Unless it's C<local $1>
2887 if (!PL_localizing) {
2888 Perl_croak_no_modify();
2894 switch (*mg->mg_ptr) {
2895 case '\001': /* ^A */
2896 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2897 else SvOK_off(PL_bodytarget);
2898 FmLINES(PL_bodytarget) = 0;
2899 if (SvPOK(PL_bodytarget)) {
2900 char *s = SvPVX(PL_bodytarget);
2901 char *e = SvEND(PL_bodytarget);
2902 while ( ((s = (char *) memchr(s, '\n', e - s))) ) {
2903 FmLINES(PL_bodytarget)++;
2907 /* mg_set() has temporarily made sv non-magical */
2909 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2910 SvTAINTED_on(PL_bodytarget);
2912 SvTAINTED_off(PL_bodytarget);
2915 case '\003': /* ^C */
2916 PL_minus_c = cBOOL(SvIV(sv));
2919 case '\004': /* ^D */
2922 const char *s = SvPV_nolen_const(sv);
2923 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2924 if (DEBUG_x_TEST || DEBUG_B_TEST)
2925 dump_all_perl(!DEBUG_B_TEST);
2928 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2931 case '\005': /* ^E */
2932 if (*(mg->mg_ptr+1) == '\0') {
2934 set_vaxc_errno(SvIV(sv));
2935 #elif defined(WIN32)
2936 SetLastError( SvIV(sv) );
2938 os2_setsyserrno(SvIV(sv));
2940 /* will anyone ever use this? */
2941 SETERRNO(SvIV(sv), 4);
2944 else if (strEQ(mg->mg_ptr + 1, "NCODING") && SvOK(sv))
2945 Perl_croak(aTHX_ "${^ENCODING} is no longer supported");
2947 case '\006': /* ^F */
2948 if (mg->mg_ptr[1] == '\0') {
2949 PL_maxsysfd = SvIV(sv);
2952 case '\010': /* ^H */
2954 U32 save_hints = PL_hints;
2955 PL_hints = SvUV(sv);
2957 /* If wasn't UTF-8, and now is, notify the parser */
2958 if ((PL_hints & HINT_UTF8) && ! (save_hints & HINT_UTF8)) {
2959 notify_parser_that_changed_to_utf8();
2963 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2964 Safefree(PL_inplace);
2965 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2967 case '\016': /* ^N */
2968 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2969 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2971 case '\017': /* ^O */
2972 if (*(mg->mg_ptr+1) == '\0') {
2973 Safefree(PL_osname);
2976 TAINT_PROPER("assigning to $^O");
2977 PL_osname = savesvpv(sv);
2980 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2982 const char *const start = SvPV(sv, len);
2983 const char *out = (const char*)memchr(start, '\0', len);
2987 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2988 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2990 /* Opening for input is more common than opening for output, so
2991 ensure that hints for input are sooner on linked list. */
2992 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2994 : newSVpvs_flags("", SvUTF8(sv));
2995 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2998 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
3000 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
3004 case '\020': /* ^P */
3005 PL_perldb = SvIV(sv);
3006 if (PL_perldb && !PL_DBsingle)
3009 case '\024': /* ^T */
3011 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
3013 PL_basetime = (Time_t)SvIV(sv);
3016 case '\025': /* ^UTF8CACHE */
3017 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
3018 PL_utf8cache = (signed char) sv_2iv(sv);
3021 case '\027': /* ^W & $^WARNING_BITS */
3022 if (*(mg->mg_ptr+1) == '\0') {
3023 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3025 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
3026 | (i ? G_WARN_ON : G_WARN_OFF) ;
3029 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
3030 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3032 free_and_set_cop_warnings(&PL_compiling, pWARN_STD);
3037 int not_none = 0, not_all = 0;
3038 const U8 * const ptr = (const U8 *)SvPV_const(sv, len) ;
3039 for (i = 0 ; i < len ; ++i) {
3041 not_all |= ptr[i] ^ 0x55;
3044 free_and_set_cop_warnings(&PL_compiling, pWARN_NONE);
3045 } else if (len >= WARNsize && !not_all) {
3046 free_and_set_cop_warnings(&PL_compiling, pWARN_ALL);
3047 PL_dowarn |= G_WARN_ONCE ;
3051 const char *const p = SvPV_const(sv, len);
3053 free_and_set_cop_warnings(
3055 Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
3059 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
3060 PL_dowarn |= G_WARN_ONCE ;
3067 if (PL_localizing) {
3068 if (PL_localizing == 1)
3069 SAVESPTR(PL_last_in_gv);
3071 else if (SvOK(sv) && GvIO(PL_last_in_gv))
3072 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
3075 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
3076 IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3077 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3080 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
3081 IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3082 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3085 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
3088 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
3089 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
3090 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
3093 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
3097 IO * const io = GvIO(PL_defoutgv);
3100 if ((SvIV(sv)) == 0)
3101 IoFLAGS(io) &= ~IOf_FLUSH;
3103 if (!(IoFLAGS(io) & IOf_FLUSH)) {
3104 PerlIO *ofp = IoOFP(io);
3106 (void)PerlIO_flush(ofp);
3107 IoFLAGS(io) |= IOf_FLUSH;
3115 SV *referent = SvRV(sv);
3116 const char *reftype = sv_reftype(referent, 0);
3117 /* XXX: dodgy type check: This leaves me feeling dirty, but
3118 * the alternative is to copy pretty much the entire
3119 * sv_reftype() into this routine, or to do a full string
3120 * comparison on the return of sv_reftype() both of which
3121 * make me feel worse! NOTE, do not modify this comment
3122 * without reviewing the corresponding comment in
3123 * sv_reftype(). - Yves */
3124 if (reftype[0] == 'S' || reftype[0] == 'L') {
3125 IV val = SvIV(referent);
3127 sv_setsv(sv, PL_rs);
3128 Perl_croak(aTHX_ "Setting $/ to a reference to %s is forbidden",
3129 val < 0 ? "a negative integer" : "zero");
3132 sv_setsv(sv, PL_rs);
3133 /* diag_listed_as: Setting $/ to %s reference is forbidden */
3134 Perl_croak(aTHX_ "Setting $/ to a%s %s reference is forbidden",
3135 *reftype == 'A' ? "n" : "", reftype);
3138 SvREFCNT_dec(PL_rs);
3139 PL_rs = newSVsv(sv);
3143 SvREFCNT_dec(PL_ors_sv);
3145 PL_ors_sv = newSVsv(sv);
3153 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
3156 #ifdef COMPLEX_STATUS
3157 if (PL_localizing == 2) {
3158 SvUPGRADE(sv, SVt_PVLV);
3159 PL_statusvalue = LvTARGOFF(sv);
3160 PL_statusvalue_vms = LvTARGLEN(sv);
3164 #ifdef VMSISH_STATUS
3166 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
3169 STATUS_UNIX_EXIT_SET(SvIV(sv));
3174 # define PERL_VMS_BANG vaxc$errno
3176 # define PERL_VMS_BANG 0
3179 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
3180 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3182 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
3183 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3189 /* XXX $< currently silently ignores failures */
3190 const Uid_t new_uid = SvUID(sv);
3191 PL_delaymagic_uid = new_uid;
3192 if (PL_delaymagic) {
3193 PL_delaymagic |= DM_RUID;
3194 break; /* don't do magic till later */
3197 PERL_UNUSED_RESULT(setruid(new_uid));
3198 #elif defined(HAS_SETREUID)
3199 PERL_UNUSED_RESULT(setreuid(new_uid, (Uid_t)-1));
3200 #elif defined(HAS_SETRESUID)
3201 PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1));
3203 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
3205 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
3206 if (new_uid != 0 && PerlProc_getuid() == 0)
3207 PERL_UNUSED_RESULT(PerlProc_setuid(0));
3209 PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
3211 Perl_croak(aTHX_ "setruid() not implemented");
3218 /* XXX $> currently silently ignores failures */
3219 const Uid_t new_euid = SvUID(sv);
3220 PL_delaymagic_euid = new_euid;
3221 if (PL_delaymagic) {
3222 PL_delaymagic |= DM_EUID;
3223 break; /* don't do magic till later */
3226 PERL_UNUSED_RESULT(seteuid(new_euid));
3227 #elif defined(HAS_SETREUID)
3228 PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid));
3229 #elif defined(HAS_SETRESUID)
3230 PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1));
3232 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
3233 PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
3235 Perl_croak(aTHX_ "seteuid() not implemented");
3242 /* XXX $( currently silently ignores failures */
3243 const Gid_t new_gid = SvGID(sv);
3244 PL_delaymagic_gid = new_gid;
3245 if (PL_delaymagic) {
3246 PL_delaymagic |= DM_RGID;
3247 break; /* don't do magic till later */
3250 PERL_UNUSED_RESULT(setrgid(new_gid));
3251 #elif defined(HAS_SETREGID)
3252 PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1));
3253 #elif defined(HAS_SETRESGID)
3254 PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1));
3256 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
3257 PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
3259 Perl_croak(aTHX_ "setrgid() not implemented");
3266 /* (hv) best guess: maybe we'll need configure probes to do a better job,
3267 * but you can override it if you need to.
3270 #define INVALID_GID ((Gid_t)-1)
3272 /* XXX $) currently silently ignores failures */
3274 #ifdef HAS_SETGROUPS
3276 const char *p = SvPV_const(sv, len);
3277 Groups_t *gary = NULL;
3278 const char* p_end = p + len;
3279 const char* endptr = p_end;
3281 #ifdef _SC_NGROUPS_MAX
3282 int maxgrp = sysconf(_SC_NGROUPS_MAX);
3287 int maxgrp = NGROUPS;
3292 if (grok_atoUV(p, &uv, &endptr))
3293 new_egid = (Gid_t)uv;
3295 new_egid = INVALID_GID;
3298 for (i = 0; i < maxgrp; ++i) {
3308 Newx(gary, i + 1, Groups_t);
3310 Renew(gary, i + 1, Groups_t);
3311 if (grok_atoUV(p, &uv, &endptr))
3312 gary[i] = (Groups_t)uv;
3314 gary[i] = INVALID_GID;
3319 PERL_UNUSED_RESULT(setgroups(i, gary));
3322 #else /* HAS_SETGROUPS */
3323 new_egid = SvGID(sv);
3324 #endif /* HAS_SETGROUPS */
3325 PL_delaymagic_egid = new_egid;
3326 if (PL_delaymagic) {
3327 PL_delaymagic |= DM_EGID;
3328 break; /* don't do magic till later */
3331 PERL_UNUSED_RESULT(setegid(new_egid));
3332 #elif defined(HAS_SETREGID)
3333 PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid));
3334 #elif defined(HAS_SETRESGID)
3335 PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1));
3337 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
3338 PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
3340 Perl_croak(aTHX_ "setegid() not implemented");
3346 PL_chopset = SvPV_force(sv,len);
3349 /* Store the pid in mg->mg_obj so we can tell when a fork has
3350 occurred. mg->mg_obj points to *$ by default, so clear it. */
3351 if (isGV(mg->mg_obj)) {
3352 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
3353 SvREFCNT_dec(mg->mg_obj);
3354 mg->mg_flags |= MGf_REFCOUNTED;
3355 mg->mg_obj = newSViv((IV)PerlProc_getpid());
3357 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
3360 if (!sv_utf8_downgrade(sv, /* fail_ok */ TRUE)) {
3362 /* Since we are going to set the string's UTF8-encoded form
3363 as the process name we should update $0 itself to contain
3364 that same (UTF8-encoded) value. */
3365 sv_utf8_encode(GvSV(mg->mg_obj));
3367 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "$0");
3370 LOCK_DOLLARZERO_MUTEX;
3371 S_set_dollarzero(aTHX_ sv);
3372 UNLOCK_DOLLARZERO_MUTEX;
3379 =for apidoc_section $signals
3380 =for apidoc whichsig
3381 =for apidoc_item whichsig_pv
3382 =for apidoc_item whichsig_pvn
3383 =for apidoc_item whichsig_sv
3385 These all convert a signal name into its corresponding signal number;
3386 returning -1 if no corresponding number was found.
3388 They differ only in the source of the signal name:
3390 C<whichsig_pv> takes the name from the C<NUL>-terminated string starting at
3393 C<whichsig> is merely a different spelling, a synonym, of C<whichsig_pv>.
3395 C<whichsig_pvn> takes the name from the string starting at C<sig>, with length
3398 C<whichsig_sv> takes the name from the PV stored in the SV C<sigsv>.
3404 Perl_whichsig_sv(pTHX_ SV *sigsv)
3408 PERL_ARGS_ASSERT_WHICHSIG_SV;
3409 sigpv = SvPV_const(sigsv, siglen);
3410 return whichsig_pvn(sigpv, siglen);
3414 Perl_whichsig_pv(pTHX_ const char *sig)
3416 PERL_ARGS_ASSERT_WHICHSIG_PV;
3417 return whichsig_pvn(sig, strlen(sig));
3421 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3425 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3426 PERL_UNUSED_CONTEXT;
3428 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3429 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3430 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3432 if (memEQs(sig, len, "CHLD"))
3436 if (memEQs(sig, len, "CLD"))
3443 /* Perl_sighandler(), Perl_sighandler1(), Perl_sighandler3():
3444 * these three function are intended to be called by the OS as 'C' level
3445 * signal handler functions in the case where unsafe signals are being
3446 * used - i.e. they immediately invoke Perl_perly_sighandler() to call the
3447 * perl-level sighandler, rather than deferring.
3448 * In fact, the core itself will normally use Perl_csighandler as the
3449 * OS-level handler; that function will then decide whether to queue the
3450 * signal or call Perl_sighandler / Perl_perly_sighandler itself. So these
3451 * functions are more useful for e.g. POSIX.xs when it wants explicit
3452 * control of what's happening.
3456 #ifdef PERL_USE_3ARG_SIGHANDLER
3459 Perl_sighandler(int sig, Siginfo_t *sip, void *uap)
3461 Perl_perly_sighandler(sig, sip, uap, 0);
3467 Perl_sighandler(int sig)
3469 Perl_perly_sighandler(sig, NULL, NULL, 0);
3475 Perl_sighandler1(int sig)
3477 Perl_perly_sighandler(sig, NULL, NULL, 0);
3481 Perl_sighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
3483 Perl_perly_sighandler(sig, sip, uap, 0);
3487 /* Invoke the perl-level signal handler. This function is called either
3488 * directly from one of the C-level signals handlers (Perl_sighandler or
3489 * Perl_csighandler), or for safe signals, later from
3490 * Perl_despatch_signals() at a suitable safe point during execution.
3492 * 'safe' is a boolean indicating the latter call path.
3496 Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL,
3497 void *uap PERL_UNUSED_DECL, bool safe)
3499 #ifdef PERL_GET_SIG_CONTEXT
3500 dTHXa(PERL_GET_SIG_CONTEXT);
3507 SV * const tSv = PL_Sv;
3511 XPV * const tXpv = PL_Xpv;
3512 I32 old_ss_ix = PL_savestack_ix;
3513 SV *errsv_save = NULL;
3516 if (!PL_psig_ptr[sig]) {
3517 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3522 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3523 /* Max number of items pushed there is 3*n or 4. We cannot fix
3524 infinity, so we fix 4 (in fact 5): */
3525 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3527 PL_savestack_ix += 5; /* Protect save in progress. */
3528 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3531 /* sv_2cv is too complicated, try a simpler variant first: */
3532 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3533 || SvTYPE(cv) != SVt_PVCV) {
3535 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3538 if (!cv || !CvROOT(cv)) {
3539 const HEK * const hek = gv
3543 : cv && CvGV(cv) ? GvENAME_HEK(CvGV(cv)) : NULL;
3545 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3546 "SIG%s handler \"%" HEKf "\" not defined.\n",
3547 PL_sig_name[sig], HEKfARG(hek));
3548 /* diag_listed_as: SIG%s handler "%s" not defined */
3549 else Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3550 "SIG%s handler \"__ANON__\" not defined.\n",
3555 sv = PL_psig_name[sig]
3556 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3557 : newSVpv(PL_sig_name[sig],0);
3561 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3562 /* make sure our assumption about the size of the SAVEs are correct:
3563 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3564 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3567 PUSHSTACKi(PERLSI_SIGNAL);
3571 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3573 struct sigaction oact;
3575 if (sip && sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3577 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3578 /* The siginfo fields signo, code, errno, pid, uid,
3579 * addr, status, and band are defined by POSIX/SUSv3. */
3580 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3581 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3582 # ifdef HAS_SIGINFO_SI_ERRNO
3583 (void)hv_stores(sih, "errno", newSViv(sip->si_errno));
3585 # ifdef HAS_SIGINFO_SI_STATUS
3586 (void)hv_stores(sih, "status", newSViv(sip->si_status));
3588 # ifdef HAS_SIGINFO_SI_UID
3591 sv_setuid(uid, sip->si_uid);
3592 (void)hv_stores(sih, "uid", uid);
3595 # ifdef HAS_SIGINFO_SI_PID
3596 (void)hv_stores(sih, "pid", newSViv(sip->si_pid));
3598 # ifdef HAS_SIGINFO_SI_ADDR
3599 (void)hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3601 # ifdef HAS_SIGINFO_SI_BAND
3602 (void)hv_stores(sih, "band", newSViv(sip->si_band));
3606 mPUSHp((char *)sip, sizeof(*sip));
3614 errsv_save = newSVsv(ERRSV);
3616 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3620 SV * const errsv = ERRSV;
3621 if (SvTRUE_NN(errsv)) {
3622 SvREFCNT_dec(errsv_save);
3625 /* Handler "died", for example to get out of a restart-able read().
3626 * Before we re-do that on its behalf re-enable the signal which was
3627 * blocked by the system when we entered.
3629 # ifdef HAS_SIGPROCMASK
3631 /* safe signals called via dispatch_signals() set up a
3632 * savestack destructor, unblock_sigmask(), to
3633 * automatically unblock the handler at the end. If
3634 * instead we get here directly, we have to do it
3639 sigaddset(&set,sig);
3640 sigprocmask(SIG_UNBLOCK, &set, NULL);
3643 /* Not clear if this will work */
3644 /* XXX not clear if this should be protected by 'if (safe)'
3647 (void)rsignal(sig, SIG_IGN);
3648 (void)rsignal(sig, PL_csighandlerp);
3650 #endif /* !PERL_MICRO */
3655 sv_setsv(errsv, errsv_save);
3656 SvREFCNT_dec(errsv_save);
3661 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3662 PL_savestack_ix = old_ss_ix;
3664 SvREFCNT_dec_NN(sv);
3665 PL_op = myop; /* Apparently not needed... */
3667 PL_Sv = tSv; /* Restore global temporaries. */
3674 S_restore_magic(pTHX_ const void *p)
3676 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3677 SV* const sv = mgs->mgs_sv;
3683 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3684 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3686 SvFLAGS(sv) |= mgs->mgs_flags;
3691 bumped = mgs->mgs_bumped;
3692 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3694 /* If we're still on top of the stack, pop us off. (That condition
3695 * will be satisfied if restore_magic was called explicitly, but *not*
3696 * if it's being called via leave_scope.)
3697 * The reason for doing this is that otherwise, things like sv_2cv()
3698 * may leave alloc gunk on the savestack, and some code
3699 * (e.g. sighandler) doesn't expect that...
3701 if (PL_savestack_ix == mgs->mgs_ss_ix)
3703 UV popval = SSPOPUV;
3704 assert(popval == SAVEt_DESTRUCTOR_X);
3705 PL_savestack_ix -= 2;
3707 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3708 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3711 if (SvREFCNT(sv) == 1) {
3712 /* We hold the last reference to this SV, which implies that the
3713 SV was deleted as a side effect of the routines we called.
3714 So artificially keep it alive a bit longer.
3715 We avoid turning on the TEMP flag, which can cause the SV's
3716 buffer to get stolen (and maybe other stuff). */
3721 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3725 /* clean up the mess created by Perl_sighandler().
3726 * Note that this is only called during an exit in a signal handler;
3727 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3731 S_unwind_handler_stack(pTHX_ const void *p)
3735 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3739 =for apidoc_section $magic
3740 =for apidoc magic_sethint
3742 Triggered by a store to C<%^H>, records the key/value pair to
3743 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3744 anything that would need a deep copy. Maybe we should warn if we find a
3750 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3752 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3753 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3755 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3757 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3758 an alternative leaf in there, with PL_compiling.cop_hints being used if
3759 it's NULL. If needed for threads, the alternative could lock a mutex,
3760 or take other more complex action. */
3762 /* Something changed in %^H, so it will need to be restored on scope exit.
3763 Doing this here saves a lot of doing it manually in perl code (and
3764 forgetting to do it, and consequent subtle errors. */
3765 PL_hints |= HINT_LOCALIZE_HH;
3766 CopHINTHASH_set(&PL_compiling,
3767 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3768 magic_sethint_feature(key, NULL, 0, sv, 0);
3773 =for apidoc magic_clearhint
3775 Triggered by a delete from C<%^H>, records the key to
3776 C<PL_compiling.cop_hints_hash>.
3781 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3783 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3784 PERL_UNUSED_ARG(sv);
3786 PL_hints |= HINT_LOCALIZE_HH;
3787 CopHINTHASH_set(&PL_compiling,
3788 mg->mg_len == HEf_SVKEY
3789 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3790 MUTABLE_SV(mg->mg_ptr), 0, 0)
3791 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3792 mg->mg_ptr, mg->mg_len, 0, 0));
3793 if (mg->mg_len == HEf_SVKEY)
3794 magic_sethint_feature(MUTABLE_SV(mg->mg_ptr), NULL, 0, NULL, FALSE);
3796 magic_sethint_feature(NULL, mg->mg_ptr, mg->mg_len, NULL, FALSE);
3801 =for apidoc magic_clearhints
3803 Triggered by clearing C<%^H>, resets C<PL_compiling.cop_hints_hash>.
3808 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3810 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3811 PERL_UNUSED_ARG(sv);
3812 PERL_UNUSED_ARG(mg);
3813 cophh_free(CopHINTHASH_get(&PL_compiling));
3814 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3820 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3821 const char *name, I32 namlen)
3825 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3826 PERL_UNUSED_ARG(sv);
3827 PERL_UNUSED_ARG(name);
3828 PERL_UNUSED_ARG(namlen);
3830 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3831 nmg = mg_find(nsv, mg->mg_type);
3833 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3834 nmg->mg_ptr = mg->mg_ptr;
3835 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3836 nmg->mg_flags |= MGf_REFCOUNTED;
3841 Perl_magic_setdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3842 PERL_ARGS_ASSERT_MAGIC_SETDEBUGVAR;
3844 #if DBVARMG_SINGLE != 0
3845 assert(mg->mg_private >= DBVARMG_SINGLE);
3847 assert(mg->mg_private < DBVARMG_COUNT);
3849 PL_DBcontrol[mg->mg_private] = SvIV_nomg(sv);
3855 Perl_magic_getdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3856 PERL_ARGS_ASSERT_MAGIC_GETDEBUGVAR;
3858 #if DBVARMG_SINGLE != 0
3859 assert(mg->mg_private >= DBVARMG_SINGLE);
3861 assert(mg->mg_private < DBVARMG_COUNT);
3862 sv_setiv(sv, PL_DBcontrol[mg->mg_private]);
3868 * ex: set ts=8 sts=4 sw=4 et: