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 =for apidoc mg_length
303 Reports on the SV's length in bytes, calling length magic if available,
304 but does not set the UTF8 flag on C<sv>. It will fall back to 'get'
305 magic if there is no 'length' magic, but with no indication as to
306 whether it called 'get' magic. It assumes C<sv> is a C<PVMG> or
307 higher. Use C<sv_len()> instead.
313 Perl_mg_length(pTHX_ SV *sv)
318 PERL_ARGS_ASSERT_MG_LENGTH;
320 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
321 const MGVTBL * const vtbl = mg->mg_virtual;
322 if (vtbl && vtbl->svt_len) {
323 const I32 mgs_ix = SSNEW(sizeof(MGS));
324 save_magic(mgs_ix, sv);
325 /* omit MGf_GSKIP -- not changed here */
326 len = vtbl->svt_len(aTHX_ sv, mg);
327 restore_magic(INT2PTR(void*, (IV)mgs_ix));
332 (void)SvPV_const(sv, len);
337 Perl_mg_size(pTHX_ SV *sv)
341 PERL_ARGS_ASSERT_MG_SIZE;
343 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
344 const MGVTBL* const vtbl = mg->mg_virtual;
345 if (vtbl && vtbl->svt_len) {
346 const I32 mgs_ix = SSNEW(sizeof(MGS));
348 save_magic(mgs_ix, sv);
349 /* omit MGf_GSKIP -- not changed here */
350 len = vtbl->svt_len(aTHX_ sv, mg);
351 restore_magic(INT2PTR(void*, (IV)mgs_ix));
358 return AvFILLp((const AV *) sv); /* Fallback to non-tied array */
362 Perl_croak(aTHX_ "Size magic not implemented");
365 NOT_REACHED; /* NOTREACHED */
371 Clear something magical that the SV represents. See C<L</sv_magic>>.
377 Perl_mg_clear(pTHX_ SV *sv)
379 const I32 mgs_ix = SSNEW(sizeof(MGS));
383 PERL_ARGS_ASSERT_MG_CLEAR;
385 save_magic(mgs_ix, sv);
387 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
388 const MGVTBL* const vtbl = mg->mg_virtual;
389 /* omit GSKIP -- never set here */
391 nextmg = mg->mg_moremagic; /* it may delete itself */
393 if (vtbl && vtbl->svt_clear)
394 vtbl->svt_clear(aTHX_ sv, mg);
397 restore_magic(INT2PTR(void*, (IV)mgs_ix));
402 S_mg_findext_flags(const SV *sv, int type, const MGVTBL *vtbl, U32 flags)
409 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
410 if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) {
422 Finds the magic pointer for C<type> matching the SV. See C<L</sv_magic>>.
428 Perl_mg_find(const SV *sv, int type)
430 return S_mg_findext_flags(sv, type, NULL, 0);
434 =for apidoc mg_findext
436 Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
443 Perl_mg_findext(const SV *sv, int type, const MGVTBL *vtbl)
445 return S_mg_findext_flags(sv, type, vtbl, 1);
449 Perl_mg_find_mglob(pTHX_ SV *sv)
451 PERL_ARGS_ASSERT_MG_FIND_MGLOB;
452 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
453 /* This sv is only a delegate. //g magic must be attached to
458 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
459 return S_mg_findext_flags(sv, PERL_MAGIC_regex_global, 0, 0);
466 Copies the magic from one SV to another. See C<L</sv_magic>>.
472 Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
477 PERL_ARGS_ASSERT_MG_COPY;
479 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
480 const MGVTBL* const vtbl = mg->mg_virtual;
481 if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){
482 count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen);
485 const char type = mg->mg_type;
486 if (isUPPER(type) && type != PERL_MAGIC_uvar) {
488 (type == PERL_MAGIC_tied)
491 toLOWER(type), key, klen);
500 =for apidoc mg_localize
502 Copy some of the magic from an existing SV to new localized version of that
503 SV. Container magic (I<e.g.>, C<%ENV>, C<$1>, C<tie>)
504 gets copied, value magic doesn't (I<e.g.>,
507 If C<setmagic> is false then no set magic will be called on the new (empty) SV.
508 This typically means that assignment will soon follow (e.g. S<C<'local $x = $y'>>),
509 and that will handle the magic.
515 Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic)
519 PERL_ARGS_ASSERT_MG_LOCALIZE;
524 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
525 const MGVTBL* const vtbl = mg->mg_virtual;
526 if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
529 if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local)
530 (void)vtbl->svt_local(aTHX_ nsv, mg);
532 sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl,
533 mg->mg_ptr, mg->mg_len);
535 /* container types should remain read-only across localization */
536 SvFLAGS(nsv) |= SvREADONLY(sv);
539 if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) {
540 SvFLAGS(nsv) |= SvMAGICAL(sv);
549 #define mg_free_struct(sv, mg) S_mg_free_struct(aTHX_ sv, mg)
551 S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg)
553 const MGVTBL* const vtbl = mg->mg_virtual;
554 if (vtbl && vtbl->svt_free)
555 vtbl->svt_free(aTHX_ sv, mg);
558 Safefree(mg->mg_ptr);
559 else if (mg->mg_len == HEf_SVKEY)
560 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
562 if (mg->mg_flags & MGf_REFCOUNTED)
563 SvREFCNT_dec(mg->mg_obj);
570 Free any magic storage used by the SV. See C<L</sv_magic>>.
576 Perl_mg_free(pTHX_ SV *sv)
581 PERL_ARGS_ASSERT_MG_FREE;
583 for (mg = SvMAGIC(sv); mg; mg = moremagic) {
584 moremagic = mg->mg_moremagic;
585 mg_free_struct(sv, mg);
586 SvMAGIC_set(sv, moremagic);
588 SvMAGIC_set(sv, NULL);
594 =for apidoc mg_free_type
596 Remove any magic of type C<how> from the SV C<sv>. See L</sv_magic>.
602 Perl_mg_free_type(pTHX_ SV *sv, int how)
604 MAGIC *mg, *prevmg, *moremg;
605 PERL_ARGS_ASSERT_MG_FREE_TYPE;
606 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
607 moremg = mg->mg_moremagic;
608 if (mg->mg_type == how) {
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);
627 =for apidoc mg_freeext
629 Remove any magic of type C<how> using virtual table C<vtbl> from the
630 SV C<sv>. See L</sv_magic>.
632 C<mg_freeext(sv, how, NULL)> is equivalent to C<mg_free_type(sv, how)>.
638 Perl_mg_freeext(pTHX_ SV *sv, int how, const MGVTBL *vtbl)
640 MAGIC *mg, *prevmg, *moremg;
641 PERL_ARGS_ASSERT_MG_FREEEXT;
642 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
644 moremg = mg->mg_moremagic;
645 if (mg->mg_type == how && (vtbl == NULL || mg->mg_virtual == vtbl)) {
646 /* temporarily move to the head of the magic chain, in case
647 custom free code relies on this historical aspect of mg_free */
649 prevmg->mg_moremagic = moremg;
650 mg->mg_moremagic = SvMAGIC(sv);
653 newhead = mg->mg_moremagic;
654 mg_free_struct(sv, mg);
655 SvMAGIC_set(sv, newhead);
665 Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
669 PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT;
672 REGEXP * const rx = PM_GETRE(PL_curpm);
674 const SSize_t n = (SSize_t)mg->mg_obj;
675 if (n == '+') { /* @+ */
676 /* return the number possible */
677 return RX_NPARENS(rx);
678 } else { /* @- @^CAPTURE @{^CAPTURE} */
679 I32 paren = RX_LASTPAREN(rx);
681 /* return the last filled */
683 && (RX_OFFS(rx)[paren].start == -1
684 || RX_OFFS(rx)[paren].end == -1) )
690 /* @^CAPTURE @{^CAPTURE} */
691 return paren >= 0 ? (U32)(paren-1) : (U32)-1;
703 Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
705 PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET;
708 REGEXP * const rx = PM_GETRE(PL_curpm);
710 const SSize_t n = (SSize_t)mg->mg_obj;
711 /* @{^CAPTURE} does not contain $&, so we need to increment by 1 */
712 const I32 paren = mg->mg_len
713 + (n == '\003' ? 1 : 0);
718 if (paren <= (I32)RX_NPARENS(rx) &&
719 (s = RX_OFFS(rx)[paren].start) != -1 &&
720 (t = RX_OFFS(rx)[paren].end) != -1)
724 if (n == '+') /* @+ */
726 else if (n == '-') /* @- */
728 else { /* @^CAPTURE @{^CAPTURE} */
729 CALLREG_NUMBUF_FETCH(rx,paren,sv);
733 if (RX_MATCH_UTF8(rx)) {
734 const char * const b = RX_SUBBEG(rx);
736 i = RX_SUBCOFFSET(rx) +
738 (U8*)(b-RX_SUBOFFSET(rx)+i));
753 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
755 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
759 Perl_croak_no_modify();
760 NORETURN_FUNCTION_END;
763 #define SvRTRIM(sv) STMT_START { \
765 STRLEN len = SvCUR(sv); \
766 char * const p = SvPVX(sv); \
767 while (len > 0 && isSPACE(p[len-1])) \
769 SvCUR_set(sv, len); \
775 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
777 PERL_ARGS_ASSERT_EMULATE_COP_IO;
779 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
784 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
785 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
790 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
791 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
799 S_fixup_errno_string(pTHX_ SV* sv)
801 /* Do what is necessary to fixup the non-empty string in 'sv' for return to
804 PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING;
808 if(strEQ(SvPVX(sv), "")) {
809 sv_catpv(sv, UNKNOWN_ERRNO_MSG);
813 /* In some locales the error string may come back as UTF-8, in which
814 * case we should turn on that flag. This didn't use to happen, and to
815 * avoid as many possible backward compatibility issues as possible, we
816 * don't turn on the flag unless we have to. So the flag stays off for
817 * an entirely invariant string. We assume that if the string looks
818 * like UTF-8 in a single script, it really is UTF-8: "text in any
819 * other encoding that uses bytes with the high bit set is extremely
820 * unlikely to pass a UTF-8 validity test"
821 * (http://en.wikipedia.org/wiki/Charset_detection). There is a
822 * potential that we will get it wrong however, especially on short
823 * error message text, so do an additional check. */
824 if ( ! IN_BYTES /* respect 'use bytes' */
825 && is_utf8_non_invariant_string((U8*) SvPVX_const(sv), SvCUR(sv))
827 #ifdef USE_LOCALE_MESSAGES
829 && _is_cur_LC_category_utf8(LC_MESSAGES)
831 #else /* If can't check directly, at least can see if script is consistent,
832 under UTF-8, which gives us an extra measure of confidence. */
834 && isSCRIPT_RUN((const U8 *) SvPVX_const(sv), (U8 *) SvEND(sv),
835 TRUE) /* Means assume UTF-8 */
845 =for apidoc_section $errno
846 =for apidoc sv_string_from_errnum
848 Generates the message string describing an OS error and returns it as
849 an SV. C<errnum> must be a value that C<errno> could take, identifying
852 If C<tgtsv> is non-null then the string will be written into that SV
853 (overwriting existing content) and it will be returned. If C<tgtsv>
854 is a null pointer then the string will be written into a new mortal SV
855 which will be returned.
857 The message will be taken from whatever locale would be used by C<$!>,
858 and will be encoded in the SV in whatever manner would be used by C<$!>.
859 The details of this process are subject to future change. Currently,
860 the message is taken from the C locale by default (usually producing an
861 English message), and from the currently selected locale when in the scope
862 of the C<use locale> pragma. A heuristic attempt is made to decode the
863 message from the locale's character encoding, but it will only be decoded
864 as either UTF-8 or ISO-8859-1. It is always correctly decoded in a UTF-8
865 locale, usually in an ISO-8859-1 locale, and never in any other locale.
867 The SV is always returned containing an actual string, and with no other
868 OK bits set. Unlike C<$!>, a message is even yielded for C<errnum> zero
869 (meaning success), and if no useful message is available then a useless
870 string (currently empty) is returned.
876 Perl_sv_string_from_errnum(pTHX_ int errnum, SV *tgtsv)
880 tgtsv = sv_newmortal();
881 errstr = my_strerror(errnum);
883 sv_setpv(tgtsv, errstr);
884 fixup_errno_string(tgtsv);
897 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
900 const char *s = NULL;
902 const char * const remaining = mg->mg_ptr + 1;
905 PERL_ARGS_ASSERT_MAGIC_GET;
909 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
911 CALLREG_NUMBUF_FETCH(rx,paren,sv);
918 nextchar = *remaining;
919 switch (*mg->mg_ptr) {
920 case '\001': /* ^A */
921 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
924 if (SvTAINTED(PL_bodytarget))
927 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
928 if (nextchar == '\0') {
929 sv_setiv(sv, (IV)PL_minus_c);
931 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
932 sv_setiv(sv, (IV)STATUS_NATIVE);
936 case '\004': /* ^D */
937 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
939 case '\005': /* ^E */
940 if (nextchar != '\0') {
941 if (strEQ(remaining, "NCODING"))
946 #if defined(VMS) || defined(OS2) || defined(WIN32)
950 $DESCRIPTOR(msgdsc,msg);
951 sv_setnv(sv,(NV) vaxc$errno);
952 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
953 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
958 if (!(_emx_env & 0x200)) { /* Under DOS */
959 sv_setnv(sv, (NV)errno);
960 sv_setpv(sv, errno ? my_strerror(errno) : "");
962 if (errno != errno_isOS2) {
963 const int tmp = _syserrno();
964 if (tmp) /* 2nd call to _syserrno() makes it 0 */
967 sv_setnv(sv, (NV)Perl_rc);
968 sv_setpv(sv, os2error(Perl_rc));
970 if (SvOK(sv) && strNE(SvPVX(sv), "")) {
971 fixup_errno_string(sv);
973 # elif defined(WIN32)
975 const DWORD dwErr = GetLastError();
976 sv_setnv(sv, (NV)dwErr);
978 PerlProc_GetOSError(sv, dwErr);
979 fixup_errno_string(sv);
986 # error Missing code for platform
989 SvNOK_on(sv); /* what a wonderful hack! */
991 #endif /* End of platforms with special handling for $^E; others just fall
999 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
1001 sv_setnv(sv, (NV)errno);
1004 if (errno == errno_isOS2 || errno == errno_isOS2_set)
1005 sv_setpv(sv, os2error(Perl_rc));
1012 sv_string_from_errnum(errno, sv);
1013 /* If no useful string is available, don't
1014 * claim to have a string part. The SvNOK_on()
1015 * below will cause just the number part to be valid */
1023 SvNOK_on(sv); /* what a wonderful hack! */
1026 case '\006': /* ^F */
1027 if (nextchar == '\0') {
1028 sv_setiv(sv, (IV)PL_maxsysfd);
1031 case '\007': /* ^GLOBAL_PHASE */
1032 if (strEQ(remaining, "LOBAL_PHASE")) {
1033 sv_setpvn(sv, PL_phase_names[PL_phase],
1034 strlen(PL_phase_names[PL_phase]));
1037 case '\010': /* ^H */
1038 sv_setuv(sv, PL_hints);
1040 case '\011': /* ^I */ /* NOT \t in EBCDIC */
1041 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
1043 case '\014': /* ^LAST_FH */
1044 if (strEQ(remaining, "AST_FH")) {
1045 if (PL_last_in_gv && (SV*)PL_last_in_gv != &PL_sv_undef) {
1046 assert(isGV_with_GP(PL_last_in_gv));
1047 SV_CHECK_THINKFIRST_COW_DROP(sv);
1048 prepare_SV_for_RV(sv);
1050 SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv));
1058 case '\017': /* ^O & ^OPEN */
1059 if (nextchar == '\0') {
1060 sv_setpv(sv, PL_osname);
1063 else if (strEQ(remaining, "PEN")) {
1064 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
1068 sv_setiv(sv, (IV)PL_perldb);
1070 case '\023': /* ^S */
1071 if (nextchar == '\0') {
1072 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
1074 else if (PL_in_eval)
1075 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
1079 else if (strEQ(remaining, "AFE_LOCALES")) {
1081 #if ! defined(USE_ITHREADS) || defined(USE_THREAD_SAFE_LOCALE)
1083 sv_setuv(sv, (UV) 1);
1086 sv_setuv(sv, (UV) 0);
1092 case '\024': /* ^T */
1093 if (nextchar == '\0') {
1095 sv_setnv(sv, PL_basetime);
1097 sv_setiv(sv, (IV)PL_basetime);
1100 else if (strEQ(remaining, "AINT"))
1101 sv_setiv(sv, TAINTING_get
1102 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
1105 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
1106 if (strEQ(remaining, "NICODE"))
1107 sv_setuv(sv, (UV) PL_unicode);
1108 else if (strEQ(remaining, "TF8LOCALE"))
1109 sv_setuv(sv, (UV) PL_utf8locale);
1110 else if (strEQ(remaining, "TF8CACHE"))
1111 sv_setiv(sv, (IV) PL_utf8cache);
1113 case '\027': /* ^W & $^WARNING_BITS */
1114 if (nextchar == '\0')
1115 sv_setiv(sv, (IV)cBOOL(PL_dowarn & G_WARN_ON));
1116 else if (strEQ(remaining, "ARNING_BITS")) {
1117 if (PL_compiling.cop_warnings == pWARN_NONE) {
1118 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
1120 else if (PL_compiling.cop_warnings == pWARN_STD) {
1123 else if (PL_compiling.cop_warnings == pWARN_ALL) {
1124 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1127 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
1128 *PL_compiling.cop_warnings);
1132 else if (strEQ(remaining, "IN32_SLOPPY_STAT")) {
1133 sv_setiv(sv, w32_sloppystat);
1138 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1139 paren = RX_LASTPAREN(rx);
1141 goto do_numbuf_fetch;
1144 case '\016': /* ^N */
1145 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1146 paren = RX_LASTCLOSEPAREN(rx);
1148 goto do_numbuf_fetch;
1152 if (GvIO(PL_last_in_gv)) {
1153 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1158 sv_setiv(sv, (IV)STATUS_CURRENT);
1159 #ifdef COMPLEX_STATUS
1160 SvUPGRADE(sv, SVt_PVLV);
1161 LvTARGOFF(sv) = PL_statusvalue;
1162 LvTARGLEN(sv) = PL_statusvalue_vms;
1167 if (GvIOp(PL_defoutgv))
1168 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1172 sv_setpv(sv,GvENAME(PL_defoutgv));
1173 sv_catpvs(sv,"_TOP");
1177 if (GvIOp(PL_defoutgv))
1178 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1180 s = GvENAME(PL_defoutgv);
1184 if (GvIO(PL_defoutgv))
1185 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1188 if (GvIO(PL_defoutgv))
1189 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1192 if (GvIO(PL_defoutgv))
1193 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1202 if (GvIO(PL_defoutgv))
1203 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1207 sv_copypv(sv, PL_ors_sv);
1213 IV const pid = (IV)PerlProc_getpid();
1214 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1215 /* never set manually, or at least not since last fork */
1217 /* never unsafe, even if reading in a tainted expression */
1220 /* else a value has been assigned manually, so do nothing */
1224 sv_setuid(sv, PerlProc_getuid());
1227 sv_setuid(sv, PerlProc_geteuid());
1230 sv_setgid(sv, PerlProc_getgid());
1233 sv_setgid(sv, PerlProc_getegid());
1235 #ifdef HAS_GETGROUPS
1237 Groups_t *gary = NULL;
1238 I32 num_groups = getgroups(0, gary);
1239 if (num_groups > 0) {
1241 Newx(gary, num_groups, Groups_t);
1242 num_groups = getgroups(num_groups, gary);
1243 for (i = 0; i < num_groups; i++)
1244 Perl_sv_catpvf(aTHX_ sv, " %" IVdf, (IV)gary[i]);
1248 (void)SvIOK_on(sv); /* what a wonderful hack! */
1262 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1264 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1266 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1268 if (uf && uf->uf_val)
1269 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1274 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1276 STRLEN len = 0, klen;
1277 const char * const key = MgPV_const(mg,klen);
1280 PERL_ARGS_ASSERT_MAGIC_SETENV;
1284 /* defined environment variables are byte strings; unfortunately
1285 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1286 (void)SvPV_force_nomg_nolen(sv);
1287 sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1289 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1295 my_setenv(key, s); /* does the deed */
1297 #ifdef DYNAMIC_ENV_FETCH
1298 /* We just undefd an environment var. Is a replacement */
1299 /* waiting in the wings? */
1301 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1303 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1307 #if !defined(OS2) && !defined(WIN32) && !defined(MSDOS)
1308 /* And you'll never guess what the dog had */
1309 /* in its mouth... */
1311 MgTAINTEDDIR_off(mg);
1313 if (s && memEQs(key, klen, "DCL$PATH")) {
1314 char pathbuf[256], eltbuf[256], *cp, *elt;
1317 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1319 do { /* DCL$PATH may be a search list */
1320 while (1) { /* as may dev portion of any element */
1321 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1322 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1323 cando_by_name(S_IWUSR,0,elt) ) {
1324 MgTAINTEDDIR_on(mg);
1328 if ((cp = strchr(elt, ':')) != NULL)
1330 if (my_trnlnm(elt, eltbuf, j++))
1336 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1339 if (s && memEQs(key, klen, "PATH")) {
1340 const char * const strend = s + len;
1342 /* set MGf_TAINTEDDIR if any component of the new path is
1343 * relative or world-writeable */
1344 while (s < strend) {
1348 #ifdef __VMS /* Hmm. How do we get $Config{path_sep} from C? */
1349 const char path_sep = PL_perllib_sep;
1351 const char path_sep = ':';
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 */
1365 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1366 MgTAINTEDDIR_on(mg);
1372 #endif /* neither OS2 nor WIN32 nor MSDOS */
1378 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1380 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1381 PERL_UNUSED_ARG(sv);
1382 my_setenv(MgPV_nolen_const(mg),NULL);
1387 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1389 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1390 PERL_UNUSED_ARG(mg);
1392 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1394 if (PL_localizing) {
1397 hv_iterinit(MUTABLE_HV(sv));
1398 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1400 my_setenv(hv_iterkey(entry, &keylen),
1401 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1409 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1411 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1412 PERL_UNUSED_ARG(sv);
1413 PERL_UNUSED_ARG(mg);
1415 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1423 #ifdef HAS_SIGPROCMASK
1425 restore_sigmask(pTHX_ SV *save_sv)
1427 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1428 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1432 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1434 /* Are we fetching a signal entry? */
1435 int i = (I16)mg->mg_private;
1437 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1441 const char * sig = MgPV_const(mg, siglen);
1442 mg->mg_private = i = whichsig_pvn(sig, siglen);
1447 sv_setsv(sv,PL_psig_ptr[i]);
1449 Sighandler_t sigstate = rsignal_state(i);
1450 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1451 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1454 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1455 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1458 /* cache state so we don't fetch it again */
1459 if(sigstate == (Sighandler_t) SIG_IGN)
1460 sv_setpvs(sv,"IGNORE");
1463 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1470 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1472 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1474 magic_setsig(NULL, mg);
1475 return sv_unmagic(sv, mg->mg_type);
1479 #ifdef PERL_USE_3ARG_SIGHANDLER
1481 Perl_csighandler(int sig, Siginfo_t *sip, void *uap)
1483 Perl_csighandler3(sig, sip, uap);
1487 Perl_csighandler(int sig)
1489 Perl_csighandler3(sig, NULL, NULL);
1494 Perl_csighandler1(int sig)
1496 Perl_csighandler3(sig, NULL, NULL);
1499 /* Handler intended to directly handle signal calls from the kernel.
1500 * (Depending on configuration, the kernel may actually call one of the
1501 * wrappers csighandler() or csighandler1() instead.)
1502 * It either queues up the signal or dispatches it immediately depending
1503 * on whether safe signals are enabled and whether the signal is capable
1504 * of being deferred (e.g. SEGV isn't).
1508 Perl_csighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1510 #ifdef PERL_GET_SIG_CONTEXT
1511 dTHXa(PERL_GET_SIG_CONTEXT);
1516 #ifdef PERL_USE_3ARG_SIGHANDLER
1517 #if defined(__cplusplus) && defined(__GNUC__)
1518 /* g++ doesn't support PERL_UNUSED_DECL, so the sip and uap
1519 * parameters would be warned about. */
1520 PERL_UNUSED_ARG(sip);
1521 PERL_UNUSED_ARG(uap);
1525 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1526 (void) rsignal(sig, PL_csighandlerp);
1527 if (PL_sig_ignoring[sig]) return;
1529 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1530 if (PL_sig_defaulting[sig])
1531 #ifdef KILL_BY_SIGPRC
1532 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1547 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1548 /* Call the perl level handler now--
1549 * with risk we may be in malloc() or being destructed etc. */
1551 if (PL_sighandlerp == Perl_sighandler)
1552 /* default handler, so can call perly_sighandler() directly
1553 * rather than via Perl_sighandler, passing the extra
1554 * 'safe = false' arg
1556 Perl_perly_sighandler(sig, NULL, NULL, 0 /* unsafe */);
1558 #ifdef PERL_USE_3ARG_SIGHANDLER
1559 (*PL_sighandlerp)(sig, NULL, NULL);
1561 (*PL_sighandlerp)(sig);
1565 if (!PL_psig_pend) return;
1566 /* Set a flag to say this signal is pending, that is awaiting delivery after
1567 * the current Perl opcode completes */
1568 PL_psig_pend[sig]++;
1570 #ifndef SIG_PENDING_DIE_COUNT
1571 # define SIG_PENDING_DIE_COUNT 120
1573 /* Add one to say _a_ signal is pending */
1574 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1575 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1576 (unsigned long)SIG_PENDING_DIE_COUNT);
1580 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1582 Perl_csighandler_init(void)
1585 if (PL_sig_handlers_initted) return;
1587 for (sig = 1; sig < SIG_SIZE; sig++) {
1588 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1590 PL_sig_defaulting[sig] = 1;
1591 (void) rsignal(sig, PL_csighandlerp);
1593 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1594 PL_sig_ignoring[sig] = 0;
1597 PL_sig_handlers_initted = 1;
1601 #if defined HAS_SIGPROCMASK
1603 unblock_sigmask(pTHX_ void* newset)
1605 PERL_UNUSED_CONTEXT;
1606 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1611 Perl_despatch_signals(pTHX)
1615 for (sig = 1; sig < SIG_SIZE; sig++) {
1616 if (PL_psig_pend[sig]) {
1618 #ifdef HAS_SIGPROCMASK
1619 /* From sigaction(2) (FreeBSD man page):
1620 * | Signal routines normally execute with the signal that
1621 * | caused their invocation blocked, but other signals may
1623 * Emulation of this behavior (from within Perl) is enabled
1627 sigset_t newset, oldset;
1629 sigemptyset(&newset);
1630 sigaddset(&newset, sig);
1631 sigprocmask(SIG_BLOCK, &newset, &oldset);
1632 was_blocked = sigismember(&oldset, sig);
1634 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1636 SAVEFREESV(save_sv);
1637 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1640 PL_psig_pend[sig] = 0;
1641 if (PL_sighandlerp == Perl_sighandler)
1642 /* default handler, so can call perly_sighandler() directly
1643 * rather than via Perl_sighandler, passing the extra
1646 Perl_perly_sighandler(sig, NULL, NULL, 1 /* safe */);
1648 #ifdef PERL_USE_3ARG_SIGHANDLER
1649 (*PL_sighandlerp)(sig, NULL, NULL);
1651 (*PL_sighandlerp)(sig);
1654 #ifdef HAS_SIGPROCMASK
1663 /* sv of NULL signifies that we're acting as magic_clearsig. */
1665 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1669 /* Need to be careful with SvREFCNT_dec(), because that can have side
1670 * effects (due to closures). We must make sure that the new disposition
1671 * is in place before it is called.
1675 #ifdef HAS_SIGPROCMASK
1679 const char *s = MgPV_const(mg,len);
1681 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1684 if (memEQs(s, len, "__DIE__"))
1686 else if (memEQs(s, len, "__WARN__")
1687 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1688 /* Merge the existing behaviours, which are as follows:
1689 magic_setsig, we always set svp to &PL_warnhook
1690 (hence we always change the warnings handler)
1691 For magic_clearsig, we don't change the warnings handler if it's
1692 set to the &PL_warnhook. */
1695 SV *tmp = sv_newmortal();
1696 Perl_croak(aTHX_ "No such hook: %s",
1697 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1701 if (*svp != PERL_WARNHOOK_FATAL)
1707 i = (I16)mg->mg_private;
1709 i = whichsig_pvn(s, len); /* ...no, a brick */
1710 mg->mg_private = (U16)i;
1714 SV *tmp = sv_newmortal();
1715 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1716 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1720 #ifdef HAS_SIGPROCMASK
1721 /* Avoid having the signal arrive at a bad time, if possible. */
1724 sigprocmask(SIG_BLOCK, &set, &save);
1726 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1727 SAVEFREESV(save_sv);
1728 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1731 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1732 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1734 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1735 PL_sig_ignoring[i] = 0;
1737 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1738 PL_sig_defaulting[i] = 0;
1740 to_dec = PL_psig_ptr[i];
1742 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1743 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1745 /* Signals don't change name during the program's execution, so once
1746 they're cached in the appropriate slot of PL_psig_name, they can
1749 Ideally we'd find some way of making SVs at (C) compile time, or
1750 at least, doing most of the work. */
1751 if (!PL_psig_name[i]) {
1752 const char* name = PL_sig_name[i];
1753 PL_psig_name[i] = newSVpvn(name, strlen(name));
1754 SvREADONLY_on(PL_psig_name[i]);
1757 SvREFCNT_dec(PL_psig_name[i]);
1758 PL_psig_name[i] = NULL;
1759 PL_psig_ptr[i] = NULL;
1762 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1764 (void)rsignal(i, PL_csighandlerp);
1767 *svp = SvREFCNT_inc_simple_NN(sv);
1769 if (sv && SvOK(sv)) {
1770 s = SvPV_force(sv, len);
1774 if (sv && memEQs(s, len,"IGNORE")) {
1776 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1777 PL_sig_ignoring[i] = 1;
1778 (void)rsignal(i, PL_csighandlerp);
1780 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1784 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1786 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1787 PL_sig_defaulting[i] = 1;
1788 (void)rsignal(i, PL_csighandlerp);
1790 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1796 * We should warn if HINT_STRICT_REFS, but without
1797 * access to a known hint bit in a known OP, we can't
1798 * tell whether HINT_STRICT_REFS is in force or not.
1800 if (!memchr(s, ':', len) && !memchr(s, '\'', len))
1801 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1804 (void)rsignal(i, PL_csighandlerp);
1806 *svp = SvREFCNT_inc_simple_NN(sv);
1810 #ifdef HAS_SIGPROCMASK
1814 SvREFCNT_dec(to_dec);
1817 #endif /* !PERL_MICRO */
1820 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1822 PERL_ARGS_ASSERT_MAGIC_SETISA;
1823 PERL_UNUSED_ARG(sv);
1825 /* Skip _isaelem because _isa will handle it shortly */
1826 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1829 return magic_clearisa(NULL, mg);
1832 /* sv of NULL signifies that we're acting as magic_setisa. */
1834 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1837 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1839 /* Bail out if destruction is going on */
1840 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1843 av_clear(MUTABLE_AV(sv));
1845 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1846 /* This occurs with setisa_elem magic, which calls this
1848 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1851 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1852 SV **svp = AvARRAY((AV *)mg->mg_obj);
1853 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1855 stash = GvSTASH((GV *)*svp++);
1856 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1863 (const GV *)mg->mg_obj
1866 /* The stash may have been detached from the symbol table, so check its
1867 name before doing anything. */
1868 if (stash && HvENAME_get(stash))
1869 mro_isa_changed_in(stash);
1875 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1877 HV * const hv = MUTABLE_HV(LvTARG(sv));
1880 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1881 PERL_UNUSED_ARG(mg);
1884 (void) hv_iterinit(hv);
1885 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1888 while (hv_iternext(hv))
1893 sv_setiv(sv, (IV)i);
1898 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1900 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1901 PERL_UNUSED_ARG(mg);
1903 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1909 =for apidoc_section $magic
1910 =for apidoc magic_methcall
1912 Invoke a magic method (like FETCH).
1914 C<sv> and C<mg> are the tied thingy and the tie magic.
1916 C<meth> is the name of the method to call.
1918 C<argc> is the number of args (in addition to $self) to pass to the method.
1920 The C<flags> can be:
1922 G_DISCARD invoke method with G_DISCARD flag and don't
1924 G_UNDEF_FILL fill the stack with argc pointers to
1927 The arguments themselves are any values following the C<flags> argument.
1929 Returns the SV (if any) returned by the method, or C<NULL> on failure.
1936 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1942 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1946 if (flags & G_WRITING_TO_STDERR) {
1950 SAVESPTR(PL_stderrgv);
1954 PUSHSTACKi(PERLSI_MAGIC);
1957 /* EXTEND() expects a signed argc; don't wrap when casting */
1958 assert(argc <= I32_MAX);
1959 EXTEND(SP, (I32)argc+1);
1960 PUSHs(SvTIED_obj(sv, mg));
1961 if (flags & G_UNDEF_FILL) {
1963 PUSHs(&PL_sv_undef);
1965 } else if (argc > 0) {
1967 va_start(args, argc);
1970 SV *const this_sv = va_arg(args, SV *);
1977 if (flags & G_DISCARD) {
1978 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
1981 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
1982 ret = *PL_stack_sp--;
1985 if (flags & G_WRITING_TO_STDERR)
1991 /* wrapper for magic_methcall that creates the first arg */
1994 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1999 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
2002 if (mg->mg_len >= 0) {
2003 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
2005 else if (mg->mg_len == HEf_SVKEY)
2006 arg1 = MUTABLE_SV(mg->mg_ptr);
2008 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
2009 arg1 = newSViv((IV)(mg->mg_len));
2013 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
2015 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
2019 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
2023 PERL_ARGS_ASSERT_MAGIC_METHPACK;
2025 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
2032 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
2034 PERL_ARGS_ASSERT_MAGIC_GETPACK;
2036 if (mg->mg_type == PERL_MAGIC_tiedelem)
2037 mg->mg_flags |= MGf_GSKIP;
2038 magic_methpack(sv,mg,SV_CONST(FETCH));
2043 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
2048 PERL_ARGS_ASSERT_MAGIC_SETPACK;
2050 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
2051 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
2052 * public flags indicate its value based on copying from $val. Doing
2053 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
2054 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
2055 * wrong if $val happened to be tainted, as sv hasn't got magic
2056 * enabled, even though taint magic is in the chain. In which case,
2057 * fake up a temporary tainted value (this is easier than temporarily
2058 * re-enabling magic on sv). */
2060 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
2061 && (tmg->mg_len & 1))
2063 val = sv_mortalcopy(sv);
2069 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
2074 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
2076 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
2078 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
2079 return magic_methpack(sv,mg,SV_CONST(DELETE));
2084 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
2089 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
2091 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
2093 retval = SvIV(retsv)-1;
2095 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
2097 return (U32) retval;
2101 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
2103 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
2105 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
2110 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
2114 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
2116 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
2117 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
2124 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
2126 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
2128 return magic_methpack(sv,mg,SV_CONST(EXISTS));
2132 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
2135 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
2136 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
2138 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
2140 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
2142 if (HvEITER_get(hv))
2143 /* we are in an iteration so the hash cannot be empty */
2145 /* no xhv_eiter so now use FIRSTKEY */
2146 key = sv_newmortal();
2147 magic_nextpack(MUTABLE_SV(hv), mg, key);
2148 HvEITER_set(hv, NULL); /* need to reset iterator */
2149 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
2152 /* there is a SCALAR method that we can call */
2153 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
2155 retval = &PL_sv_undef;
2160 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
2164 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
2166 /* The magic ptr/len for the debugger's hash should always be an SV. */
2167 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
2168 Perl_croak(aTHX_ "panic: magic_setdbline len=%" IVdf ", ptr='%s'",
2169 (IV)mg->mg_len, mg->mg_ptr);
2172 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
2173 setting/clearing debugger breakpoints is not a hot path. */
2174 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
2175 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2177 if (svp && SvIOKp(*svp)) {
2178 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2180 #ifdef PERL_DEBUG_READONLY_OPS
2181 Slab_to_rw(OpSLAB(o));
2183 /* set or clear breakpoint in the relevant control op */
2185 o->op_flags |= OPf_SPECIAL;
2187 o->op_flags &= ~OPf_SPECIAL;
2188 #ifdef PERL_DEBUG_READONLY_OPS
2189 Slab_to_ro(OpSLAB(o));
2197 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2199 AV * const obj = MUTABLE_AV(mg->mg_obj);
2201 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2204 sv_setiv(sv, AvFILL(obj));
2212 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2214 AV * const obj = MUTABLE_AV(mg->mg_obj);
2216 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2219 av_fill(obj, SvIV(sv));
2221 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2222 "Attempt to set length of freed array");
2228 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2230 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2231 PERL_UNUSED_ARG(sv);
2232 PERL_UNUSED_CONTEXT;
2234 /* Reset the iterator when the array is cleared */
2235 if (sizeof(IV) == sizeof(SSize_t)) {
2236 *((IV *) &(mg->mg_len)) = 0;
2239 *((IV *) mg->mg_ptr) = 0;
2246 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2248 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2249 PERL_UNUSED_ARG(sv);
2251 /* during global destruction, mg_obj may already have been freed */
2252 if (PL_in_clean_all)
2255 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2258 /* arylen scalar holds a pointer back to the array, but doesn't own a
2259 reference. Hence the we (the array) are about to go away with it
2260 still pointing at us. Clear its pointer, else it would be pointing
2261 at free memory. See the comment in sv_magic about reference loops,
2262 and why it can't own a reference to us. */
2269 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2271 SV* const lsv = LvTARG(sv);
2272 MAGIC * const found = mg_find_mglob(lsv);
2274 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2275 PERL_UNUSED_ARG(mg);
2277 if (found && found->mg_len != -1) {
2278 STRLEN i = found->mg_len;
2279 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2280 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2289 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2291 SV* const lsv = LvTARG(sv);
2297 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2298 PERL_UNUSED_ARG(mg);
2300 found = mg_find_mglob(lsv);
2304 found = sv_magicext_mglob(lsv);
2306 else if (!SvOK(sv)) {
2310 s = SvPV_const(lsv, len);
2315 const STRLEN ulen = sv_or_pv_len_utf8(lsv, s, len);
2325 else if (pos > (SSize_t)len)
2328 found->mg_len = pos;
2329 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2335 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2338 SV * const lsv = LvTARG(sv);
2339 const char * const tmps = SvPV_const(lsv,len);
2340 STRLEN offs = LvTARGOFF(sv);
2341 STRLEN rem = LvTARGLEN(sv);
2342 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2343 const bool negrem = LvFLAGS(sv) & LVf_NEG_LEN;
2345 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2346 PERL_UNUSED_ARG(mg);
2348 if (!translate_substr_offsets(
2349 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2350 negoff ? -(IV)offs : (IV)offs, !negoff,
2351 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2353 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2359 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2360 sv_setpvn(sv, tmps + offs, rem);
2367 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2369 STRLEN len, lsv_len, oldtarglen, newtarglen;
2370 const char * const tmps = SvPV_const(sv, len);
2371 SV * const lsv = LvTARG(sv);
2372 STRLEN lvoff = LvTARGOFF(sv);
2373 STRLEN lvlen = LvTARGLEN(sv);
2374 const bool negoff = LvFLAGS(sv) & LVf_NEG_OFF;
2375 const bool neglen = LvFLAGS(sv) & LVf_NEG_LEN;
2377 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2378 PERL_UNUSED_ARG(mg);
2382 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2383 "Attempt to use reference as lvalue in substr"
2385 SvPV_force_nomg(lsv,lsv_len);
2386 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2387 if (!translate_substr_offsets(
2389 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2390 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2392 Perl_croak(aTHX_ "substr outside of string");
2395 sv_utf8_upgrade_nomg(lsv);
2396 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2397 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2398 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2401 else if (SvUTF8(lsv)) {
2403 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2405 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2406 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2410 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2413 if (!neglen) LvTARGLEN(sv) = newtarglen;
2414 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2420 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2422 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2423 PERL_UNUSED_ARG(sv);
2424 #ifdef NO_TAINT_SUPPORT
2425 PERL_UNUSED_ARG(mg);
2428 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1) && IN_PERL_RUNTIME);
2433 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2435 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2436 PERL_UNUSED_ARG(sv);
2438 /* update taint status */
2447 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2449 SV * const lsv = LvTARG(sv);
2450 char errflags = LvFLAGS(sv);
2452 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2453 PERL_UNUSED_ARG(mg);
2455 /* non-zero errflags implies deferred out-of-range condition */
2456 assert(!(errflags & ~(LVf_NEG_OFF|LVf_OUT_OF_RANGE)));
2457 sv_setuv(sv, errflags ? 0 : do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2463 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2465 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2466 PERL_UNUSED_ARG(mg);
2467 do_vecset(sv); /* XXX slurp this routine */
2472 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2475 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2476 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2478 if (LvTARGLEN(sv)) {
2480 SV * const ahv = LvTARG(sv);
2481 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2485 else if (LvSTARGOFF(sv) >= 0) {
2486 AV *const av = MUTABLE_AV(LvTARG(sv));
2487 if (LvSTARGOFF(sv) <= AvFILL(av))
2489 if (SvRMAGICAL(av)) {
2490 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2491 targ = svp ? *svp : NULL;
2494 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2497 if (targ && (targ != &PL_sv_undef)) {
2498 /* somebody else defined it for us */
2499 SvREFCNT_dec(LvTARG(sv));
2500 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2502 SvREFCNT_dec(mg->mg_obj);
2504 mg->mg_flags &= ~MGf_REFCOUNTED;
2513 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2515 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2517 sv_setsv(sv, defelem_target(sv, mg));
2522 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2524 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2525 PERL_UNUSED_ARG(mg);
2529 sv_setsv(LvTARG(sv), sv);
2530 SvSETMAGIC(LvTARG(sv));
2536 Perl_vivify_defelem(pTHX_ SV *sv)
2541 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2543 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2546 SV * const ahv = LvTARG(sv);
2547 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2550 if (!value || value == &PL_sv_undef)
2551 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2553 else if (LvSTARGOFF(sv) < 0)
2554 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2556 AV *const av = MUTABLE_AV(LvTARG(sv));
2557 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2558 LvTARG(sv) = NULL; /* array can't be extended */
2560 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2561 if (!svp || !(value = *svp))
2562 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2565 SvREFCNT_inc_simple_void(value);
2566 SvREFCNT_dec(LvTARG(sv));
2569 SvREFCNT_dec(mg->mg_obj);
2571 mg->mg_flags &= ~MGf_REFCOUNTED;
2575 Perl_magic_setnonelem(pTHX_ SV *sv, MAGIC *mg)
2577 PERL_ARGS_ASSERT_MAGIC_SETNONELEM;
2578 PERL_UNUSED_ARG(mg);
2579 sv_unmagic(sv, PERL_MAGIC_nonelem);
2584 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2586 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2587 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2592 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2594 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2595 PERL_UNUSED_CONTEXT;
2596 PERL_UNUSED_ARG(sv);
2603 Perl_magic_freemglob(pTHX_ SV *sv, MAGIC *mg)
2605 PERL_ARGS_ASSERT_MAGIC_FREEMGLOB;
2606 PERL_UNUSED_ARG(sv);
2608 /* glob magic uses mg_len as a string length rather than a buffer
2609 * length, so we need to free even with mg_len == 0: hence we can't
2610 * rely on standard magic free handling */
2611 assert(mg->mg_type == PERL_MAGIC_regex_global && mg->mg_len >= -1);
2612 Safefree(mg->mg_ptr);
2619 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2621 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2623 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2625 if (uf && uf->uf_set)
2626 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2631 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2633 const char type = mg->mg_type;
2635 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2637 assert( type == PERL_MAGIC_fm
2638 || type == PERL_MAGIC_qr
2639 || type == PERL_MAGIC_bm);
2640 return sv_unmagic(sv, type);
2643 #ifdef USE_LOCALE_COLLATE
2645 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2647 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2650 * RenE<eacute> Descartes said "I think not."
2651 * and vanished with a faint plop.
2653 PERL_UNUSED_CONTEXT;
2654 PERL_UNUSED_ARG(sv);
2656 Safefree(mg->mg_ptr);
2664 Perl_magic_freecollxfrm(pTHX_ SV *sv, MAGIC *mg)
2666 PERL_ARGS_ASSERT_MAGIC_FREECOLLXFRM;
2667 PERL_UNUSED_ARG(sv);
2669 /* Collate magic uses mg_len as a string length rather than a buffer
2670 * length, so we need to free even with mg_len == 0: hence we can't
2671 * rely on standard magic free handling */
2672 if (mg->mg_len >= 0) {
2673 assert(mg->mg_type == PERL_MAGIC_collxfrm);
2674 Safefree(mg->mg_ptr);
2680 #endif /* USE_LOCALE_COLLATE */
2682 /* Just clear the UTF-8 cache data. */
2684 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2686 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2687 PERL_UNUSED_CONTEXT;
2688 PERL_UNUSED_ARG(sv);
2689 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2691 mg->mg_len = -1; /* The mg_len holds the len cache. */
2696 Perl_magic_freeutf8(pTHX_ SV *sv, MAGIC *mg)
2698 PERL_ARGS_ASSERT_MAGIC_FREEUTF8;
2699 PERL_UNUSED_ARG(sv);
2701 /* utf8 magic uses mg_len as a string length rather than a buffer
2702 * length, so we need to free even with mg_len == 0: hence we can't
2703 * rely on standard magic free handling */
2704 assert(mg->mg_type == PERL_MAGIC_utf8 && mg->mg_len >= -1);
2705 Safefree(mg->mg_ptr);
2712 Perl_magic_setlvref(pTHX_ SV *sv, MAGIC *mg)
2714 const char *bad = NULL;
2715 PERL_ARGS_ASSERT_MAGIC_SETLVREF;
2716 if (!SvROK(sv)) Perl_croak(aTHX_ "Assigned value is not a reference");
2717 switch (mg->mg_private & OPpLVREF_TYPE) {
2719 if (SvTYPE(SvRV(sv)) > SVt_PVLV)
2723 if (SvTYPE(SvRV(sv)) != SVt_PVAV)
2727 if (SvTYPE(SvRV(sv)) != SVt_PVHV)
2731 if (SvTYPE(SvRV(sv)) != SVt_PVCV)
2735 /* diag_listed_as: Assigned value is not %s reference */
2736 Perl_croak(aTHX_ "Assigned value is not a%s reference", bad);
2737 switch (mg->mg_obj ? SvTYPE(mg->mg_obj) : 0) {
2740 SV * const old = PAD_SV(mg->mg_len);
2741 PAD_SETSV(mg->mg_len, SvREFCNT_inc_NN(SvRV(sv)));
2746 gv_setref(mg->mg_obj, sv);
2747 SvSETMAGIC(mg->mg_obj);
2750 av_store((AV *)mg->mg_obj, SvIV((SV *)mg->mg_ptr),
2751 SvREFCNT_inc_simple_NN(SvRV(sv)));
2754 (void)hv_store_ent((HV *)mg->mg_obj, (SV *)mg->mg_ptr,
2755 SvREFCNT_inc_simple_NN(SvRV(sv)), 0);
2757 if (mg->mg_flags & MGf_PERSIST)
2758 NOOP; /* This sv is in use as an iterator var and will be reused,
2759 so we must leave the magic. */
2761 /* This sv could be returned by the assignment op, so clear the
2762 magic, as lvrefs are an implementation detail that must not be
2763 leaked to the user. */
2764 sv_unmagic(sv, PERL_MAGIC_lvref);
2769 S_set_dollarzero(pTHX_ SV *sv)
2770 PERL_TSA_REQUIRES(PL_dollarzero_mutex)
2776 #ifdef HAS_SETPROCTITLE
2777 /* The BSDs don't show the argv[] in ps(1) output, they
2778 * show a string from the process struct and provide
2779 * the setproctitle() routine to manipulate that. */
2780 if (PL_origalen != 1) {
2781 s = SvPV_const(sv, len);
2782 # if __FreeBSD_version > 410001 || defined(__DragonFly__)
2783 /* The leading "-" removes the "perl: " prefix,
2784 * but not the "(perl) suffix from the ps(1)
2785 * output, because that's what ps(1) shows if the
2786 * argv[] is modified. */
2787 setproctitle("-%s", s);
2788 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2789 /* This doesn't really work if you assume that
2790 * $0 = 'foobar'; will wipe out 'perl' from the $0
2791 * because in ps(1) output the result will be like
2792 * sprintf("perl: %s (perl)", s)
2793 * I guess this is a security feature:
2794 * one (a user process) cannot get rid of the original name.
2796 setproctitle("%s", s);
2799 #elif defined(__hpux) && defined(PSTAT_SETCMD)
2800 if (PL_origalen != 1) {
2802 s = SvPV_const(sv, len);
2803 un.pst_command = (char *)s;
2804 pstat(PSTAT_SETCMD, un, len, 0, 0);
2807 if (PL_origalen > 1) {
2809 /* PL_origalen is set in perl_parse(). */
2810 s = SvPV_force(sv,len);
2811 if (len >= (STRLEN)PL_origalen-1) {
2812 /* Longer than original, will be truncated. We assume that
2813 * PL_origalen bytes are available. */
2814 Copy(s, PL_origargv[0], PL_origalen-1, char);
2817 /* Shorter than original, will be padded. */
2819 /* Special case for Mac OS X: see [perl #38868] */
2822 /* Is the space counterintuitive? Yes.
2823 * (You were expecting \0?)
2824 * Does it work? Seems to. (In Linux 2.4.20 at least.)
2826 const int pad = ' ';
2828 Copy(s, PL_origargv[0], len, char);
2829 PL_origargv[0][len] = 0;
2830 memset(PL_origargv[0] + len + 1,
2831 pad, PL_origalen - len - 1);
2833 PL_origargv[0][PL_origalen-1] = 0;
2834 for (i = 1; i < PL_origargc; i++)
2836 #ifdef HAS_PRCTL_SET_NAME
2837 /* Set the legacy process name in addition to the POSIX name on Linux */
2838 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
2839 /* diag_listed_as: SKIPME */
2840 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
2848 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2858 PERL_ARGS_ASSERT_MAGIC_SET;
2862 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2864 CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv);
2866 /* Croak with a READONLY error when a numbered match var is
2867 * set without a previous pattern match. Unless it's C<local $1>
2870 if (!PL_localizing) {
2871 Perl_croak_no_modify();
2877 switch (*mg->mg_ptr) {
2878 case '\001': /* ^A */
2879 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2880 else SvOK_off(PL_bodytarget);
2881 FmLINES(PL_bodytarget) = 0;
2882 if (SvPOK(PL_bodytarget)) {
2883 char *s = SvPVX(PL_bodytarget);
2884 char *e = SvEND(PL_bodytarget);
2885 while ( ((s = (char *) memchr(s, '\n', e - s))) ) {
2886 FmLINES(PL_bodytarget)++;
2890 /* mg_set() has temporarily made sv non-magical */
2892 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2893 SvTAINTED_on(PL_bodytarget);
2895 SvTAINTED_off(PL_bodytarget);
2898 case '\003': /* ^C */
2899 PL_minus_c = cBOOL(SvIV(sv));
2902 case '\004': /* ^D */
2905 const char *s = SvPV_nolen_const(sv);
2906 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2907 if (DEBUG_x_TEST || DEBUG_B_TEST)
2908 dump_all_perl(!DEBUG_B_TEST);
2911 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2914 case '\005': /* ^E */
2915 if (*(mg->mg_ptr+1) == '\0') {
2917 set_vaxc_errno(SvIV(sv));
2918 #elif defined(WIN32)
2919 SetLastError( SvIV(sv) );
2921 os2_setsyserrno(SvIV(sv));
2923 /* will anyone ever use this? */
2924 SETERRNO(SvIV(sv), 4);
2927 else if (strEQ(mg->mg_ptr + 1, "NCODING") && SvOK(sv))
2928 Perl_croak(aTHX_ "${^ENCODING} is no longer supported");
2930 case '\006': /* ^F */
2931 if (mg->mg_ptr[1] == '\0') {
2932 PL_maxsysfd = SvIV(sv);
2935 case '\010': /* ^H */
2937 U32 save_hints = PL_hints;
2938 PL_hints = SvUV(sv);
2940 /* If wasn't UTF-8, and now is, notify the parser */
2941 if ((PL_hints & HINT_UTF8) && ! (save_hints & HINT_UTF8)) {
2942 notify_parser_that_changed_to_utf8();
2946 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2947 Safefree(PL_inplace);
2948 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2950 case '\016': /* ^N */
2951 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2952 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2954 case '\017': /* ^O */
2955 if (*(mg->mg_ptr+1) == '\0') {
2956 Safefree(PL_osname);
2959 TAINT_PROPER("assigning to $^O");
2960 PL_osname = savesvpv(sv);
2963 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2965 const char *const start = SvPV(sv, len);
2966 const char *out = (const char*)memchr(start, '\0', len);
2970 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2971 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2973 /* Opening for input is more common than opening for output, so
2974 ensure that hints for input are sooner on linked list. */
2975 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2977 : newSVpvs_flags("", SvUTF8(sv));
2978 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2981 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2983 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2987 case '\020': /* ^P */
2988 PL_perldb = SvIV(sv);
2989 if (PL_perldb && !PL_DBsingle)
2992 case '\024': /* ^T */
2994 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2996 PL_basetime = (Time_t)SvIV(sv);
2999 case '\025': /* ^UTF8CACHE */
3000 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
3001 PL_utf8cache = (signed char) sv_2iv(sv);
3004 case '\027': /* ^W & $^WARNING_BITS */
3005 if (*(mg->mg_ptr+1) == '\0') {
3006 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3008 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
3009 | (i ? G_WARN_ON : G_WARN_OFF) ;
3012 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
3013 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
3015 free_and_set_cop_warnings(&PL_compiling, pWARN_STD);
3020 int not_none = 0, not_all = 0;
3021 const U8 * const ptr = (const U8 *)SvPV_const(sv, len) ;
3022 for (i = 0 ; i < len ; ++i) {
3024 not_all |= ptr[i] ^ 0x55;
3027 free_and_set_cop_warnings(&PL_compiling, pWARN_NONE);
3028 } else if (len >= WARNsize && !not_all) {
3029 free_and_set_cop_warnings(&PL_compiling, pWARN_ALL);
3030 PL_dowarn |= G_WARN_ONCE ;
3034 const char *const p = SvPV_const(sv, len);
3036 PL_compiling.cop_warnings
3037 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
3040 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
3041 PL_dowarn |= G_WARN_ONCE ;
3048 else if (strEQ(mg->mg_ptr+1, "IN32_SLOPPY_STAT")) {
3049 w32_sloppystat = SvTRUE(sv);
3054 if (PL_localizing) {
3055 if (PL_localizing == 1)
3056 SAVESPTR(PL_last_in_gv);
3058 else if (SvOK(sv) && GvIO(PL_last_in_gv))
3059 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
3062 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
3063 IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3064 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3067 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
3068 IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
3069 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
3072 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
3075 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
3076 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
3077 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
3080 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
3084 IO * const io = GvIO(PL_defoutgv);
3087 if ((SvIV(sv)) == 0)
3088 IoFLAGS(io) &= ~IOf_FLUSH;
3090 if (!(IoFLAGS(io) & IOf_FLUSH)) {
3091 PerlIO *ofp = IoOFP(io);
3093 (void)PerlIO_flush(ofp);
3094 IoFLAGS(io) |= IOf_FLUSH;
3102 SV *referent = SvRV(sv);
3103 const char *reftype = sv_reftype(referent, 0);
3104 /* XXX: dodgy type check: This leaves me feeling dirty, but
3105 * the alternative is to copy pretty much the entire
3106 * sv_reftype() into this routine, or to do a full string
3107 * comparison on the return of sv_reftype() both of which
3108 * make me feel worse! NOTE, do not modify this comment
3109 * without reviewing the corresponding comment in
3110 * sv_reftype(). - Yves */
3111 if (reftype[0] == 'S' || reftype[0] == 'L') {
3112 IV val = SvIV(referent);
3114 sv_setsv(sv, PL_rs);
3115 Perl_croak(aTHX_ "Setting $/ to a reference to %s is forbidden",
3116 val < 0 ? "a negative integer" : "zero");
3119 sv_setsv(sv, PL_rs);
3120 /* diag_listed_as: Setting $/ to %s reference is forbidden */
3121 Perl_croak(aTHX_ "Setting $/ to a%s %s reference is forbidden",
3122 *reftype == 'A' ? "n" : "", reftype);
3125 SvREFCNT_dec(PL_rs);
3126 PL_rs = newSVsv(sv);
3130 SvREFCNT_dec(PL_ors_sv);
3132 PL_ors_sv = newSVsv(sv);
3140 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
3143 #ifdef COMPLEX_STATUS
3144 if (PL_localizing == 2) {
3145 SvUPGRADE(sv, SVt_PVLV);
3146 PL_statusvalue = LvTARGOFF(sv);
3147 PL_statusvalue_vms = LvTARGLEN(sv);
3151 #ifdef VMSISH_STATUS
3153 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
3156 STATUS_UNIX_EXIT_SET(SvIV(sv));
3161 # define PERL_VMS_BANG vaxc$errno
3163 # define PERL_VMS_BANG 0
3166 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
3167 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3169 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
3170 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
3176 /* XXX $< currently silently ignores failures */
3177 const Uid_t new_uid = SvUID(sv);
3178 PL_delaymagic_uid = new_uid;
3179 if (PL_delaymagic) {
3180 PL_delaymagic |= DM_RUID;
3181 break; /* don't do magic till later */
3184 PERL_UNUSED_RESULT(setruid(new_uid));
3185 #elif defined(HAS_SETREUID)
3186 PERL_UNUSED_RESULT(setreuid(new_uid, (Uid_t)-1));
3187 #elif defined(HAS_SETRESUID)
3188 PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1));
3190 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
3192 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
3193 if (new_uid != 0 && PerlProc_getuid() == 0)
3194 PERL_UNUSED_RESULT(PerlProc_setuid(0));
3196 PERL_UNUSED_RESULT(PerlProc_setuid(new_uid));
3198 Perl_croak(aTHX_ "setruid() not implemented");
3205 /* XXX $> currently silently ignores failures */
3206 const Uid_t new_euid = SvUID(sv);
3207 PL_delaymagic_euid = new_euid;
3208 if (PL_delaymagic) {
3209 PL_delaymagic |= DM_EUID;
3210 break; /* don't do magic till later */
3213 PERL_UNUSED_RESULT(seteuid(new_euid));
3214 #elif defined(HAS_SETREUID)
3215 PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid));
3216 #elif defined(HAS_SETRESUID)
3217 PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1));
3219 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
3220 PERL_UNUSED_RESULT(PerlProc_setuid(new_euid));
3222 Perl_croak(aTHX_ "seteuid() not implemented");
3229 /* XXX $( currently silently ignores failures */
3230 const Gid_t new_gid = SvGID(sv);
3231 PL_delaymagic_gid = new_gid;
3232 if (PL_delaymagic) {
3233 PL_delaymagic |= DM_RGID;
3234 break; /* don't do magic till later */
3237 PERL_UNUSED_RESULT(setrgid(new_gid));
3238 #elif defined(HAS_SETREGID)
3239 PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1));
3240 #elif defined(HAS_SETRESGID)
3241 PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1));
3243 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
3244 PERL_UNUSED_RESULT(PerlProc_setgid(new_gid));
3246 Perl_croak(aTHX_ "setrgid() not implemented");
3253 /* (hv) best guess: maybe we'll need configure probes to do a better job,
3254 * but you can override it if you need to.
3257 #define INVALID_GID ((Gid_t)-1)
3259 /* XXX $) currently silently ignores failures */
3261 #ifdef HAS_SETGROUPS
3263 const char *p = SvPV_const(sv, len);
3264 Groups_t *gary = NULL;
3265 const char* p_end = p + len;
3266 const char* endptr = p_end;
3268 #ifdef _SC_NGROUPS_MAX
3269 int maxgrp = sysconf(_SC_NGROUPS_MAX);
3274 int maxgrp = NGROUPS;
3279 if (grok_atoUV(p, &uv, &endptr))
3280 new_egid = (Gid_t)uv;
3282 new_egid = INVALID_GID;
3285 for (i = 0; i < maxgrp; ++i) {
3295 Newx(gary, i + 1, Groups_t);
3297 Renew(gary, i + 1, Groups_t);
3298 if (grok_atoUV(p, &uv, &endptr))
3299 gary[i] = (Groups_t)uv;
3301 gary[i] = INVALID_GID;
3306 PERL_UNUSED_RESULT(setgroups(i, gary));
3309 #else /* HAS_SETGROUPS */
3310 new_egid = SvGID(sv);
3311 #endif /* HAS_SETGROUPS */
3312 PL_delaymagic_egid = new_egid;
3313 if (PL_delaymagic) {
3314 PL_delaymagic |= DM_EGID;
3315 break; /* don't do magic till later */
3318 PERL_UNUSED_RESULT(setegid(new_egid));
3319 #elif defined(HAS_SETREGID)
3320 PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid));
3321 #elif defined(HAS_SETRESGID)
3322 PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1));
3324 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
3325 PERL_UNUSED_RESULT(PerlProc_setgid(new_egid));
3327 Perl_croak(aTHX_ "setegid() not implemented");
3333 PL_chopset = SvPV_force(sv,len);
3336 /* Store the pid in mg->mg_obj so we can tell when a fork has
3337 occurred. mg->mg_obj points to *$ by default, so clear it. */
3338 if (isGV(mg->mg_obj)) {
3339 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
3340 SvREFCNT_dec(mg->mg_obj);
3341 mg->mg_flags |= MGf_REFCOUNTED;
3342 mg->mg_obj = newSViv((IV)PerlProc_getpid());
3344 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
3347 LOCK_DOLLARZERO_MUTEX;
3348 S_set_dollarzero(aTHX_ sv);
3349 UNLOCK_DOLLARZERO_MUTEX;
3356 =for apidoc_section $signals
3357 =for apidoc whichsig
3358 =for apidoc_item whichsig_pv
3359 =for apidoc_item whichsig_pvn
3360 =for apidoc_item whichsig_sv
3362 These all convert a signal name into its corresponding signal number;
3363 returning -1 if no corresponding number was found.
3365 They differ only in the source of the signal name:
3367 C<whichsig_pv> takes the name from the C<NUL>-terminated string starting at
3370 C<whichsig> is merely a different spelling, a synonym, of C<whichsig_pv>.
3372 C<whichsig_pvn> takes the name from the string starting at C<sig>, with length
3375 C<whichsig_sv> takes the name from the PV stored in the SV C<sigsv>.
3381 Perl_whichsig_sv(pTHX_ SV *sigsv)
3385 PERL_ARGS_ASSERT_WHICHSIG_SV;
3386 sigpv = SvPV_const(sigsv, siglen);
3387 return whichsig_pvn(sigpv, siglen);
3391 Perl_whichsig_pv(pTHX_ const char *sig)
3393 PERL_ARGS_ASSERT_WHICHSIG_PV;
3394 return whichsig_pvn(sig, strlen(sig));
3398 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3402 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3403 PERL_UNUSED_CONTEXT;
3405 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3406 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3407 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3409 if (memEQs(sig, len, "CHLD"))
3413 if (memEQs(sig, len, "CLD"))
3420 /* Perl_sighandler(), Perl_sighandler1(), Perl_sighandler3():
3421 * these three function are intended to be called by the OS as 'C' level
3422 * signal handler functions in the case where unsafe signals are being
3423 * used - i.e. they immediately invoke Perl_perly_sighandler() to call the
3424 * perl-level sighandler, rather than deferring.
3425 * In fact, the core itself will normally use Perl_csighandler as the
3426 * OS-level handler; that function will then decide whether to queue the
3427 * signal or call Perl_sighandler / Perl_perly_sighandler itself. So these
3428 * functions are more useful for e.g. POSIX.xs when it wants explicit
3429 * control of what's happening.
3433 #ifdef PERL_USE_3ARG_SIGHANDLER
3436 Perl_sighandler(int sig, Siginfo_t *sip, void *uap)
3438 Perl_perly_sighandler(sig, sip, uap, 0);
3444 Perl_sighandler(int sig)
3446 Perl_perly_sighandler(sig, NULL, NULL, 0);
3452 Perl_sighandler1(int sig)
3454 Perl_perly_sighandler(sig, NULL, NULL, 0);
3458 Perl_sighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
3460 Perl_perly_sighandler(sig, sip, uap, 0);
3464 /* Invoke the perl-level signal handler. This function is called either
3465 * directly from one of the C-level signals handlers (Perl_sighandler or
3466 * Perl_csighandler), or for safe signals, later from
3467 * Perl_despatch_signals() at a suitable safe point during execution.
3469 * 'safe' is a boolean indicating the latter call path.
3473 Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL,
3474 void *uap PERL_UNUSED_DECL, bool safe)
3476 #ifdef PERL_GET_SIG_CONTEXT
3477 dTHXa(PERL_GET_SIG_CONTEXT);
3484 SV * const tSv = PL_Sv;
3488 XPV * const tXpv = PL_Xpv;
3489 I32 old_ss_ix = PL_savestack_ix;
3490 SV *errsv_save = NULL;
3493 if (!PL_psig_ptr[sig]) {
3494 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3499 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3500 /* Max number of items pushed there is 3*n or 4. We cannot fix
3501 infinity, so we fix 4 (in fact 5): */
3502 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3504 PL_savestack_ix += 5; /* Protect save in progress. */
3505 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3508 /* sv_2cv is too complicated, try a simpler variant first: */
3509 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3510 || SvTYPE(cv) != SVt_PVCV) {
3512 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3515 if (!cv || !CvROOT(cv)) {
3516 const HEK * const hek = gv
3520 : cv && CvGV(cv) ? GvENAME_HEK(CvGV(cv)) : NULL;
3522 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3523 "SIG%s handler \"%" HEKf "\" not defined.\n",
3524 PL_sig_name[sig], HEKfARG(hek));
3525 /* diag_listed_as: SIG%s handler "%s" not defined */
3526 else Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
3527 "SIG%s handler \"__ANON__\" not defined.\n",
3532 sv = PL_psig_name[sig]
3533 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3534 : newSVpv(PL_sig_name[sig],0);
3538 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3539 /* make sure our assumption about the size of the SAVEs are correct:
3540 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3541 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3544 PUSHSTACKi(PERLSI_SIGNAL);
3548 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3550 struct sigaction oact;
3552 if (sip && sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3554 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3555 /* The siginfo fields signo, code, errno, pid, uid,
3556 * addr, status, and band are defined by POSIX/SUSv3. */
3557 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3558 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3559 # ifdef HAS_SIGINFO_SI_ERRNO
3560 (void)hv_stores(sih, "errno", newSViv(sip->si_errno));
3562 # ifdef HAS_SIGINFO_SI_STATUS
3563 (void)hv_stores(sih, "status", newSViv(sip->si_status));
3565 # ifdef HAS_SIGINFO_SI_UID
3568 sv_setuid(uid, sip->si_uid);
3569 (void)hv_stores(sih, "uid", uid);
3572 # ifdef HAS_SIGINFO_SI_PID
3573 (void)hv_stores(sih, "pid", newSViv(sip->si_pid));
3575 # ifdef HAS_SIGINFO_SI_ADDR
3576 (void)hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3578 # ifdef HAS_SIGINFO_SI_BAND
3579 (void)hv_stores(sih, "band", newSViv(sip->si_band));
3583 mPUSHp((char *)sip, sizeof(*sip));
3591 errsv_save = newSVsv(ERRSV);
3593 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3597 SV * const errsv = ERRSV;
3598 if (SvTRUE_NN(errsv)) {
3599 SvREFCNT_dec(errsv_save);
3602 /* Handler "died", for example to get out of a restart-able read().
3603 * Before we re-do that on its behalf re-enable the signal which was
3604 * blocked by the system when we entered.
3606 # ifdef HAS_SIGPROCMASK
3608 /* safe signals called via dispatch_signals() set up a
3609 * savestack destructor, unblock_sigmask(), to
3610 * automatically unblock the handler at the end. If
3611 * instead we get here directly, we have to do it
3616 sigaddset(&set,sig);
3617 sigprocmask(SIG_UNBLOCK, &set, NULL);
3620 /* Not clear if this will work */
3621 /* XXX not clear if this should be protected by 'if (safe)'
3624 (void)rsignal(sig, SIG_IGN);
3625 (void)rsignal(sig, PL_csighandlerp);
3627 #endif /* !PERL_MICRO */
3632 sv_setsv(errsv, errsv_save);
3633 SvREFCNT_dec(errsv_save);
3638 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3639 PL_savestack_ix = old_ss_ix;
3641 SvREFCNT_dec_NN(sv);
3642 PL_op = myop; /* Apparently not needed... */
3644 PL_Sv = tSv; /* Restore global temporaries. */
3651 S_restore_magic(pTHX_ const void *p)
3653 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3654 SV* const sv = mgs->mgs_sv;
3660 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3661 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3663 SvFLAGS(sv) |= mgs->mgs_flags;
3668 bumped = mgs->mgs_bumped;
3669 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3671 /* If we're still on top of the stack, pop us off. (That condition
3672 * will be satisfied if restore_magic was called explicitly, but *not*
3673 * if it's being called via leave_scope.)
3674 * The reason for doing this is that otherwise, things like sv_2cv()
3675 * may leave alloc gunk on the savestack, and some code
3676 * (e.g. sighandler) doesn't expect that...
3678 if (PL_savestack_ix == mgs->mgs_ss_ix)
3680 UV popval = SSPOPUV;
3681 assert(popval == SAVEt_DESTRUCTOR_X);
3682 PL_savestack_ix -= 2;
3684 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3685 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3688 if (SvREFCNT(sv) == 1) {
3689 /* We hold the last reference to this SV, which implies that the
3690 SV was deleted as a side effect of the routines we called.
3691 So artificially keep it alive a bit longer.
3692 We avoid turning on the TEMP flag, which can cause the SV's
3693 buffer to get stolen (and maybe other stuff). */
3698 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3702 /* clean up the mess created by Perl_sighandler().
3703 * Note that this is only called during an exit in a signal handler;
3704 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3708 S_unwind_handler_stack(pTHX_ const void *p)
3712 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3716 =for apidoc_section $magic
3717 =for apidoc magic_sethint
3719 Triggered by a store to C<%^H>, records the key/value pair to
3720 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3721 anything that would need a deep copy. Maybe we should warn if we find a
3727 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3729 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3730 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3732 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3734 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3735 an alternative leaf in there, with PL_compiling.cop_hints being used if
3736 it's NULL. If needed for threads, the alternative could lock a mutex,
3737 or take other more complex action. */
3739 /* Something changed in %^H, so it will need to be restored on scope exit.
3740 Doing this here saves a lot of doing it manually in perl code (and
3741 forgetting to do it, and consequent subtle errors. */
3742 PL_hints |= HINT_LOCALIZE_HH;
3743 CopHINTHASH_set(&PL_compiling,
3744 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3745 magic_sethint_feature(key, NULL, 0, sv, 0);
3750 =for apidoc magic_clearhint
3752 Triggered by a delete from C<%^H>, records the key to
3753 C<PL_compiling.cop_hints_hash>.
3758 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3760 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3761 PERL_UNUSED_ARG(sv);
3763 PL_hints |= HINT_LOCALIZE_HH;
3764 CopHINTHASH_set(&PL_compiling,
3765 mg->mg_len == HEf_SVKEY
3766 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3767 MUTABLE_SV(mg->mg_ptr), 0, 0)
3768 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3769 mg->mg_ptr, mg->mg_len, 0, 0));
3770 if (mg->mg_len == HEf_SVKEY)
3771 magic_sethint_feature(MUTABLE_SV(mg->mg_ptr), NULL, 0, NULL, FALSE);
3773 magic_sethint_feature(NULL, mg->mg_ptr, mg->mg_len, NULL, FALSE);
3778 =for apidoc magic_clearhints
3780 Triggered by clearing C<%^H>, resets C<PL_compiling.cop_hints_hash>.
3785 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3787 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3788 PERL_UNUSED_ARG(sv);
3789 PERL_UNUSED_ARG(mg);
3790 cophh_free(CopHINTHASH_get(&PL_compiling));
3791 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3797 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3798 const char *name, I32 namlen)
3802 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3803 PERL_UNUSED_ARG(sv);
3804 PERL_UNUSED_ARG(name);
3805 PERL_UNUSED_ARG(namlen);
3807 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3808 nmg = mg_find(nsv, mg->mg_type);
3810 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3811 nmg->mg_ptr = mg->mg_ptr;
3812 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3813 nmg->mg_flags |= MGf_REFCOUNTED;
3818 Perl_magic_setdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3819 PERL_ARGS_ASSERT_MAGIC_SETDEBUGVAR;
3821 #if DBVARMG_SINGLE != 0
3822 assert(mg->mg_private >= DBVARMG_SINGLE);
3824 assert(mg->mg_private < DBVARMG_COUNT);
3826 PL_DBcontrol[mg->mg_private] = SvIV_nomg(sv);
3832 Perl_magic_getdebugvar(pTHX_ SV *sv, MAGIC *mg) {
3833 PERL_ARGS_ASSERT_MAGIC_GETDEBUGVAR;
3835 #if DBVARMG_SINGLE != 0
3836 assert(mg->mg_private >= DBVARMG_SINGLE);
3838 assert(mg->mg_private < DBVARMG_COUNT);
3839 sv_setiv(sv, PL_DBcontrol[mg->mg_private]);
3845 * ex: set ts=8 sts=4 sw=4 et: