3 * Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
4 * 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Larry Wall and others
6 * You may distribute under the terms of either the GNU General Public
7 * License or the Artistic License, as specified in the README file.
12 * Sam sat on the ground and put his head in his hands. 'I wish I had never
13 * come here, and I don't want to see no more magic,' he said, and fell silent.
15 * [p.363 of _The Lord of the Rings_, II/vii: "The Mirror of Galadriel"]
19 =head1 Magical Functions
21 "Magic" is special data attached to SV structures in order to give them
22 "magical" properties. When any Perl code tries to read from, or assign to,
23 an SV marked as magical, it calls the 'get' or 'set' function associated
24 with that SV's magic. A get is called prior to reading an SV, in order to
25 give it a chance to update its internal value (get on $. writes the line
26 number of the last read filehandle into to the SV's IV slot), while
27 set is called after an SV has been written to, in order to allow it to make
28 use of its changed value (set on $/ copies the SV's new value to the
29 PL_rs global variable).
31 Magic is implemented as a linked list of MAGIC structures attached to the
32 SV. Each MAGIC struct holds the type of the magic, a pointer to an array
33 of functions that implement the get(), set(), length() etc functions,
34 plus space for some flags and pointers. For example, a tied variable has
35 a MAGIC structure that contains a pointer to the object associated with the
44 #if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS)
50 #if defined(HAS_SETGROUPS)
57 # include <sys/pstat.h>
60 #ifdef HAS_PRCTL_SET_NAME
61 # include <sys/prctl.h>
64 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
65 Signal_t Perl_csighandler(int sig, siginfo_t *, void *);
67 Signal_t Perl_csighandler(int sig);
71 /* Missing protos on LynxOS */
72 void setruid(uid_t id);
73 void seteuid(uid_t id);
74 void setrgid(uid_t id);
75 void setegid(uid_t id);
79 * Pre-magic setup and post-magic takedown.
80 * Use the "DESTRUCTOR" scope cleanup to reinstate magic.
90 /* MGS is typedef'ed to struct magic_state in perl.h */
93 S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags)
99 PERL_ARGS_ASSERT_SAVE_MAGIC_FLAGS;
101 assert(SvMAGICAL(sv));
103 /* we shouldn't really be called here with RC==0, but it can sometimes
104 * happen via mg_clear() (which also shouldn't be called when RC==0,
105 * but it can happen). Handle this case gracefully(ish) by not RC++
106 * and thus avoiding the resultant double free */
107 if (SvREFCNT(sv) > 0) {
108 /* guard against sv getting freed midway through the mg clearing,
109 * by holding a private reference for the duration. */
110 SvREFCNT_inc_simple_void_NN(sv);
114 SAVEDESTRUCTOR_X(S_restore_magic, INT2PTR(void*, (IV)mgs_ix));
116 mgs = SSPTR(mgs_ix, MGS*);
118 mgs->mgs_magical = SvMAGICAL(sv);
119 mgs->mgs_readonly = SvREADONLY(sv) != 0;
120 mgs->mgs_ss_ix = PL_savestack_ix; /* points after the saved destructor */
121 mgs->mgs_bumped = bumped;
123 SvFLAGS(sv) &= ~flags;
127 #define save_magic(a,b) save_magic_flags(a,b,SVs_GMG|SVs_SMG|SVs_RMG)
130 =for apidoc mg_magical
132 Turns on the magical status of an SV. See C<sv_magic>.
138 Perl_mg_magical(pTHX_ SV *sv)
141 PERL_ARGS_ASSERT_MG_MAGICAL;
145 if ((mg = SvMAGIC(sv))) {
147 const MGVTBL* const vtbl = mg->mg_virtual;
149 if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP))
156 } while ((mg = mg->mg_moremagic));
157 if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG)))
165 Do magic before a value is retrieved from the SV. The type of SV must
166 be >= SVt_PVMG. See C<sv_magic>.
172 Perl_mg_get(pTHX_ SV *sv)
175 const I32 mgs_ix = SSNEW(sizeof(MGS));
178 MAGIC *newmg, *head, *cur, *mg;
180 PERL_ARGS_ASSERT_MG_GET;
182 if (PL_localizing == 1 && sv == DEFSV) return 0;
184 /* We must call svt_get(sv, mg) for each valid entry in the linked
185 list of magic. svt_get() may delete the current entry, add new
186 magic to the head of the list, or upgrade the SV. AMS 20010810 */
188 newmg = cur = head = mg = SvMAGIC(sv);
190 const MGVTBL * const vtbl = mg->mg_virtual;
191 MAGIC * const nextmg = mg->mg_moremagic; /* it may delete itself */
193 if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) {
195 /* taint's mg get is so dumb it doesn't need flag saving */
196 if (!saved && mg->mg_type != PERL_MAGIC_taint) {
197 save_magic(mgs_ix, sv);
201 vtbl->svt_get(aTHX_ sv, mg);
203 /* guard against magic having been deleted - eg FETCH calling
206 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
210 /* recalculate flags if this entry was deleted. */
211 if (mg->mg_flags & MGf_GSKIP)
212 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0;
214 else if (vtbl == &PL_vtbl_utf8) {
215 /* get-magic can reallocate the PV */
216 magic_setutf8(sv, mg);
222 /* Have we finished with the new entries we saw? Start again
223 where we left off (unless there are more new entries). */
231 /* Were any new entries added? */
232 if (!have_new && (newmg = SvMAGIC(sv)) != head) {
236 (SSPTR(mgs_ix, MGS *))->mgs_magical = 0; /* recalculate flags */
241 restore_magic(INT2PTR(void *, (IV)mgs_ix));
249 Do magic after a value is assigned to the SV. See C<sv_magic>.
255 Perl_mg_set(pTHX_ SV *sv)
258 const I32 mgs_ix = SSNEW(sizeof(MGS));
262 PERL_ARGS_ASSERT_MG_SET;
264 if (PL_localizing == 2 && sv == DEFSV) return 0;
266 save_magic_flags(mgs_ix, sv, SVs_GMG|SVs_SMG); /* leave SVs_RMG on */
268 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
269 const MGVTBL* vtbl = mg->mg_virtual;
270 nextmg = mg->mg_moremagic; /* it may delete itself */
271 if (mg->mg_flags & MGf_GSKIP) {
272 mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */
273 (SSPTR(mgs_ix, MGS*))->mgs_magical = 0;
275 if (PL_localizing == 2
276 && PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
278 if (vtbl && vtbl->svt_set)
279 vtbl->svt_set(aTHX_ sv, mg);
282 restore_magic(INT2PTR(void*, (IV)mgs_ix));
287 =for apidoc mg_length
289 Reports on the SV's length in bytes, calling length magic if available,
290 but does not set the UTF8 flag on the sv. It will fall back to 'get'
291 magic if there is no 'length' magic, but with no indication as to
292 whether it called 'get' magic. It assumes the sv is a PVMG or
293 higher. Use sv_len() instead.
299 Perl_mg_length(pTHX_ SV *sv)
305 PERL_ARGS_ASSERT_MG_LENGTH;
307 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
308 const MGVTBL * const vtbl = mg->mg_virtual;
309 if (vtbl && vtbl->svt_len) {
310 const I32 mgs_ix = SSNEW(sizeof(MGS));
311 save_magic(mgs_ix, sv);
312 /* omit MGf_GSKIP -- not changed here */
313 len = vtbl->svt_len(aTHX_ sv, mg);
314 restore_magic(INT2PTR(void*, (IV)mgs_ix));
319 (void)SvPV_const(sv, len);
324 Perl_mg_size(pTHX_ SV *sv)
328 PERL_ARGS_ASSERT_MG_SIZE;
330 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
331 const MGVTBL* const vtbl = mg->mg_virtual;
332 if (vtbl && vtbl->svt_len) {
333 const I32 mgs_ix = SSNEW(sizeof(MGS));
335 save_magic(mgs_ix, sv);
336 /* omit MGf_GSKIP -- not changed here */
337 len = vtbl->svt_len(aTHX_ sv, mg);
338 restore_magic(INT2PTR(void*, (IV)mgs_ix));
345 return AvFILLp((const AV *) sv); /* Fallback to non-tied array */
349 Perl_croak(aTHX_ "Size magic not implemented");
358 Clear something magical that the SV represents. See C<sv_magic>.
364 Perl_mg_clear(pTHX_ SV *sv)
366 const I32 mgs_ix = SSNEW(sizeof(MGS));
370 PERL_ARGS_ASSERT_MG_CLEAR;
372 save_magic(mgs_ix, sv);
374 for (mg = SvMAGIC(sv); mg; mg = nextmg) {
375 const MGVTBL* const vtbl = mg->mg_virtual;
376 /* omit GSKIP -- never set here */
378 nextmg = mg->mg_moremagic; /* it may delete itself */
380 if (vtbl && vtbl->svt_clear)
381 vtbl->svt_clear(aTHX_ sv, mg);
384 restore_magic(INT2PTR(void*, (IV)mgs_ix));
389 S_mg_findext_flags(pTHX_ const SV *sv, int type, const MGVTBL *vtbl, U32 flags)
398 assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv)));
400 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
401 if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) {
413 Finds the magic pointer for type matching the SV. See C<sv_magic>.
419 Perl_mg_find(pTHX_ const SV *sv, int type)
421 return S_mg_findext_flags(aTHX_ sv, type, NULL, 0);
425 =for apidoc mg_findext
427 Finds the magic pointer of C<type> with the given C<vtbl> for the C<SV>. See
434 Perl_mg_findext(pTHX_ const SV *sv, int type, const MGVTBL *vtbl)
436 return S_mg_findext_flags(aTHX_ sv, type, vtbl, 1);
440 Perl_mg_find_mglob(pTHX_ SV *sv)
442 PERL_ARGS_ASSERT_MG_FIND_MGLOB;
443 if (SvTYPE(sv) == SVt_PVLV && LvTYPE(sv) == 'y') {
444 /* This sv is only a delegate. //g magic must be attached to
449 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv))
450 return S_mg_findext_flags(aTHX_ sv, PERL_MAGIC_regex_global, 0, 0);
457 Copies the magic from one SV to another. See C<sv_magic>.
463 Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen)
468 PERL_ARGS_ASSERT_MG_COPY;
470 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
471 const MGVTBL* const vtbl = mg->mg_virtual;
472 if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){
473 count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen);
476 const char type = mg->mg_type;
477 if (isUPPER(type) && type != PERL_MAGIC_uvar) {
479 (type == PERL_MAGIC_tied)
481 : (type == PERL_MAGIC_regdata && mg->mg_obj)
484 toLOWER(type), key, klen);
493 =for apidoc mg_localize
495 Copy some of the magic from an existing SV to new localized version of that
496 SV. Container magic (eg %ENV, $1, tie) gets copied, value magic doesn't (eg
499 If setmagic is false then no set magic will be called on the new (empty) SV.
500 This typically means that assignment will soon follow (e.g. 'local $x = $y'),
501 and that will handle the magic.
507 Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic)
512 PERL_ARGS_ASSERT_MG_LOCALIZE;
517 for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) {
518 const MGVTBL* const vtbl = mg->mg_virtual;
519 if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type))
522 if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local)
523 (void)vtbl->svt_local(aTHX_ nsv, mg);
525 sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl,
526 mg->mg_ptr, mg->mg_len);
528 /* container types should remain read-only across localization */
529 SvFLAGS(nsv) |= SvREADONLY(sv);
532 if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) {
533 SvFLAGS(nsv) |= SvMAGICAL(sv);
542 #define mg_free_struct(sv, mg) S_mg_free_struct(aTHX_ sv, mg)
544 S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg)
546 const MGVTBL* const vtbl = mg->mg_virtual;
547 if (vtbl && vtbl->svt_free)
548 vtbl->svt_free(aTHX_ sv, mg);
549 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
550 if (mg->mg_len > 0 || mg->mg_type == PERL_MAGIC_utf8)
551 Safefree(mg->mg_ptr);
552 else if (mg->mg_len == HEf_SVKEY)
553 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
555 if (mg->mg_flags & MGf_REFCOUNTED)
556 SvREFCNT_dec(mg->mg_obj);
563 Free any magic storage used by the SV. See C<sv_magic>.
569 Perl_mg_free(pTHX_ SV *sv)
574 PERL_ARGS_ASSERT_MG_FREE;
576 for (mg = SvMAGIC(sv); mg; mg = moremagic) {
577 moremagic = mg->mg_moremagic;
578 mg_free_struct(sv, mg);
579 SvMAGIC_set(sv, moremagic);
581 SvMAGIC_set(sv, NULL);
587 =for apidoc Am|void|mg_free_type|SV *sv|int how
589 Remove any magic of type I<how> from the SV I<sv>. See L</sv_magic>.
595 Perl_mg_free_type(pTHX_ SV *sv, int how)
597 MAGIC *mg, *prevmg, *moremg;
598 PERL_ARGS_ASSERT_MG_FREE_TYPE;
599 for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) {
601 moremg = mg->mg_moremagic;
602 if (mg->mg_type == how) {
603 /* temporarily move to the head of the magic chain, in case
604 custom free code relies on this historical aspect of mg_free */
606 prevmg->mg_moremagic = moremg;
607 mg->mg_moremagic = SvMAGIC(sv);
610 newhead = mg->mg_moremagic;
611 mg_free_struct(sv, mg);
612 SvMAGIC_set(sv, newhead);
622 Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg)
627 PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT;
630 const REGEXP * const rx = PM_GETRE(PL_curpm);
632 if (mg->mg_obj) { /* @+ */
633 /* return the number possible */
634 return RX_NPARENS(rx);
636 I32 paren = RX_LASTPAREN(rx);
638 /* return the last filled */
640 && (RX_OFFS(rx)[paren].start == -1
641 || RX_OFFS(rx)[paren].end == -1) )
654 Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg)
658 PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET;
661 const REGEXP * const rx = PM_GETRE(PL_curpm);
663 const I32 paren = mg->mg_len;
668 if (paren <= (I32)RX_NPARENS(rx) &&
669 (s = RX_OFFS(rx)[paren].start) != -1 &&
670 (t = RX_OFFS(rx)[paren].end) != -1)
673 if (mg->mg_obj) /* @+ */
678 if (RX_MATCH_UTF8(rx)) {
679 const char * const b = RX_SUBBEG(rx);
681 i = RX_SUBCOFFSET(rx) +
683 (U8*)(b-RX_SUBOFFSET(rx)+i));
698 Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg)
700 PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET;
703 Perl_croak_no_modify();
704 NORETURN_FUNCTION_END;
707 #define SvRTRIM(sv) STMT_START { \
709 STRLEN len = SvCUR(sv); \
710 char * const p = SvPVX(sv); \
711 while (len > 0 && isSPACE(p[len-1])) \
713 SvCUR_set(sv, len); \
719 Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv)
721 PERL_ARGS_ASSERT_EMULATE_COP_IO;
723 if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT)))
724 sv_setsv(sv, &PL_sv_undef);
728 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) {
729 SV *const value = cop_hints_fetch_pvs(c, "open<", 0);
734 if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) {
735 SV *const value = cop_hints_fetch_pvs(c, "open>", 0);
743 S_fixup_errno_string(pTHX_ SV* sv)
745 /* Do what is necessary to fixup the non-empty string in 'sv' for return to
748 PERL_ARGS_ASSERT_FIXUP_ERRNO_STRING;
752 if(strEQ(SvPVX(sv), "")) {
753 sv_catpv(sv, UNKNOWN_ERRNO_MSG);
757 /* In some locales the error string may come back as UTF-8, in which
758 * case we should turn on that flag. This didn't use to happen, and to
759 * avoid any possible backward compatibility issues, we don't turn on
760 * the flag unless we have to. So the flag stays off for an entirely
761 * ASCII string. We assume that if the string looks like UTF-8, it
762 * really is UTF-8: "text in any other encoding that uses bytes with
763 * the high bit set is extremely unlikely to pass a UTF-8 validity
764 * test" (http://en.wikipedia.org/wiki/Charset_detection). There is a
765 * potential that we will get it wrong however, especially on short
766 * error message text. (If it turns out to be necessary, we could also
767 * keep track if the current LC_MESSAGES locale is UTF-8) */
768 if (! IN_BYTES /* respect 'use bytes' */
769 && ! is_ascii_string((U8*) SvPVX_const(sv), SvCUR(sv))
770 && is_utf8_string((U8*) SvPVX_const(sv), SvCUR(sv)))
783 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
787 const char *s = NULL;
789 const char * const remaining = mg->mg_ptr + 1;
792 PERL_ARGS_ASSERT_MAGIC_GET;
796 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
798 CALLREG_NUMBUF_FETCH(rx,paren,sv);
800 sv_setsv(sv,&PL_sv_undef);
805 nextchar = *remaining;
806 switch (*mg->mg_ptr) {
807 case '\001': /* ^A */
808 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
809 else sv_setsv(sv, &PL_sv_undef);
810 if (SvTAINTED(PL_bodytarget))
813 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
814 if (nextchar == '\0') {
815 sv_setiv(sv, (IV)PL_minus_c);
817 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
818 sv_setiv(sv, (IV)STATUS_NATIVE);
822 case '\004': /* ^D */
823 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
825 case '\005': /* ^E */
826 if (nextchar != '\0') {
827 if (strEQ(remaining, "NCODING"))
828 sv_setsv(sv, PL_encoding);
832 #if defined(VMS) || defined(OS2) || defined(WIN32)
836 $DESCRIPTOR(msgdsc,msg);
837 sv_setnv(sv,(NV) vaxc$errno);
838 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
839 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
844 if (!(_emx_env & 0x200)) { /* Under DOS */
845 sv_setnv(sv, (NV)errno);
846 sv_setpv(sv, errno ? Strerror(errno) : "");
848 if (errno != errno_isOS2) {
849 const int tmp = _syserrno();
850 if (tmp) /* 2nd call to _syserrno() makes it 0 */
853 sv_setnv(sv, (NV)Perl_rc);
854 sv_setpv(sv, os2error(Perl_rc));
856 if (SvOK(sv) && strNE(SvPVX(sv), "")) {
857 fixup_errno_string(sv);
859 # elif defined(WIN32)
861 const DWORD dwErr = GetLastError();
862 sv_setnv(sv, (NV)dwErr);
864 PerlProc_GetOSError(sv, dwErr);
865 fixup_errno_string(sv);
872 # error Missing code for platform
875 SvNOK_on(sv); /* what a wonderful hack! */
877 #endif /* End of platforms with special handling for $^E; others just fall
884 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
886 sv_setnv(sv, (NV)errno);
889 if (errno == errno_isOS2 || errno == errno_isOS2_set)
890 sv_setpv(sv, os2error(Perl_rc));
898 /* Strerror can return NULL on some platforms, which will
899 * result in 'sv' not being considered SvOK. The SvNOK_on()
900 * below will cause just the number part to be valid */
901 sv_setpv(sv, Strerror(errno));
903 fixup_errno_string(sv);
910 SvNOK_on(sv); /* what a wonderful hack! */
913 case '\006': /* ^F */
914 sv_setiv(sv, (IV)PL_maxsysfd);
916 case '\007': /* ^GLOBAL_PHASE */
917 if (strEQ(remaining, "LOBAL_PHASE")) {
918 sv_setpvn(sv, PL_phase_names[PL_phase],
919 strlen(PL_phase_names[PL_phase]));
922 case '\010': /* ^H */
923 sv_setiv(sv, (IV)PL_hints);
925 case '\011': /* ^I */ /* NOT \t in EBCDIC */
926 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
928 case '\014': /* ^LAST_FH */
929 if (strEQ(remaining, "AST_FH")) {
931 assert(isGV_with_GP(PL_last_in_gv));
932 SV_CHECK_THINKFIRST_COW_DROP(sv);
933 prepare_SV_for_RV(sv);
935 SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv));
939 else sv_setsv_nomg(sv, NULL);
942 case '\017': /* ^O & ^OPEN */
943 if (nextchar == '\0') {
944 sv_setpv(sv, PL_osname);
947 else if (strEQ(remaining, "PEN")) {
948 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
952 sv_setiv(sv, (IV)PL_perldb);
954 case '\023': /* ^S */
956 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
959 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
964 case '\024': /* ^T */
965 if (nextchar == '\0') {
967 sv_setnv(sv, PL_basetime);
969 sv_setiv(sv, (IV)PL_basetime);
972 else if (strEQ(remaining, "AINT"))
973 sv_setiv(sv, TAINTING_get
974 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
977 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
978 if (strEQ(remaining, "NICODE"))
979 sv_setuv(sv, (UV) PL_unicode);
980 else if (strEQ(remaining, "TF8LOCALE"))
981 sv_setuv(sv, (UV) PL_utf8locale);
982 else if (strEQ(remaining, "TF8CACHE"))
983 sv_setiv(sv, (IV) PL_utf8cache);
985 case '\027': /* ^W & $^WARNING_BITS */
986 if (nextchar == '\0')
987 sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE));
988 else if (strEQ(remaining, "ARNING_BITS")) {
989 if (PL_compiling.cop_warnings == pWARN_NONE) {
990 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
992 else if (PL_compiling.cop_warnings == pWARN_STD) {
993 sv_setsv(sv, &PL_sv_undef);
996 else if (PL_compiling.cop_warnings == pWARN_ALL) {
997 /* Get the bit mask for $warnings::Bits{all}, because
998 * it could have been extended by warnings::register */
999 HV * const bits = get_hv("warnings::Bits", 0);
1000 SV ** const bits_all = bits ? hv_fetchs(bits, "all", FALSE) : NULL;
1002 sv_copypv(sv, *bits_all);
1004 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1007 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
1008 *PL_compiling.cop_warnings);
1013 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1014 paren = RX_LASTPAREN(rx);
1016 goto do_numbuf_fetch;
1018 sv_setsv(sv,&PL_sv_undef);
1020 case '\016': /* ^N */
1021 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1022 paren = RX_LASTCLOSEPAREN(rx);
1024 goto do_numbuf_fetch;
1026 sv_setsv(sv,&PL_sv_undef);
1029 if (GvIO(PL_last_in_gv)) {
1030 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1035 sv_setiv(sv, (IV)STATUS_CURRENT);
1036 #ifdef COMPLEX_STATUS
1037 SvUPGRADE(sv, SVt_PVLV);
1038 LvTARGOFF(sv) = PL_statusvalue;
1039 LvTARGLEN(sv) = PL_statusvalue_vms;
1044 if (GvIOp(PL_defoutgv))
1045 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1049 sv_setpv(sv,GvENAME(PL_defoutgv));
1050 sv_catpvs(sv,"_TOP");
1054 if (GvIOp(PL_defoutgv))
1055 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1057 s = GvENAME(PL_defoutgv);
1061 if (GvIO(PL_defoutgv))
1062 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1065 if (GvIO(PL_defoutgv))
1066 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1069 if (GvIO(PL_defoutgv))
1070 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1080 if (GvIO(PL_defoutgv))
1081 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1085 sv_copypv(sv, PL_ors_sv);
1087 sv_setsv(sv, &PL_sv_undef);
1091 IV const pid = (IV)PerlProc_getpid();
1092 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1093 /* never set manually, or at least not since last fork */
1095 /* never unsafe, even if reading in a tainted expression */
1098 /* else a value has been assigned manually, so do nothing */
1102 sv_setuid(sv, PerlProc_getuid());
1105 sv_setuid(sv, PerlProc_geteuid());
1108 sv_setgid(sv, PerlProc_getgid());
1111 sv_setgid(sv, PerlProc_getegid());
1113 #ifdef HAS_GETGROUPS
1115 Groups_t *gary = NULL;
1116 I32 i, num_groups = getgroups(0, gary);
1117 Newx(gary, num_groups, Groups_t);
1118 num_groups = getgroups(num_groups, gary);
1119 for (i = 0; i < num_groups; i++)
1120 Perl_sv_catpvf(aTHX_ sv, " %"IVdf, (IV)gary[i]);
1123 (void)SvIOK_on(sv); /* what a wonderful hack! */
1133 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1135 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1137 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1139 if (uf && uf->uf_val)
1140 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1145 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1148 STRLEN len = 0, klen;
1149 const char * const key = MgPV_const(mg,klen);
1152 PERL_ARGS_ASSERT_MAGIC_SETENV;
1156 /* defined environment variables are byte strings; unfortunately
1157 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1158 (void)SvPV_force_nomg_nolen(sv);
1159 sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1161 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1167 my_setenv(key, s); /* does the deed */
1169 #ifdef DYNAMIC_ENV_FETCH
1170 /* We just undefd an environment var. Is a replacement */
1171 /* waiting in the wings? */
1173 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1175 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1179 #if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
1180 /* And you'll never guess what the dog had */
1181 /* in its mouth... */
1183 MgTAINTEDDIR_off(mg);
1185 if (s && klen == 8 && strEQ(key, "DCL$PATH")) {
1186 char pathbuf[256], eltbuf[256], *cp, *elt;
1189 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1191 do { /* DCL$PATH may be a search list */
1192 while (1) { /* as may dev portion of any element */
1193 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1194 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1195 cando_by_name(S_IWUSR,0,elt) ) {
1196 MgTAINTEDDIR_on(mg);
1200 if ((cp = strchr(elt, ':')) != NULL)
1202 if (my_trnlnm(elt, eltbuf, j++))
1208 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1211 if (s && klen == 4 && strEQ(key,"PATH")) {
1212 const char * const strend = s + len;
1214 while (s < strend) {
1218 #ifdef VMS /* Hmm. How do we get $Config{path_sep} from C? */
1219 const char path_sep = '|';
1221 const char path_sep = ':';
1223 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf,
1224 s, strend, path_sep, &i);
1226 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1228 || !strchr(tmpbuf, ':') /* no colon thus no device name -- assume relative path */
1230 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1232 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1233 MgTAINTEDDIR_on(mg);
1239 #endif /* neither OS2 nor AMIGAOS nor WIN32 nor MSDOS */
1245 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1247 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1248 PERL_UNUSED_ARG(sv);
1249 my_setenv(MgPV_nolen_const(mg),NULL);
1254 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1257 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1258 PERL_UNUSED_ARG(mg);
1260 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1262 if (PL_localizing) {
1265 hv_iterinit(MUTABLE_HV(sv));
1266 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1268 my_setenv(hv_iterkey(entry, &keylen),
1269 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1277 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1280 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1281 PERL_UNUSED_ARG(sv);
1282 PERL_UNUSED_ARG(mg);
1284 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1292 #ifdef HAS_SIGPROCMASK
1294 restore_sigmask(pTHX_ SV *save_sv)
1296 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1297 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1301 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1304 /* Are we fetching a signal entry? */
1305 int i = (I16)mg->mg_private;
1307 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1311 const char * sig = MgPV_const(mg, siglen);
1312 mg->mg_private = i = whichsig_pvn(sig, siglen);
1317 sv_setsv(sv,PL_psig_ptr[i]);
1319 Sighandler_t sigstate = rsignal_state(i);
1320 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1321 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1324 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1325 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1328 /* cache state so we don't fetch it again */
1329 if(sigstate == (Sighandler_t) SIG_IGN)
1330 sv_setpvs(sv,"IGNORE");
1332 sv_setsv(sv,&PL_sv_undef);
1333 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1340 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1342 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1344 magic_setsig(NULL, mg);
1345 return sv_unmagic(sv, mg->mg_type);
1349 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1350 Perl_csighandler(int sig, siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1352 Perl_csighandler(int sig)
1355 #ifdef PERL_GET_SIG_CONTEXT
1356 dTHXa(PERL_GET_SIG_CONTEXT);
1360 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1361 (void) rsignal(sig, PL_csighandlerp);
1362 if (PL_sig_ignoring[sig]) return;
1364 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1365 if (PL_sig_defaulting[sig])
1366 #ifdef KILL_BY_SIGPRC
1367 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1382 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1383 /* Call the perl level handler now--
1384 * with risk we may be in malloc() or being destructed etc. */
1385 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1386 (*PL_sighandlerp)(sig, NULL, NULL);
1388 (*PL_sighandlerp)(sig);
1391 if (!PL_psig_pend) return;
1392 /* Set a flag to say this signal is pending, that is awaiting delivery after
1393 * the current Perl opcode completes */
1394 PL_psig_pend[sig]++;
1396 #ifndef SIG_PENDING_DIE_COUNT
1397 # define SIG_PENDING_DIE_COUNT 120
1399 /* Add one to say _a_ signal is pending */
1400 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1401 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1402 (unsigned long)SIG_PENDING_DIE_COUNT);
1406 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1408 Perl_csighandler_init(void)
1411 if (PL_sig_handlers_initted) return;
1413 for (sig = 1; sig < SIG_SIZE; sig++) {
1414 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1416 PL_sig_defaulting[sig] = 1;
1417 (void) rsignal(sig, PL_csighandlerp);
1419 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1420 PL_sig_ignoring[sig] = 0;
1423 PL_sig_handlers_initted = 1;
1427 #if defined HAS_SIGPROCMASK
1429 unblock_sigmask(pTHX_ void* newset)
1431 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1436 Perl_despatch_signals(pTHX)
1441 for (sig = 1; sig < SIG_SIZE; sig++) {
1442 if (PL_psig_pend[sig]) {
1444 #ifdef HAS_SIGPROCMASK
1445 /* From sigaction(2) (FreeBSD man page):
1446 * | Signal routines normally execute with the signal that
1447 * | caused their invocation blocked, but other signals may
1449 * Emulation of this behavior (from within Perl) is enabled
1453 sigset_t newset, oldset;
1455 sigemptyset(&newset);
1456 sigaddset(&newset, sig);
1457 sigprocmask(SIG_BLOCK, &newset, &oldset);
1458 was_blocked = sigismember(&oldset, sig);
1460 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1462 SAVEFREESV(save_sv);
1463 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1466 PL_psig_pend[sig] = 0;
1467 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1468 (*PL_sighandlerp)(sig, NULL, NULL);
1470 (*PL_sighandlerp)(sig);
1472 #ifdef HAS_SIGPROCMASK
1481 /* sv of NULL signifies that we're acting as magic_clearsig. */
1483 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1488 /* Need to be careful with SvREFCNT_dec(), because that can have side
1489 * effects (due to closures). We must make sure that the new disposition
1490 * is in place before it is called.
1494 #ifdef HAS_SIGPROCMASK
1498 const char *s = MgPV_const(mg,len);
1500 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1503 if (memEQs(s, len, "__DIE__"))
1505 else if (memEQs(s, len, "__WARN__")
1506 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1507 /* Merge the existing behaviours, which are as follows:
1508 magic_setsig, we always set svp to &PL_warnhook
1509 (hence we always change the warnings handler)
1510 For magic_clearsig, we don't change the warnings handler if it's
1511 set to the &PL_warnhook. */
1514 SV *tmp = sv_newmortal();
1515 Perl_croak(aTHX_ "No such hook: %s",
1516 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1520 if (*svp != PERL_WARNHOOK_FATAL)
1526 i = (I16)mg->mg_private;
1528 i = whichsig_pvn(s, len); /* ...no, a brick */
1529 mg->mg_private = (U16)i;
1533 SV *tmp = sv_newmortal();
1534 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1535 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1539 #ifdef HAS_SIGPROCMASK
1540 /* Avoid having the signal arrive at a bad time, if possible. */
1543 sigprocmask(SIG_BLOCK, &set, &save);
1545 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1546 SAVEFREESV(save_sv);
1547 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1550 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1551 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1553 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1554 PL_sig_ignoring[i] = 0;
1556 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1557 PL_sig_defaulting[i] = 0;
1559 to_dec = PL_psig_ptr[i];
1561 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1562 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1564 /* Signals don't change name during the program's execution, so once
1565 they're cached in the appropriate slot of PL_psig_name, they can
1568 Ideally we'd find some way of making SVs at (C) compile time, or
1569 at least, doing most of the work. */
1570 if (!PL_psig_name[i]) {
1571 PL_psig_name[i] = newSVpvn(s, len);
1572 SvREADONLY_on(PL_psig_name[i]);
1575 SvREFCNT_dec(PL_psig_name[i]);
1576 PL_psig_name[i] = NULL;
1577 PL_psig_ptr[i] = NULL;
1580 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1582 (void)rsignal(i, PL_csighandlerp);
1585 *svp = SvREFCNT_inc_simple_NN(sv);
1587 if (sv && SvOK(sv)) {
1588 s = SvPV_force(sv, len);
1592 if (sv && memEQs(s, len,"IGNORE")) {
1594 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1595 PL_sig_ignoring[i] = 1;
1596 (void)rsignal(i, PL_csighandlerp);
1598 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1602 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1604 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1605 PL_sig_defaulting[i] = 1;
1606 (void)rsignal(i, PL_csighandlerp);
1608 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1614 * We should warn if HINT_STRICT_REFS, but without
1615 * access to a known hint bit in a known OP, we can't
1616 * tell whether HINT_STRICT_REFS is in force or not.
1618 if (!strchr(s,':') && !strchr(s,'\''))
1619 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1622 (void)rsignal(i, PL_csighandlerp);
1624 *svp = SvREFCNT_inc_simple_NN(sv);
1628 #ifdef HAS_SIGPROCMASK
1632 SvREFCNT_dec(to_dec);
1635 #endif /* !PERL_MICRO */
1638 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1641 PERL_ARGS_ASSERT_MAGIC_SETISA;
1642 PERL_UNUSED_ARG(sv);
1644 /* Skip _isaelem because _isa will handle it shortly */
1645 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1648 return magic_clearisa(NULL, mg);
1651 /* sv of NULL signifies that we're acting as magic_setisa. */
1653 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1658 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1660 /* Bail out if destruction is going on */
1661 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1664 av_clear(MUTABLE_AV(sv));
1666 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1667 /* This occurs with setisa_elem magic, which calls this
1669 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1671 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1672 SV **svp = AvARRAY((AV *)mg->mg_obj);
1673 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1675 stash = GvSTASH((GV *)*svp++);
1676 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1683 (const GV *)mg->mg_obj
1686 /* The stash may have been detached from the symbol table, so check its
1687 name before doing anything. */
1688 if (stash && HvENAME_get(stash))
1689 mro_isa_changed_in(stash);
1695 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1697 HV * const hv = MUTABLE_HV(LvTARG(sv));
1700 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1701 PERL_UNUSED_ARG(mg);
1704 (void) hv_iterinit(hv);
1705 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1708 while (hv_iternext(hv))
1713 sv_setiv(sv, (IV)i);
1718 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1720 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1721 PERL_UNUSED_ARG(mg);
1723 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1729 =for apidoc magic_methcall
1731 Invoke a magic method (like FETCH).
1733 C<sv> and C<mg> are the tied thingy and the tie magic.
1735 C<meth> is the name of the method to call.
1737 C<argc> is the number of args (in addition to $self) to pass to the method.
1739 The C<flags> can be:
1741 G_DISCARD invoke method with G_DISCARD flag and don't
1743 G_UNDEF_FILL fill the stack with argc pointers to
1746 The arguments themselves are any values following the C<flags> argument.
1748 Returns the SV (if any) returned by the method, or NULL on failure.
1755 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1762 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1766 if (flags & G_WRITING_TO_STDERR) {
1770 SAVESPTR(PL_stderrgv);
1774 PUSHSTACKi(PERLSI_MAGIC);
1778 PUSHs(SvTIED_obj(sv, mg));
1779 if (flags & G_UNDEF_FILL) {
1781 PUSHs(&PL_sv_undef);
1783 } else if (argc > 0) {
1785 va_start(args, argc);
1788 SV *const sv = va_arg(args, SV *);
1795 if (flags & G_DISCARD) {
1796 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
1799 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
1800 ret = *PL_stack_sp--;
1803 if (flags & G_WRITING_TO_STDERR)
1809 /* wrapper for magic_methcall that creates the first arg */
1812 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1818 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
1821 if (mg->mg_len >= 0) {
1822 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
1824 else if (mg->mg_len == HEf_SVKEY)
1825 arg1 = MUTABLE_SV(mg->mg_ptr);
1827 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
1828 arg1 = newSViv((IV)(mg->mg_len));
1832 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
1834 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
1838 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
1843 PERL_ARGS_ASSERT_MAGIC_METHPACK;
1845 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
1852 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
1854 PERL_ARGS_ASSERT_MAGIC_GETPACK;
1856 if (mg->mg_type == PERL_MAGIC_tiedelem)
1857 mg->mg_flags |= MGf_GSKIP;
1858 magic_methpack(sv,mg,SV_CONST(FETCH));
1863 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
1869 PERL_ARGS_ASSERT_MAGIC_SETPACK;
1871 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
1872 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
1873 * public flags indicate its value based on copying from $val. Doing
1874 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
1875 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
1876 * wrong if $val happened to be tainted, as sv hasn't got magic
1877 * enabled, even though taint magic is in the chain. In which case,
1878 * fake up a temporary tainted value (this is easier than temporarily
1879 * re-enabling magic on sv). */
1881 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
1882 && (tmg->mg_len & 1))
1884 val = sv_mortalcopy(sv);
1890 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
1895 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
1897 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
1899 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
1900 return magic_methpack(sv,mg,SV_CONST(DELETE));
1905 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
1911 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
1913 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
1915 retval = SvIV(retsv)-1;
1917 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
1919 return (U32) retval;
1923 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
1927 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
1929 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
1934 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
1939 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
1941 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
1942 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
1949 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
1951 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
1953 return magic_methpack(sv,mg,SV_CONST(EXISTS));
1957 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
1961 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
1962 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
1964 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
1966 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
1968 if (HvEITER_get(hv))
1969 /* we are in an iteration so the hash cannot be empty */
1971 /* no xhv_eiter so now use FIRSTKEY */
1972 key = sv_newmortal();
1973 magic_nextpack(MUTABLE_SV(hv), mg, key);
1974 HvEITER_set(hv, NULL); /* need to reset iterator */
1975 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
1978 /* there is a SCALAR method that we can call */
1979 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
1981 retval = &PL_sv_undef;
1986 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
1991 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
1993 /* The magic ptr/len for the debugger's hash should always be an SV. */
1994 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
1995 Perl_croak(aTHX_ "panic: magic_setdbline len=%"IVdf", ptr='%s'",
1996 (IV)mg->mg_len, mg->mg_ptr);
1999 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
2000 setting/clearing debugger breakpoints is not a hot path. */
2001 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
2002 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2004 if (svp && SvIOKp(*svp)) {
2005 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2007 #ifdef PERL_DEBUG_READONLY_OPS
2008 Slab_to_rw(OpSLAB(o));
2010 /* set or clear breakpoint in the relevant control op */
2012 o->op_flags |= OPf_SPECIAL;
2014 o->op_flags &= ~OPf_SPECIAL;
2015 #ifdef PERL_DEBUG_READONLY_OPS
2016 Slab_to_ro(OpSLAB(o));
2024 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2027 AV * const obj = MUTABLE_AV(mg->mg_obj);
2029 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2032 sv_setiv(sv, AvFILL(obj));
2040 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2043 AV * const obj = MUTABLE_AV(mg->mg_obj);
2045 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2048 av_fill(obj, SvIV(sv));
2050 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2051 "Attempt to set length of freed array");
2057 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2061 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2062 PERL_UNUSED_ARG(sv);
2064 /* Reset the iterator when the array is cleared */
2065 #if IVSIZE == I32SIZE
2066 *((IV *) &(mg->mg_len)) = 0;
2069 *((IV *) mg->mg_ptr) = 0;
2076 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2080 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2081 PERL_UNUSED_ARG(sv);
2083 /* during global destruction, mg_obj may already have been freed */
2084 if (PL_in_clean_all)
2087 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2090 /* arylen scalar holds a pointer back to the array, but doesn't own a
2091 reference. Hence the we (the array) are about to go away with it
2092 still pointing at us. Clear its pointer, else it would be pointing
2093 at free memory. See the comment in sv_magic about reference loops,
2094 and why it can't own a reference to us. */
2101 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2104 SV* const lsv = LvTARG(sv);
2105 MAGIC * const found = mg_find_mglob(lsv);
2107 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2108 PERL_UNUSED_ARG(mg);
2110 if (found && found->mg_len != -1) {
2111 STRLEN i = found->mg_len;
2112 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2113 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2122 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2125 SV* const lsv = LvTARG(sv);
2132 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2133 PERL_UNUSED_ARG(mg);
2135 found = mg_find_mglob(lsv);
2139 found = sv_magicext_mglob(lsv);
2141 else if (!SvOK(sv)) {
2145 s = SvPV_const(lsv, len);
2150 ulen = sv_or_pv_len_utf8(lsv, s, len);
2160 else if (pos > (SSize_t)len)
2163 found->mg_len = pos;
2164 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2170 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2173 SV * const lsv = LvTARG(sv);
2174 const char * const tmps = SvPV_const(lsv,len);
2175 STRLEN offs = LvTARGOFF(sv);
2176 STRLEN rem = LvTARGLEN(sv);
2177 const bool negoff = LvFLAGS(sv) & 1;
2178 const bool negrem = LvFLAGS(sv) & 2;
2180 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2181 PERL_UNUSED_ARG(mg);
2183 if (!translate_substr_offsets(
2184 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2185 negoff ? -(IV)offs : (IV)offs, !negoff,
2186 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2188 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2189 sv_setsv_nomg(sv, &PL_sv_undef);
2194 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2195 sv_setpvn(sv, tmps + offs, rem);
2202 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2205 STRLEN len, lsv_len, oldtarglen, newtarglen;
2206 const char * const tmps = SvPV_const(sv, len);
2207 SV * const lsv = LvTARG(sv);
2208 STRLEN lvoff = LvTARGOFF(sv);
2209 STRLEN lvlen = LvTARGLEN(sv);
2210 const bool negoff = LvFLAGS(sv) & 1;
2211 const bool neglen = LvFLAGS(sv) & 2;
2213 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2214 PERL_UNUSED_ARG(mg);
2218 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2219 "Attempt to use reference as lvalue in substr"
2221 SvPV_force_nomg(lsv,lsv_len);
2222 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2223 if (!translate_substr_offsets(
2225 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2226 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2228 Perl_croak(aTHX_ "substr outside of string");
2231 sv_utf8_upgrade_nomg(lsv);
2232 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2233 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2234 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2237 else if (SvUTF8(lsv)) {
2239 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2241 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2242 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2246 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2249 if (!neglen) LvTARGLEN(sv) = newtarglen;
2250 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2256 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2260 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2261 PERL_UNUSED_ARG(sv);
2262 #ifdef NO_TAINT_SUPPORT
2263 PERL_UNUSED_ARG(mg);
2266 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
2271 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2275 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2276 PERL_UNUSED_ARG(sv);
2278 /* update taint status */
2287 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2289 SV * const lsv = LvTARG(sv);
2291 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2292 PERL_UNUSED_ARG(mg);
2294 sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2300 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2302 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2303 PERL_UNUSED_ARG(mg);
2304 do_vecset(sv); /* XXX slurp this routine */
2309 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2313 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2314 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2316 if (LvTARGLEN(sv)) {
2318 SV * const ahv = LvTARG(sv);
2319 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2323 else if (LvSTARGOFF(sv) >= 0) {
2324 AV *const av = MUTABLE_AV(LvTARG(sv));
2325 if (LvSTARGOFF(sv) <= AvFILL(av))
2327 if (SvRMAGICAL(av)) {
2328 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2329 targ = svp ? *svp : NULL;
2332 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2335 if (targ && (targ != &PL_sv_undef)) {
2336 /* somebody else defined it for us */
2337 SvREFCNT_dec(LvTARG(sv));
2338 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2340 SvREFCNT_dec(mg->mg_obj);
2342 mg->mg_flags &= ~MGf_REFCOUNTED;
2351 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2353 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2355 sv_setsv(sv, defelem_target(sv, mg));
2360 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2362 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2363 PERL_UNUSED_ARG(mg);
2367 sv_setsv(LvTARG(sv), sv);
2368 SvSETMAGIC(LvTARG(sv));
2374 Perl_vivify_defelem(pTHX_ SV *sv)
2380 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2382 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2385 SV * const ahv = LvTARG(sv);
2386 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2389 if (!value || value == &PL_sv_undef)
2390 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2392 else if (LvSTARGOFF(sv) < 0)
2393 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2395 AV *const av = MUTABLE_AV(LvTARG(sv));
2396 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2397 LvTARG(sv) = NULL; /* array can't be extended */
2399 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2400 if (!svp || !(value = *svp))
2401 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2404 SvREFCNT_inc_simple_void(value);
2405 SvREFCNT_dec(LvTARG(sv));
2408 SvREFCNT_dec(mg->mg_obj);
2410 mg->mg_flags &= ~MGf_REFCOUNTED;
2414 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2416 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2417 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2422 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2424 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2425 PERL_UNUSED_CONTEXT;
2426 PERL_UNUSED_ARG(sv);
2432 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2434 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2436 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2438 if (uf && uf->uf_set)
2439 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2444 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2446 const char type = mg->mg_type;
2448 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2450 if (type == PERL_MAGIC_qr) {
2451 } else if (type == PERL_MAGIC_bm) {
2455 assert(type == PERL_MAGIC_fm);
2457 return sv_unmagic(sv, type);
2460 #ifdef USE_LOCALE_COLLATE
2462 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2464 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2467 * RenE<eacute> Descartes said "I think not."
2468 * and vanished with a faint plop.
2470 PERL_UNUSED_CONTEXT;
2471 PERL_UNUSED_ARG(sv);
2473 Safefree(mg->mg_ptr);
2479 #endif /* USE_LOCALE_COLLATE */
2481 /* Just clear the UTF-8 cache data. */
2483 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2485 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2486 PERL_UNUSED_CONTEXT;
2487 PERL_UNUSED_ARG(sv);
2488 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2490 mg->mg_len = -1; /* The mg_len holds the len cache. */
2495 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2505 PERL_ARGS_ASSERT_MAGIC_SET;
2509 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2511 CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv);
2513 /* Croak with a READONLY error when a numbered match var is
2514 * set without a previous pattern match. Unless it's C<local $1>
2517 if (!PL_localizing) {
2518 Perl_croak_no_modify();
2524 switch (*mg->mg_ptr) {
2525 case '\001': /* ^A */
2526 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2527 else SvOK_off(PL_bodytarget);
2528 FmLINES(PL_bodytarget) = 0;
2529 if (SvPOK(PL_bodytarget)) {
2530 char *s = SvPVX(PL_bodytarget);
2531 while ( ((s = strchr(s, '\n'))) ) {
2532 FmLINES(PL_bodytarget)++;
2536 /* mg_set() has temporarily made sv non-magical */
2538 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2539 SvTAINTED_on(PL_bodytarget);
2541 SvTAINTED_off(PL_bodytarget);
2544 case '\003': /* ^C */
2545 PL_minus_c = cBOOL(SvIV(sv));
2548 case '\004': /* ^D */
2550 s = SvPV_nolen_const(sv);
2551 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2552 if (DEBUG_x_TEST || DEBUG_B_TEST)
2553 dump_all_perl(!DEBUG_B_TEST);
2555 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2558 case '\005': /* ^E */
2559 if (*(mg->mg_ptr+1) == '\0') {
2561 set_vaxc_errno(SvIV(sv));
2564 SetLastError( SvIV(sv) );
2567 os2_setsyserrno(SvIV(sv));
2569 /* will anyone ever use this? */
2570 SETERRNO(SvIV(sv), 4);
2575 else if (strEQ(mg->mg_ptr+1, "NCODING")) {
2576 SvREFCNT_dec(PL_encoding);
2577 if (SvOK(sv) || SvGMAGICAL(sv)) {
2578 PL_encoding = newSVsv(sv);
2585 case '\006': /* ^F */
2586 PL_maxsysfd = SvIV(sv);
2588 case '\010': /* ^H */
2589 PL_hints = SvIV(sv);
2591 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2592 Safefree(PL_inplace);
2593 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2595 case '\016': /* ^N */
2596 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2597 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2599 case '\017': /* ^O */
2600 if (*(mg->mg_ptr+1) == '\0') {
2601 Safefree(PL_osname);
2604 TAINT_PROPER("assigning to $^O");
2605 PL_osname = savesvpv(sv);
2608 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2610 const char *const start = SvPV(sv, len);
2611 const char *out = (const char*)memchr(start, '\0', len);
2615 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2616 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2618 /* Opening for input is more common than opening for output, so
2619 ensure that hints for input are sooner on linked list. */
2620 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2622 : newSVpvs_flags("", SvUTF8(sv));
2623 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2626 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2628 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2632 case '\020': /* ^P */
2633 PL_perldb = SvIV(sv);
2634 if (PL_perldb && !PL_DBsingle)
2637 case '\024': /* ^T */
2639 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2641 PL_basetime = (Time_t)SvIV(sv);
2644 case '\025': /* ^UTF8CACHE */
2645 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
2646 PL_utf8cache = (signed char) sv_2iv(sv);
2649 case '\027': /* ^W & $^WARNING_BITS */
2650 if (*(mg->mg_ptr+1) == '\0') {
2651 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2653 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
2654 | (i ? G_WARN_ON : G_WARN_OFF) ;
2657 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
2658 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2660 PL_compiling.cop_warnings = pWARN_STD;
2665 int accumulate = 0 ;
2666 int any_fatals = 0 ;
2667 const char * const ptr = SvPV_const(sv, len) ;
2668 for (i = 0 ; i < len ; ++i) {
2669 accumulate |= ptr[i] ;
2670 any_fatals |= (ptr[i] & 0xAA) ;
2673 if (!specialWARN(PL_compiling.cop_warnings))
2674 PerlMemShared_free(PL_compiling.cop_warnings);
2675 PL_compiling.cop_warnings = pWARN_NONE;
2677 /* Yuck. I can't see how to abstract this: */
2679 ((STRLEN *)SvPV_nolen_const(sv)) - 1,
2683 if (!specialWARN(PL_compiling.cop_warnings))
2684 PerlMemShared_free(PL_compiling.cop_warnings);
2685 PL_compiling.cop_warnings = pWARN_ALL;
2686 PL_dowarn |= G_WARN_ONCE ;
2690 const char *const p = SvPV_const(sv, len);
2692 PL_compiling.cop_warnings
2693 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
2696 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
2697 PL_dowarn |= G_WARN_ONCE ;
2705 if (PL_localizing) {
2706 if (PL_localizing == 1)
2707 SAVESPTR(PL_last_in_gv);
2709 else if (SvOK(sv) && GvIO(PL_last_in_gv))
2710 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
2713 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
2714 s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2715 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2718 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
2719 s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2720 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2723 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
2726 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
2727 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
2728 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
2731 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
2735 IO * const io = GvIO(PL_defoutgv);
2738 if ((SvIV(sv)) == 0)
2739 IoFLAGS(io) &= ~IOf_FLUSH;
2741 if (!(IoFLAGS(io) & IOf_FLUSH)) {
2742 PerlIO *ofp = IoOFP(io);
2744 (void)PerlIO_flush(ofp);
2745 IoFLAGS(io) |= IOf_FLUSH;
2751 SvREFCNT_dec(PL_rs);
2752 PL_rs = newSVsv(sv);
2755 SvREFCNT_dec(PL_ors_sv);
2757 PL_ors_sv = newSVsv(sv);
2765 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
2768 #ifdef COMPLEX_STATUS
2769 if (PL_localizing == 2) {
2770 SvUPGRADE(sv, SVt_PVLV);
2771 PL_statusvalue = LvTARGOFF(sv);
2772 PL_statusvalue_vms = LvTARGLEN(sv);
2776 #ifdef VMSISH_STATUS
2778 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
2781 STATUS_UNIX_EXIT_SET(SvIV(sv));
2786 # define PERL_VMS_BANG vaxc$errno
2788 # define PERL_VMS_BANG 0
2790 #if defined(WIN32) && ! defined(UNDER_CE)
2791 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
2792 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2794 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
2795 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2802 const Uid_t new_uid = SvUID(sv);
2803 PL_delaymagic_uid = new_uid;
2804 if (PL_delaymagic) {
2805 PL_delaymagic |= DM_RUID;
2806 break; /* don't do magic till later */
2809 rc = setruid(new_uid);
2812 rc = setreuid(new_uid, (Uid_t)-1);
2814 #ifdef HAS_SETRESUID
2815 rc = setresuid(new_uid, (Uid_t)-1, (Uid_t)-1);
2817 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
2819 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
2820 if (new_uid != 0 && PerlProc_getuid() == 0)
2821 rc = PerlProc_setuid(0);
2823 rc = PerlProc_setuid(new_uid);
2825 Perl_croak(aTHX_ "setruid() not implemented");
2830 /* XXX $< currently silently ignores failures */
2831 PERL_UNUSED_VAR(rc);
2837 const Uid_t new_euid = SvUID(sv);
2838 PL_delaymagic_euid = new_euid;
2839 if (PL_delaymagic) {
2840 PL_delaymagic |= DM_EUID;
2841 break; /* don't do magic till later */
2844 rc = seteuid(new_euid);
2847 rc = setreuid((Uid_t)-1, new_euid);
2849 #ifdef HAS_SETRESUID
2850 rc = setresuid((Uid_t)-1, new_euid, (Uid_t)-1);
2852 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
2853 rc = PerlProc_setuid(new_euid);
2855 Perl_croak(aTHX_ "seteuid() not implemented");
2860 /* XXX $> currently silently ignores failures */
2861 PERL_UNUSED_VAR(rc);
2867 const Gid_t new_gid = SvGID(sv);
2868 PL_delaymagic_gid = new_gid;
2869 if (PL_delaymagic) {
2870 PL_delaymagic |= DM_RGID;
2871 break; /* don't do magic till later */
2874 rc = setrgid(new_gid);
2877 rc = setregid(new_gid, (Gid_t)-1);
2879 #ifdef HAS_SETRESGID
2880 rc = setresgid(new_gid, (Gid_t)-1, (Gid_t) -1);
2882 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
2883 rc = PerlProc_setgid(new_gid);
2885 Perl_croak(aTHX_ "setrgid() not implemented");
2890 /* XXX $( currently silently ignores failures */
2891 PERL_UNUSED_VAR(rc);
2898 #ifdef HAS_SETGROUPS
2900 const char *p = SvPV_const(sv, len);
2901 Groups_t *gary = NULL;
2902 #ifdef _SC_NGROUPS_MAX
2903 int maxgrp = sysconf(_SC_NGROUPS_MAX);
2908 int maxgrp = NGROUPS;
2913 new_egid = (Gid_t)Atol(p);
2914 for (i = 0; i < maxgrp; ++i) {
2915 while (*p && !isSPACE(*p))
2922 Newx(gary, i + 1, Groups_t);
2924 Renew(gary, i + 1, Groups_t);
2925 gary[i] = (Groups_t)Atol(p);
2928 rc = setgroups(i, gary);
2931 #else /* HAS_SETGROUPS */
2932 new_egid = SvGID(sv);
2933 #endif /* HAS_SETGROUPS */
2934 PL_delaymagic_egid = new_egid;
2935 if (PL_delaymagic) {
2936 PL_delaymagic |= DM_EGID;
2937 break; /* don't do magic till later */
2940 rc = setegid(new_egid);
2943 rc = setregid((Gid_t)-1, new_egid);
2945 #ifdef HAS_SETRESGID
2946 rc = setresgid((Gid_t)-1, new_egid, (Gid_t)-1);
2948 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
2949 rc = PerlProc_setgid(new_egid);
2951 Perl_croak(aTHX_ "setegid() not implemented");
2956 /* XXX $) currently silently ignores failures */
2957 PERL_UNUSED_VAR(rc);
2961 PL_chopset = SvPV_force(sv,len);
2964 /* Store the pid in mg->mg_obj so we can tell when a fork has
2965 occurred. mg->mg_obj points to *$ by default, so clear it. */
2966 if (isGV(mg->mg_obj)) {
2967 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
2968 SvREFCNT_dec(mg->mg_obj);
2969 mg->mg_flags |= MGf_REFCOUNTED;
2970 mg->mg_obj = newSViv((IV)PerlProc_getpid());
2972 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
2975 LOCK_DOLLARZERO_MUTEX;
2976 #ifdef HAS_SETPROCTITLE
2977 /* The BSDs don't show the argv[] in ps(1) output, they
2978 * show a string from the process struct and provide
2979 * the setproctitle() routine to manipulate that. */
2980 if (PL_origalen != 1) {
2981 s = SvPV_const(sv, len);
2982 # if __FreeBSD_version > 410001
2983 /* The leading "-" removes the "perl: " prefix,
2984 * but not the "(perl) suffix from the ps(1)
2985 * output, because that's what ps(1) shows if the
2986 * argv[] is modified. */
2987 setproctitle("-%s", s);
2988 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2989 /* This doesn't really work if you assume that
2990 * $0 = 'foobar'; will wipe out 'perl' from the $0
2991 * because in ps(1) output the result will be like
2992 * sprintf("perl: %s (perl)", s)
2993 * I guess this is a security feature:
2994 * one (a user process) cannot get rid of the original name.
2996 setproctitle("%s", s);
2999 #elif defined(__hpux) && defined(PSTAT_SETCMD)
3000 if (PL_origalen != 1) {
3002 s = SvPV_const(sv, len);
3003 un.pst_command = (char *)s;
3004 pstat(PSTAT_SETCMD, un, len, 0, 0);
3007 if (PL_origalen > 1) {
3008 /* PL_origalen is set in perl_parse(). */
3009 s = SvPV_force(sv,len);
3010 if (len >= (STRLEN)PL_origalen-1) {
3011 /* Longer than original, will be truncated. We assume that
3012 * PL_origalen bytes are available. */
3013 Copy(s, PL_origargv[0], PL_origalen-1, char);
3016 /* Shorter than original, will be padded. */
3018 /* Special case for Mac OS X: see [perl #38868] */
3021 /* Is the space counterintuitive? Yes.
3022 * (You were expecting \0?)
3023 * Does it work? Seems to. (In Linux 2.4.20 at least.)
3025 const int pad = ' ';
3027 Copy(s, PL_origargv[0], len, char);
3028 PL_origargv[0][len] = 0;
3029 memset(PL_origargv[0] + len + 1,
3030 pad, PL_origalen - len - 1);
3032 PL_origargv[0][PL_origalen-1] = 0;
3033 for (i = 1; i < PL_origargc; i++)
3035 #ifdef HAS_PRCTL_SET_NAME
3036 /* Set the legacy process name in addition to the POSIX name on Linux */
3037 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
3038 /* diag_listed_as: SKIPME */
3039 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
3044 UNLOCK_DOLLARZERO_MUTEX;
3051 Perl_whichsig_sv(pTHX_ SV *sigsv)
3055 PERL_ARGS_ASSERT_WHICHSIG_SV;
3056 PERL_UNUSED_CONTEXT;
3057 sigpv = SvPV_const(sigsv, siglen);
3058 return whichsig_pvn(sigpv, siglen);
3062 Perl_whichsig_pv(pTHX_ const char *sig)
3064 PERL_ARGS_ASSERT_WHICHSIG_PV;
3065 PERL_UNUSED_CONTEXT;
3066 return whichsig_pvn(sig, strlen(sig));
3070 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3074 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3075 PERL_UNUSED_CONTEXT;
3077 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3078 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3079 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3081 if (memEQs(sig, len, "CHLD"))
3085 if (memEQs(sig, len, "CLD"))
3092 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3093 Perl_sighandler(int sig, siginfo_t *sip, void *uap)
3095 Perl_sighandler(int sig)
3098 #ifdef PERL_GET_SIG_CONTEXT
3099 dTHXa(PERL_GET_SIG_CONTEXT);
3106 SV * const tSv = PL_Sv;
3110 XPV * const tXpv = PL_Xpv;
3111 I32 old_ss_ix = PL_savestack_ix;
3112 SV *errsv_save = NULL;
3115 if (!PL_psig_ptr[sig]) {
3116 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3121 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3122 /* Max number of items pushed there is 3*n or 4. We cannot fix
3123 infinity, so we fix 4 (in fact 5): */
3124 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3126 PL_savestack_ix += 5; /* Protect save in progress. */
3127 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3130 /* sv_2cv is too complicated, try a simpler variant first: */
3131 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3132 || SvTYPE(cv) != SVt_PVCV) {
3134 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3137 if (!cv || !CvROOT(cv)) {
3138 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "SIG%s handler \"%s\" not defined.\n",
3139 PL_sig_name[sig], (gv ? GvENAME(gv)
3146 sv = PL_psig_name[sig]
3147 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3148 : newSVpv(PL_sig_name[sig],0);
3152 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3153 /* make sure our assumption about the size of the SAVEs are correct:
3154 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3155 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3158 PUSHSTACKi(PERLSI_SIGNAL);
3161 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3163 struct sigaction oact;
3165 if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3168 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3169 /* The siginfo fields signo, code, errno, pid, uid,
3170 * addr, status, and band are defined by POSIX/SUSv3. */
3171 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3172 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3173 #if 0 /* XXX TODO: Configure scan for the existence of these, but even that does not help if the SA_SIGINFO is not implemented according to the spec. */
3174 hv_stores(sih, "errno", newSViv(sip->si_errno));
3175 hv_stores(sih, "status", newSViv(sip->si_status));
3176 hv_stores(sih, "uid", newSViv(sip->si_uid));
3177 hv_stores(sih, "pid", newSViv(sip->si_pid));
3178 hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3179 hv_stores(sih, "band", newSViv(sip->si_band));
3183 mPUSHp((char *)sip, sizeof(*sip));
3191 errsv_save = newSVsv(ERRSV);
3193 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3197 SV * const errsv = ERRSV;
3198 if (SvTRUE_NN(errsv)) {
3199 SvREFCNT_dec(errsv_save);
3201 /* Handler "died", for example to get out of a restart-able read().
3202 * Before we re-do that on its behalf re-enable the signal which was
3203 * blocked by the system when we entered.
3205 #ifdef HAS_SIGPROCMASK
3206 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3212 sigaddset(&set,sig);
3213 sigprocmask(SIG_UNBLOCK, &set, NULL);
3216 /* Not clear if this will work */
3217 (void)rsignal(sig, SIG_IGN);
3218 (void)rsignal(sig, PL_csighandlerp);
3220 #endif /* !PERL_MICRO */
3224 sv_setsv(errsv, errsv_save);
3225 SvREFCNT_dec(errsv_save);
3230 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3231 PL_savestack_ix = old_ss_ix;
3233 SvREFCNT_dec_NN(sv);
3234 PL_op = myop; /* Apparently not needed... */
3236 PL_Sv = tSv; /* Restore global temporaries. */
3243 S_restore_magic(pTHX_ const void *p)
3246 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3247 SV* const sv = mgs->mgs_sv;
3253 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3254 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3255 #ifdef PERL_OLD_COPY_ON_WRITE
3256 /* While magic was saved (and off) sv_setsv may well have seen
3257 this SV as a prime candidate for COW. */
3259 sv_force_normal_flags(sv, 0);
3261 if (mgs->mgs_readonly)
3263 if (mgs->mgs_magical)
3264 SvFLAGS(sv) |= mgs->mgs_magical;
3269 bumped = mgs->mgs_bumped;
3270 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3272 /* If we're still on top of the stack, pop us off. (That condition
3273 * will be satisfied if restore_magic was called explicitly, but *not*
3274 * if it's being called via leave_scope.)
3275 * The reason for doing this is that otherwise, things like sv_2cv()
3276 * may leave alloc gunk on the savestack, and some code
3277 * (e.g. sighandler) doesn't expect that...
3279 if (PL_savestack_ix == mgs->mgs_ss_ix)
3281 UV popval = SSPOPUV;
3282 assert(popval == SAVEt_DESTRUCTOR_X);
3283 PL_savestack_ix -= 2;
3285 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3286 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3289 if (SvREFCNT(sv) == 1) {
3290 /* We hold the last reference to this SV, which implies that the
3291 SV was deleted as a side effect of the routines we called.
3292 So artificially keep it alive a bit longer.
3293 We avoid turning on the TEMP flag, which can cause the SV's
3294 buffer to get stolen (and maybe other stuff). */
3299 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3303 /* clean up the mess created by Perl_sighandler().
3304 * Note that this is only called during an exit in a signal handler;
3305 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3309 S_unwind_handler_stack(pTHX_ const void *p)
3314 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3318 =for apidoc magic_sethint
3320 Triggered by a store to %^H, records the key/value pair to
3321 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3322 anything that would need a deep copy. Maybe we should warn if we find a
3328 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3331 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3332 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3334 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3336 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3337 an alternative leaf in there, with PL_compiling.cop_hints being used if
3338 it's NULL. If needed for threads, the alternative could lock a mutex,
3339 or take other more complex action. */
3341 /* Something changed in %^H, so it will need to be restored on scope exit.
3342 Doing this here saves a lot of doing it manually in perl code (and
3343 forgetting to do it, and consequent subtle errors. */
3344 PL_hints |= HINT_LOCALIZE_HH;
3345 CopHINTHASH_set(&PL_compiling,
3346 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3351 =for apidoc magic_clearhint
3353 Triggered by a delete from %^H, records the key to
3354 C<PL_compiling.cop_hints_hash>.
3359 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3363 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3364 PERL_UNUSED_ARG(sv);
3366 PL_hints |= HINT_LOCALIZE_HH;
3367 CopHINTHASH_set(&PL_compiling,
3368 mg->mg_len == HEf_SVKEY
3369 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3370 MUTABLE_SV(mg->mg_ptr), 0, 0)
3371 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3372 mg->mg_ptr, mg->mg_len, 0, 0));
3377 =for apidoc magic_clearhints
3379 Triggered by clearing %^H, resets C<PL_compiling.cop_hints_hash>.
3384 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3386 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3387 PERL_UNUSED_ARG(sv);
3388 PERL_UNUSED_ARG(mg);
3389 cophh_free(CopHINTHASH_get(&PL_compiling));
3390 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3395 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3396 const char *name, I32 namlen)
3400 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3401 PERL_UNUSED_ARG(sv);
3402 PERL_UNUSED_ARG(name);
3403 PERL_UNUSED_ARG(namlen);
3405 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3406 nmg = mg_find(nsv, mg->mg_type);
3407 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3408 nmg->mg_ptr = mg->mg_ptr;
3409 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3410 nmg->mg_flags |= MGf_REFCOUNTED;
3416 * c-indentation-style: bsd
3418 * indent-tabs-mode: nil
3421 * ex: set ts=8 sts=4 sw=4 et: