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;
751 assert(strNE(SvPVX(sv), ""));
753 /* In some locales the error string may come back as UTF-8, in
754 * which case we should turn on that flag. This didn't use to
755 * happen, and to avoid any possible backward compatibility issues,
756 * we don't turn on the flag unless we have to. So the flag stays
757 * off for an entirely ASCII string. We assume that if the string
758 * looks like UTF-8, it really is UTF-8: "text in any other
759 * encoding that uses bytes with the high bit set is extremely
760 * unlikely to pass a UTF-8 validity test"
761 * (http://en.wikipedia.org/wiki/Charset_detection). There is a
762 * potential that we will get it wrong however, especially on short
763 * error message text. (If it turns out to be necessary, we could
764 * also keep track if the current LC_MESSAGES locale is UTF-8) */
765 if (! IN_BYTES /* respect 'use bytes' */
766 && ! is_ascii_string((U8*) SvPVX_const(sv), SvCUR(sv))
767 && is_utf8_string((U8*) SvPVX_const(sv), SvCUR(sv)))
779 Perl_magic_get(pTHX_ SV *sv, MAGIC *mg)
783 const char *s = NULL;
785 const char * const remaining = mg->mg_ptr + 1;
788 PERL_ARGS_ASSERT_MAGIC_GET;
792 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
794 CALLREG_NUMBUF_FETCH(rx,paren,sv);
796 sv_setsv(sv,&PL_sv_undef);
801 nextchar = *remaining;
802 switch (*mg->mg_ptr) {
803 case '\001': /* ^A */
804 if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget);
805 else sv_setsv(sv, &PL_sv_undef);
806 if (SvTAINTED(PL_bodytarget))
809 case '\003': /* ^C, ^CHILD_ERROR_NATIVE */
810 if (nextchar == '\0') {
811 sv_setiv(sv, (IV)PL_minus_c);
813 else if (strEQ(remaining, "HILD_ERROR_NATIVE")) {
814 sv_setiv(sv, (IV)STATUS_NATIVE);
818 case '\004': /* ^D */
819 sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK));
821 case '\005': /* ^E */
822 if (nextchar != '\0') {
823 if (strEQ(remaining, "NCODING"))
824 sv_setsv(sv, PL_encoding);
828 #if defined(VMS) || defined(OS2) || defined(WIN32)
832 $DESCRIPTOR(msgdsc,msg);
833 sv_setnv(sv,(NV) vaxc$errno);
834 if (sys$getmsg(vaxc$errno,&msgdsc.dsc$w_length,&msgdsc,0,0) & 1)
835 sv_setpvn(sv,msgdsc.dsc$a_pointer,msgdsc.dsc$w_length);
840 if (!(_emx_env & 0x200)) { /* Under DOS */
841 sv_setnv(sv, (NV)errno);
842 sv_setpv(sv, errno ? Strerror(errno) : "");
844 if (errno != errno_isOS2) {
845 const int tmp = _syserrno();
846 if (tmp) /* 2nd call to _syserrno() makes it 0 */
849 sv_setnv(sv, (NV)Perl_rc);
850 sv_setpv(sv, os2error(Perl_rc));
852 if (strNE(SvPVX(sv), "")) {
853 fixup_errno_string(sv);
855 # elif defined(WIN32)
857 const DWORD dwErr = GetLastError();
858 sv_setnv(sv, (NV)dwErr);
860 PerlProc_GetOSError(sv, dwErr);
861 fixup_errno_string(sv);
868 # error Missing code for platform
871 SvNOK_on(sv); /* what a wonderful hack! */
873 #endif /* End of platforms with special handling for $^E; others just fall
880 sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno));
882 sv_setnv(sv, (NV)errno);
885 if (errno == errno_isOS2 || errno == errno_isOS2_set)
886 sv_setpv(sv, os2error(Perl_rc));
894 /* Strerror can return NULL on some platforms, which will result in
895 * 'sv' not being considered SvOK. The SvNOK_on() below will cause
896 * just the number part to be valid */
897 sv_setpv(sv, Strerror(errno));
899 fixup_errno_string(sv);
906 SvNOK_on(sv); /* what a wonderful hack! */
909 case '\006': /* ^F */
910 sv_setiv(sv, (IV)PL_maxsysfd);
912 case '\007': /* ^GLOBAL_PHASE */
913 if (strEQ(remaining, "LOBAL_PHASE")) {
914 sv_setpvn(sv, PL_phase_names[PL_phase],
915 strlen(PL_phase_names[PL_phase]));
918 case '\010': /* ^H */
919 sv_setiv(sv, (IV)PL_hints);
921 case '\011': /* ^I */ /* NOT \t in EBCDIC */
922 sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */
924 case '\014': /* ^LAST_FH */
925 if (strEQ(remaining, "AST_FH")) {
927 assert(isGV_with_GP(PL_last_in_gv));
928 SV_CHECK_THINKFIRST_COW_DROP(sv);
929 prepare_SV_for_RV(sv);
931 SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv));
935 else sv_setsv_nomg(sv, NULL);
938 case '\017': /* ^O & ^OPEN */
939 if (nextchar == '\0') {
940 sv_setpv(sv, PL_osname);
943 else if (strEQ(remaining, "PEN")) {
944 Perl_emulate_cop_io(aTHX_ &PL_compiling, sv);
948 sv_setiv(sv, (IV)PL_perldb);
950 case '\023': /* ^S */
952 if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING)
955 sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE));
960 case '\024': /* ^T */
961 if (nextchar == '\0') {
963 sv_setnv(sv, PL_basetime);
965 sv_setiv(sv, (IV)PL_basetime);
968 else if (strEQ(remaining, "AINT"))
969 sv_setiv(sv, TAINTING_get
970 ? (TAINT_WARN_get || PL_unsafe ? -1 : 1)
973 case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */
974 if (strEQ(remaining, "NICODE"))
975 sv_setuv(sv, (UV) PL_unicode);
976 else if (strEQ(remaining, "TF8LOCALE"))
977 sv_setuv(sv, (UV) PL_utf8locale);
978 else if (strEQ(remaining, "TF8CACHE"))
979 sv_setiv(sv, (IV) PL_utf8cache);
981 case '\027': /* ^W & $^WARNING_BITS */
982 if (nextchar == '\0')
983 sv_setiv(sv, (IV)((PL_dowarn & G_WARN_ON) ? TRUE : FALSE));
984 else if (strEQ(remaining, "ARNING_BITS")) {
985 if (PL_compiling.cop_warnings == pWARN_NONE) {
986 sv_setpvn(sv, WARN_NONEstring, WARNsize) ;
988 else if (PL_compiling.cop_warnings == pWARN_STD) {
989 sv_setsv(sv, &PL_sv_undef);
992 else if (PL_compiling.cop_warnings == pWARN_ALL) {
993 /* Get the bit mask for $warnings::Bits{all}, because
994 * it could have been extended by warnings::register */
995 HV * const bits = get_hv("warnings::Bits", 0);
996 SV ** const bits_all = bits ? hv_fetchs(bits, "all", FALSE) : NULL;
998 sv_copypv(sv, *bits_all);
1000 sv_setpvn(sv, WARN_ALLstring, WARNsize);
1003 sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1),
1004 *PL_compiling.cop_warnings);
1009 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1010 paren = RX_LASTPAREN(rx);
1012 goto do_numbuf_fetch;
1014 sv_setsv(sv,&PL_sv_undef);
1016 case '\016': /* ^N */
1017 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
1018 paren = RX_LASTCLOSEPAREN(rx);
1020 goto do_numbuf_fetch;
1022 sv_setsv(sv,&PL_sv_undef);
1025 if (GvIO(PL_last_in_gv)) {
1026 sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv)));
1031 sv_setiv(sv, (IV)STATUS_CURRENT);
1032 #ifdef COMPLEX_STATUS
1033 SvUPGRADE(sv, SVt_PVLV);
1034 LvTARGOFF(sv) = PL_statusvalue;
1035 LvTARGLEN(sv) = PL_statusvalue_vms;
1040 if (GvIOp(PL_defoutgv))
1041 s = IoTOP_NAME(GvIOp(PL_defoutgv));
1045 sv_setpv(sv,GvENAME(PL_defoutgv));
1046 sv_catpvs(sv,"_TOP");
1050 if (GvIOp(PL_defoutgv))
1051 s = IoFMT_NAME(GvIOp(PL_defoutgv));
1053 s = GvENAME(PL_defoutgv);
1057 if (GvIO(PL_defoutgv))
1058 sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv)));
1061 if (GvIO(PL_defoutgv))
1062 sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv)));
1065 if (GvIO(PL_defoutgv))
1066 sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv)));
1076 if (GvIO(PL_defoutgv))
1077 sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 );
1081 sv_copypv(sv, PL_ors_sv);
1083 sv_setsv(sv, &PL_sv_undef);
1087 IV const pid = (IV)PerlProc_getpid();
1088 if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) {
1089 /* never set manually, or at least not since last fork */
1091 /* never unsafe, even if reading in a tainted expression */
1094 /* else a value has been assigned manually, so do nothing */
1098 sv_setuid(sv, PerlProc_getuid());
1101 sv_setuid(sv, PerlProc_geteuid());
1104 sv_setgid(sv, PerlProc_getgid());
1107 sv_setgid(sv, PerlProc_getegid());
1109 #ifdef HAS_GETGROUPS
1111 Groups_t *gary = NULL;
1112 I32 i, num_groups = getgroups(0, gary);
1113 Newx(gary, num_groups, Groups_t);
1114 num_groups = getgroups(num_groups, gary);
1115 for (i = 0; i < num_groups; i++)
1116 Perl_sv_catpvf(aTHX_ sv, " %"IVdf, (IV)gary[i]);
1119 (void)SvIOK_on(sv); /* what a wonderful hack! */
1129 Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg)
1131 struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
1133 PERL_ARGS_ASSERT_MAGIC_GETUVAR;
1135 if (uf && uf->uf_val)
1136 (*uf->uf_val)(aTHX_ uf->uf_index, sv);
1141 Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg)
1144 STRLEN len = 0, klen;
1145 const char * const key = MgPV_const(mg,klen);
1148 PERL_ARGS_ASSERT_MAGIC_SETENV;
1152 /* defined environment variables are byte strings; unfortunately
1153 there is no SvPVbyte_force_nomg(), so we must do this piecewise */
1154 (void)SvPV_force_nomg_nolen(sv);
1155 sv_utf8_downgrade(sv, /* fail_ok */ TRUE);
1157 Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv");
1163 my_setenv(key, s); /* does the deed */
1165 #ifdef DYNAMIC_ENV_FETCH
1166 /* We just undefd an environment var. Is a replacement */
1167 /* waiting in the wings? */
1169 SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE);
1171 s = SvOK(*valp) ? SvPV_const(*valp, len) : "";
1175 #if !defined(OS2) && !defined(AMIGAOS) && !defined(WIN32) && !defined(MSDOS)
1176 /* And you'll never guess what the dog had */
1177 /* in its mouth... */
1179 MgTAINTEDDIR_off(mg);
1181 if (s && klen == 8 && strEQ(key, "DCL$PATH")) {
1182 char pathbuf[256], eltbuf[256], *cp, *elt;
1185 my_strlcpy(eltbuf, s, sizeof(eltbuf));
1187 do { /* DCL$PATH may be a search list */
1188 while (1) { /* as may dev portion of any element */
1189 if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) {
1190 if ( *(cp+1) == '.' || *(cp+1) == '-' ||
1191 cando_by_name(S_IWUSR,0,elt) ) {
1192 MgTAINTEDDIR_on(mg);
1196 if ((cp = strchr(elt, ':')) != NULL)
1198 if (my_trnlnm(elt, eltbuf, j++))
1204 } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf));
1207 if (s && klen == 4 && strEQ(key,"PATH")) {
1208 const char * const strend = s + len;
1210 while (s < strend) {
1214 #ifdef VMS /* Hmm. How do we get $Config{path_sep} from C? */
1215 const char path_sep = '|';
1217 const char path_sep = ':';
1219 s = delimcpy(tmpbuf, tmpbuf + sizeof tmpbuf,
1220 s, strend, path_sep, &i);
1222 if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */
1224 || !strchr(tmpbuf, ':') /* no colon thus no device name -- assume relative path */
1226 || *tmpbuf != '/' /* no starting slash -- assume relative path */
1228 || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) {
1229 MgTAINTEDDIR_on(mg);
1235 #endif /* neither OS2 nor AMIGAOS nor WIN32 nor MSDOS */
1241 Perl_magic_clearenv(pTHX_ SV *sv, MAGIC *mg)
1243 PERL_ARGS_ASSERT_MAGIC_CLEARENV;
1244 PERL_UNUSED_ARG(sv);
1245 my_setenv(MgPV_nolen_const(mg),NULL);
1250 Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg)
1253 PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV;
1254 PERL_UNUSED_ARG(mg);
1256 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1258 if (PL_localizing) {
1261 hv_iterinit(MUTABLE_HV(sv));
1262 while ((entry = hv_iternext(MUTABLE_HV(sv)))) {
1264 my_setenv(hv_iterkey(entry, &keylen),
1265 SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry)));
1273 Perl_magic_clear_all_env(pTHX_ SV *sv, MAGIC *mg)
1276 PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV;
1277 PERL_UNUSED_ARG(sv);
1278 PERL_UNUSED_ARG(mg);
1280 Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system");
1288 #ifdef HAS_SIGPROCMASK
1290 restore_sigmask(pTHX_ SV *save_sv)
1292 const sigset_t * const ossetp = (const sigset_t *) SvPV_nolen_const( save_sv );
1293 (void)sigprocmask(SIG_SETMASK, ossetp, NULL);
1297 Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg)
1300 /* Are we fetching a signal entry? */
1301 int i = (I16)mg->mg_private;
1303 PERL_ARGS_ASSERT_MAGIC_GETSIG;
1307 const char * sig = MgPV_const(mg, siglen);
1308 mg->mg_private = i = whichsig_pvn(sig, siglen);
1313 sv_setsv(sv,PL_psig_ptr[i]);
1315 Sighandler_t sigstate = rsignal_state(i);
1316 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1317 if (PL_sig_handlers_initted && PL_sig_ignoring[i])
1320 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1321 if (PL_sig_handlers_initted && PL_sig_defaulting[i])
1324 /* cache state so we don't fetch it again */
1325 if(sigstate == (Sighandler_t) SIG_IGN)
1326 sv_setpvs(sv,"IGNORE");
1328 sv_setsv(sv,&PL_sv_undef);
1329 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1336 Perl_magic_clearsig(pTHX_ SV *sv, MAGIC *mg)
1338 PERL_ARGS_ASSERT_MAGIC_CLEARSIG;
1340 magic_setsig(NULL, mg);
1341 return sv_unmagic(sv, mg->mg_type);
1345 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1346 Perl_csighandler(int sig, siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSED_DECL)
1348 Perl_csighandler(int sig)
1351 #ifdef PERL_GET_SIG_CONTEXT
1352 dTHXa(PERL_GET_SIG_CONTEXT);
1356 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1357 (void) rsignal(sig, PL_csighandlerp);
1358 if (PL_sig_ignoring[sig]) return;
1360 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1361 if (PL_sig_defaulting[sig])
1362 #ifdef KILL_BY_SIGPRC
1363 exit((Perl_sig_to_vmscondition(sig)&STS$M_COND_ID)|STS$K_SEVERE|STS$M_INHIB_MSG);
1378 (PL_signals & PERL_SIGNALS_UNSAFE_FLAG))
1379 /* Call the perl level handler now--
1380 * with risk we may be in malloc() or being destructed etc. */
1381 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1382 (*PL_sighandlerp)(sig, NULL, NULL);
1384 (*PL_sighandlerp)(sig);
1387 if (!PL_psig_pend) return;
1388 /* Set a flag to say this signal is pending, that is awaiting delivery after
1389 * the current Perl opcode completes */
1390 PL_psig_pend[sig]++;
1392 #ifndef SIG_PENDING_DIE_COUNT
1393 # define SIG_PENDING_DIE_COUNT 120
1395 /* Add one to say _a_ signal is pending */
1396 if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT)
1397 Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded",
1398 (unsigned long)SIG_PENDING_DIE_COUNT);
1402 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1404 Perl_csighandler_init(void)
1407 if (PL_sig_handlers_initted) return;
1409 for (sig = 1; sig < SIG_SIZE; sig++) {
1410 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1412 PL_sig_defaulting[sig] = 1;
1413 (void) rsignal(sig, PL_csighandlerp);
1415 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1416 PL_sig_ignoring[sig] = 0;
1419 PL_sig_handlers_initted = 1;
1423 #if defined HAS_SIGPROCMASK
1425 unblock_sigmask(pTHX_ void* newset)
1427 sigprocmask(SIG_UNBLOCK, (sigset_t*)newset, NULL);
1432 Perl_despatch_signals(pTHX)
1437 for (sig = 1; sig < SIG_SIZE; sig++) {
1438 if (PL_psig_pend[sig]) {
1440 #ifdef HAS_SIGPROCMASK
1441 /* From sigaction(2) (FreeBSD man page):
1442 * | Signal routines normally execute with the signal that
1443 * | caused their invocation blocked, but other signals may
1445 * Emulation of this behavior (from within Perl) is enabled
1449 sigset_t newset, oldset;
1451 sigemptyset(&newset);
1452 sigaddset(&newset, sig);
1453 sigprocmask(SIG_BLOCK, &newset, &oldset);
1454 was_blocked = sigismember(&oldset, sig);
1456 SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t));
1458 SAVEFREESV(save_sv);
1459 SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv));
1462 PL_psig_pend[sig] = 0;
1463 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
1464 (*PL_sighandlerp)(sig, NULL, NULL);
1466 (*PL_sighandlerp)(sig);
1468 #ifdef HAS_SIGPROCMASK
1477 /* sv of NULL signifies that we're acting as magic_clearsig. */
1479 Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg)
1484 /* Need to be careful with SvREFCNT_dec(), because that can have side
1485 * effects (due to closures). We must make sure that the new disposition
1486 * is in place before it is called.
1490 #ifdef HAS_SIGPROCMASK
1494 const char *s = MgPV_const(mg,len);
1496 PERL_ARGS_ASSERT_MAGIC_SETSIG;
1499 if (memEQs(s, len, "__DIE__"))
1501 else if (memEQs(s, len, "__WARN__")
1502 && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) {
1503 /* Merge the existing behaviours, which are as follows:
1504 magic_setsig, we always set svp to &PL_warnhook
1505 (hence we always change the warnings handler)
1506 For magic_clearsig, we don't change the warnings handler if it's
1507 set to the &PL_warnhook. */
1510 SV *tmp = sv_newmortal();
1511 Perl_croak(aTHX_ "No such hook: %s",
1512 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1516 if (*svp != PERL_WARNHOOK_FATAL)
1522 i = (I16)mg->mg_private;
1524 i = whichsig_pvn(s, len); /* ...no, a brick */
1525 mg->mg_private = (U16)i;
1529 SV *tmp = sv_newmortal();
1530 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s",
1531 pv_pretty(tmp, s, len, 0, NULL, NULL, 0));
1535 #ifdef HAS_SIGPROCMASK
1536 /* Avoid having the signal arrive at a bad time, if possible. */
1539 sigprocmask(SIG_BLOCK, &set, &save);
1541 save_sv = newSVpvn((char *)(&save), sizeof(sigset_t));
1542 SAVEFREESV(save_sv);
1543 SAVEDESTRUCTOR_X(restore_sigmask, save_sv);
1546 #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS)
1547 if (!PL_sig_handlers_initted) Perl_csighandler_init();
1549 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1550 PL_sig_ignoring[i] = 0;
1552 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1553 PL_sig_defaulting[i] = 0;
1555 to_dec = PL_psig_ptr[i];
1557 PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv);
1558 SvTEMP_off(sv); /* Make sure it doesn't go away on us */
1560 /* Signals don't change name during the program's execution, so once
1561 they're cached in the appropriate slot of PL_psig_name, they can
1564 Ideally we'd find some way of making SVs at (C) compile time, or
1565 at least, doing most of the work. */
1566 if (!PL_psig_name[i]) {
1567 PL_psig_name[i] = newSVpvn(s, len);
1568 SvREADONLY_on(PL_psig_name[i]);
1571 SvREFCNT_dec(PL_psig_name[i]);
1572 PL_psig_name[i] = NULL;
1573 PL_psig_ptr[i] = NULL;
1576 if (sv && (isGV_with_GP(sv) || SvROK(sv))) {
1578 (void)rsignal(i, PL_csighandlerp);
1581 *svp = SvREFCNT_inc_simple_NN(sv);
1583 if (sv && SvOK(sv)) {
1584 s = SvPV_force(sv, len);
1588 if (sv && memEQs(s, len,"IGNORE")) {
1590 #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS
1591 PL_sig_ignoring[i] = 1;
1592 (void)rsignal(i, PL_csighandlerp);
1594 (void)rsignal(i, (Sighandler_t) SIG_IGN);
1598 else if (!sv || memEQs(s, len,"DEFAULT") || !len) {
1600 #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS
1601 PL_sig_defaulting[i] = 1;
1602 (void)rsignal(i, PL_csighandlerp);
1604 (void)rsignal(i, (Sighandler_t) SIG_DFL);
1610 * We should warn if HINT_STRICT_REFS, but without
1611 * access to a known hint bit in a known OP, we can't
1612 * tell whether HINT_STRICT_REFS is in force or not.
1614 if (!strchr(s,':') && !strchr(s,'\''))
1615 Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"),
1618 (void)rsignal(i, PL_csighandlerp);
1620 *svp = SvREFCNT_inc_simple_NN(sv);
1624 #ifdef HAS_SIGPROCMASK
1628 SvREFCNT_dec(to_dec);
1631 #endif /* !PERL_MICRO */
1634 Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg)
1637 PERL_ARGS_ASSERT_MAGIC_SETISA;
1638 PERL_UNUSED_ARG(sv);
1640 /* Skip _isaelem because _isa will handle it shortly */
1641 if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem)
1644 return magic_clearisa(NULL, mg);
1647 /* sv of NULL signifies that we're acting as magic_setisa. */
1649 Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg)
1654 PERL_ARGS_ASSERT_MAGIC_CLEARISA;
1656 /* Bail out if destruction is going on */
1657 if(PL_phase == PERL_PHASE_DESTRUCT) return 0;
1660 av_clear(MUTABLE_AV(sv));
1662 if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj))
1663 /* This occurs with setisa_elem magic, which calls this
1665 mg = mg_find(mg->mg_obj, PERL_MAGIC_isa);
1667 if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */
1668 SV **svp = AvARRAY((AV *)mg->mg_obj);
1669 I32 items = AvFILLp((AV *)mg->mg_obj) + 1;
1671 stash = GvSTASH((GV *)*svp++);
1672 if (stash && HvENAME(stash)) mro_isa_changed_in(stash);
1679 (const GV *)mg->mg_obj
1682 /* The stash may have been detached from the symbol table, so check its
1683 name before doing anything. */
1684 if (stash && HvENAME_get(stash))
1685 mro_isa_changed_in(stash);
1691 Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg)
1693 HV * const hv = MUTABLE_HV(LvTARG(sv));
1696 PERL_ARGS_ASSERT_MAGIC_GETNKEYS;
1697 PERL_UNUSED_ARG(mg);
1700 (void) hv_iterinit(hv);
1701 if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied))
1704 while (hv_iternext(hv))
1709 sv_setiv(sv, (IV)i);
1714 Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg)
1716 PERL_ARGS_ASSERT_MAGIC_SETNKEYS;
1717 PERL_UNUSED_ARG(mg);
1719 hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv));
1725 =for apidoc magic_methcall
1727 Invoke a magic method (like FETCH).
1729 C<sv> and C<mg> are the tied thingy and the tie magic.
1731 C<meth> is the name of the method to call.
1733 C<argc> is the number of args (in addition to $self) to pass to the method.
1735 The C<flags> can be:
1737 G_DISCARD invoke method with G_DISCARD flag and don't
1739 G_UNDEF_FILL fill the stack with argc pointers to
1742 The arguments themselves are any values following the C<flags> argument.
1744 Returns the SV (if any) returned by the method, or NULL on failure.
1751 Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1758 PERL_ARGS_ASSERT_MAGIC_METHCALL;
1762 if (flags & G_WRITING_TO_STDERR) {
1766 SAVESPTR(PL_stderrgv);
1770 PUSHSTACKi(PERLSI_MAGIC);
1774 PUSHs(SvTIED_obj(sv, mg));
1775 if (flags & G_UNDEF_FILL) {
1777 PUSHs(&PL_sv_undef);
1779 } else if (argc > 0) {
1781 va_start(args, argc);
1784 SV *const sv = va_arg(args, SV *);
1791 if (flags & G_DISCARD) {
1792 call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED);
1795 if (call_sv(meth, G_SCALAR|G_METHOD_NAMED))
1796 ret = *PL_stack_sp--;
1799 if (flags & G_WRITING_TO_STDERR)
1805 /* wrapper for magic_methcall that creates the first arg */
1808 S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags,
1814 PERL_ARGS_ASSERT_MAGIC_METHCALL1;
1817 if (mg->mg_len >= 0) {
1818 arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
1820 else if (mg->mg_len == HEf_SVKEY)
1821 arg1 = MUTABLE_SV(mg->mg_ptr);
1823 else if (mg->mg_type == PERL_MAGIC_tiedelem) {
1824 arg1 = newSViv((IV)(mg->mg_len));
1828 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val);
1830 return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val);
1834 S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth)
1839 PERL_ARGS_ASSERT_MAGIC_METHPACK;
1841 ret = magic_methcall1(sv, mg, meth, 0, 1, NULL);
1848 Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg)
1850 PERL_ARGS_ASSERT_MAGIC_GETPACK;
1852 if (mg->mg_type == PERL_MAGIC_tiedelem)
1853 mg->mg_flags |= MGf_GSKIP;
1854 magic_methpack(sv,mg,SV_CONST(FETCH));
1859 Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg)
1865 PERL_ARGS_ASSERT_MAGIC_SETPACK;
1867 /* in the code C<$tied{foo} = $val>, the "thing" that gets passed to
1868 * STORE() is not $val, but rather a PVLV (the sv in this call), whose
1869 * public flags indicate its value based on copying from $val. Doing
1870 * mg_set() on the PVLV temporarily does SvMAGICAL_off(), then calls us.
1871 * So STORE()'s $_[2] arg is a temporarily disarmed PVLV. This goes
1872 * wrong if $val happened to be tainted, as sv hasn't got magic
1873 * enabled, even though taint magic is in the chain. In which case,
1874 * fake up a temporary tainted value (this is easier than temporarily
1875 * re-enabling magic on sv). */
1877 if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint))
1878 && (tmg->mg_len & 1))
1880 val = sv_mortalcopy(sv);
1886 magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val);
1891 Perl_magic_clearpack(pTHX_ SV *sv, MAGIC *mg)
1893 PERL_ARGS_ASSERT_MAGIC_CLEARPACK;
1895 if (mg->mg_type == PERL_MAGIC_tiedscalar) return 0;
1896 return magic_methpack(sv,mg,SV_CONST(DELETE));
1901 Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg)
1907 PERL_ARGS_ASSERT_MAGIC_SIZEPACK;
1909 retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL);
1911 retval = SvIV(retsv)-1;
1913 Perl_croak(aTHX_ "FETCHSIZE returned a negative value");
1915 return (U32) retval;
1919 Perl_magic_wipepack(pTHX_ SV *sv, MAGIC *mg)
1923 PERL_ARGS_ASSERT_MAGIC_WIPEPACK;
1925 Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(CLEAR), G_DISCARD, 0);
1930 Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key)
1935 PERL_ARGS_ASSERT_MAGIC_NEXTPACK;
1937 ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key)
1938 : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0);
1945 Perl_magic_existspack(pTHX_ SV *sv, const MAGIC *mg)
1947 PERL_ARGS_ASSERT_MAGIC_EXISTSPACK;
1949 return magic_methpack(sv,mg,SV_CONST(EXISTS));
1953 Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg)
1957 SV * const tied = SvTIED_obj(MUTABLE_SV(hv), mg);
1958 HV * const pkg = SvSTASH((const SV *)SvRV(tied));
1960 PERL_ARGS_ASSERT_MAGIC_SCALARPACK;
1962 if (!gv_fetchmethod_autoload(pkg, "SCALAR", FALSE)) {
1964 if (HvEITER_get(hv))
1965 /* we are in an iteration so the hash cannot be empty */
1967 /* no xhv_eiter so now use FIRSTKEY */
1968 key = sv_newmortal();
1969 magic_nextpack(MUTABLE_SV(hv), mg, key);
1970 HvEITER_set(hv, NULL); /* need to reset iterator */
1971 return SvOK(key) ? &PL_sv_yes : &PL_sv_no;
1974 /* there is a SCALAR method that we can call */
1975 retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0);
1977 retval = &PL_sv_undef;
1982 Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg)
1987 PERL_ARGS_ASSERT_MAGIC_SETDBLINE;
1989 /* The magic ptr/len for the debugger's hash should always be an SV. */
1990 if (UNLIKELY(mg->mg_len != HEf_SVKEY)) {
1991 Perl_croak(aTHX_ "panic: magic_setdbline len=%"IVdf", ptr='%s'",
1992 (IV)mg->mg_len, mg->mg_ptr);
1995 /* Use sv_2iv instead of SvIV() as the former generates smaller code, and
1996 setting/clearing debugger breakpoints is not a hot path. */
1997 svp = av_fetch(MUTABLE_AV(mg->mg_obj),
1998 sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE);
2000 if (svp && SvIOKp(*svp)) {
2001 OP * const o = INT2PTR(OP*,SvIVX(*svp));
2003 #ifdef PERL_DEBUG_READONLY_OPS
2004 Slab_to_rw(OpSLAB(o));
2006 /* set or clear breakpoint in the relevant control op */
2008 o->op_flags |= OPf_SPECIAL;
2010 o->op_flags &= ~OPf_SPECIAL;
2011 #ifdef PERL_DEBUG_READONLY_OPS
2012 Slab_to_ro(OpSLAB(o));
2020 Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg)
2023 AV * const obj = MUTABLE_AV(mg->mg_obj);
2025 PERL_ARGS_ASSERT_MAGIC_GETARYLEN;
2028 sv_setiv(sv, AvFILL(obj));
2036 Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg)
2039 AV * const obj = MUTABLE_AV(mg->mg_obj);
2041 PERL_ARGS_ASSERT_MAGIC_SETARYLEN;
2044 av_fill(obj, SvIV(sv));
2046 Perl_ck_warner(aTHX_ packWARN(WARN_MISC),
2047 "Attempt to set length of freed array");
2053 Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg)
2057 PERL_ARGS_ASSERT_MAGIC_CLEARARYLEN_P;
2058 PERL_UNUSED_ARG(sv);
2060 /* Reset the iterator when the array is cleared */
2061 #if IVSIZE == I32SIZE
2062 *((IV *) &(mg->mg_len)) = 0;
2065 *((IV *) mg->mg_ptr) = 0;
2072 Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg)
2076 PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P;
2077 PERL_UNUSED_ARG(sv);
2079 /* during global destruction, mg_obj may already have been freed */
2080 if (PL_in_clean_all)
2083 mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen);
2086 /* arylen scalar holds a pointer back to the array, but doesn't own a
2087 reference. Hence the we (the array) are about to go away with it
2088 still pointing at us. Clear its pointer, else it would be pointing
2089 at free memory. See the comment in sv_magic about reference loops,
2090 and why it can't own a reference to us. */
2097 Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg)
2100 SV* const lsv = LvTARG(sv);
2101 MAGIC * const found = mg_find_mglob(lsv);
2103 PERL_ARGS_ASSERT_MAGIC_GETPOS;
2104 PERL_UNUSED_ARG(mg);
2106 if (found && found->mg_len != -1) {
2107 STRLEN i = found->mg_len;
2108 if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv))
2109 i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN);
2118 Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg)
2121 SV* const lsv = LvTARG(sv);
2128 PERL_ARGS_ASSERT_MAGIC_SETPOS;
2129 PERL_UNUSED_ARG(mg);
2131 found = mg_find_mglob(lsv);
2135 found = sv_magicext_mglob(lsv);
2137 else if (!SvOK(sv)) {
2141 s = SvPV_const(lsv, len);
2146 ulen = sv_or_pv_len_utf8(lsv, s, len);
2156 else if (pos > (SSize_t)len)
2159 found->mg_len = pos;
2160 found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES);
2166 Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg)
2169 SV * const lsv = LvTARG(sv);
2170 const char * const tmps = SvPV_const(lsv,len);
2171 STRLEN offs = LvTARGOFF(sv);
2172 STRLEN rem = LvTARGLEN(sv);
2173 const bool negoff = LvFLAGS(sv) & 1;
2174 const bool negrem = LvFLAGS(sv) & 2;
2176 PERL_ARGS_ASSERT_MAGIC_GETSUBSTR;
2177 PERL_UNUSED_ARG(mg);
2179 if (!translate_substr_offsets(
2180 SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len,
2181 negoff ? -(IV)offs : (IV)offs, !negoff,
2182 negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem
2184 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string");
2185 sv_setsv_nomg(sv, &PL_sv_undef);
2190 offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem);
2191 sv_setpvn(sv, tmps + offs, rem);
2198 Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg)
2201 STRLEN len, lsv_len, oldtarglen, newtarglen;
2202 const char * const tmps = SvPV_const(sv, len);
2203 SV * const lsv = LvTARG(sv);
2204 STRLEN lvoff = LvTARGOFF(sv);
2205 STRLEN lvlen = LvTARGLEN(sv);
2206 const bool negoff = LvFLAGS(sv) & 1;
2207 const bool neglen = LvFLAGS(sv) & 2;
2209 PERL_ARGS_ASSERT_MAGIC_SETSUBSTR;
2210 PERL_UNUSED_ARG(mg);
2214 Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR),
2215 "Attempt to use reference as lvalue in substr"
2217 SvPV_force_nomg(lsv,lsv_len);
2218 if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv);
2219 if (!translate_substr_offsets(
2221 negoff ? -(IV)lvoff : (IV)lvoff, !negoff,
2222 neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen
2224 Perl_croak(aTHX_ "substr outside of string");
2227 sv_utf8_upgrade_nomg(lsv);
2228 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2229 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2230 newtarglen = sv_or_pv_len_utf8(sv, tmps, len);
2233 else if (SvUTF8(lsv)) {
2235 lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN);
2237 utf8 = (char*)bytes_to_utf8((U8*)tmps, &len);
2238 sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0);
2242 sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0);
2245 if (!neglen) LvTARGLEN(sv) = newtarglen;
2246 if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen;
2252 Perl_magic_gettaint(pTHX_ SV *sv, MAGIC *mg)
2256 PERL_ARGS_ASSERT_MAGIC_GETTAINT;
2257 PERL_UNUSED_ARG(sv);
2258 #ifdef NO_TAINT_SUPPORT
2259 PERL_UNUSED_ARG(mg);
2262 TAINT_IF((PL_localizing != 1) && (mg->mg_len & 1));
2267 Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg)
2271 PERL_ARGS_ASSERT_MAGIC_SETTAINT;
2272 PERL_UNUSED_ARG(sv);
2274 /* update taint status */
2283 Perl_magic_getvec(pTHX_ SV *sv, MAGIC *mg)
2285 SV * const lsv = LvTARG(sv);
2287 PERL_ARGS_ASSERT_MAGIC_GETVEC;
2288 PERL_UNUSED_ARG(mg);
2290 sv_setuv(sv, do_vecget(lsv, LvTARGOFF(sv), LvTARGLEN(sv)));
2296 Perl_magic_setvec(pTHX_ SV *sv, MAGIC *mg)
2298 PERL_ARGS_ASSERT_MAGIC_SETVEC;
2299 PERL_UNUSED_ARG(mg);
2300 do_vecset(sv); /* XXX slurp this routine */
2305 Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg)
2309 PERL_ARGS_ASSERT_DEFELEM_TARGET;
2310 if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem);
2312 if (LvTARGLEN(sv)) {
2314 SV * const ahv = LvTARG(sv);
2315 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0);
2319 else if (LvSTARGOFF(sv) >= 0) {
2320 AV *const av = MUTABLE_AV(LvTARG(sv));
2321 if (LvSTARGOFF(sv) <= AvFILL(av))
2323 if (SvRMAGICAL(av)) {
2324 SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0);
2325 targ = svp ? *svp : NULL;
2328 targ = AvARRAY(av)[LvSTARGOFF(sv)];
2331 if (targ && (targ != &PL_sv_undef)) {
2332 /* somebody else defined it for us */
2333 SvREFCNT_dec(LvTARG(sv));
2334 LvTARG(sv) = SvREFCNT_inc_simple_NN(targ);
2336 SvREFCNT_dec(mg->mg_obj);
2338 mg->mg_flags &= ~MGf_REFCOUNTED;
2347 Perl_magic_getdefelem(pTHX_ SV *sv, MAGIC *mg)
2349 PERL_ARGS_ASSERT_MAGIC_GETDEFELEM;
2351 sv_setsv(sv, defelem_target(sv, mg));
2356 Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg)
2358 PERL_ARGS_ASSERT_MAGIC_SETDEFELEM;
2359 PERL_UNUSED_ARG(mg);
2363 sv_setsv(LvTARG(sv), sv);
2364 SvSETMAGIC(LvTARG(sv));
2370 Perl_vivify_defelem(pTHX_ SV *sv)
2376 PERL_ARGS_ASSERT_VIVIFY_DEFELEM;
2378 if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem)))
2381 SV * const ahv = LvTARG(sv);
2382 HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0);
2385 if (!value || value == &PL_sv_undef)
2386 Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj));
2388 else if (LvSTARGOFF(sv) < 0)
2389 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2391 AV *const av = MUTABLE_AV(LvTARG(sv));
2392 if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av))
2393 LvTARG(sv) = NULL; /* array can't be extended */
2395 SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE);
2396 if (!svp || !(value = *svp))
2397 Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv));
2400 SvREFCNT_inc_simple_void(value);
2401 SvREFCNT_dec(LvTARG(sv));
2404 SvREFCNT_dec(mg->mg_obj);
2406 mg->mg_flags &= ~MGf_REFCOUNTED;
2410 Perl_magic_killbackrefs(pTHX_ SV *sv, MAGIC *mg)
2412 PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS;
2413 Perl_sv_kill_backrefs(aTHX_ sv, MUTABLE_AV(mg->mg_obj));
2418 Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg)
2420 PERL_ARGS_ASSERT_MAGIC_SETMGLOB;
2421 PERL_UNUSED_CONTEXT;
2422 PERL_UNUSED_ARG(sv);
2428 Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg)
2430 const struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr;
2432 PERL_ARGS_ASSERT_MAGIC_SETUVAR;
2434 if (uf && uf->uf_set)
2435 (*uf->uf_set)(aTHX_ uf->uf_index, sv);
2440 Perl_magic_setregexp(pTHX_ SV *sv, MAGIC *mg)
2442 const char type = mg->mg_type;
2444 PERL_ARGS_ASSERT_MAGIC_SETREGEXP;
2446 if (type == PERL_MAGIC_qr) {
2447 } else if (type == PERL_MAGIC_bm) {
2451 assert(type == PERL_MAGIC_fm);
2453 return sv_unmagic(sv, type);
2456 #ifdef USE_LOCALE_COLLATE
2458 Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg)
2460 PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM;
2463 * RenE<eacute> Descartes said "I think not."
2464 * and vanished with a faint plop.
2466 PERL_UNUSED_CONTEXT;
2467 PERL_UNUSED_ARG(sv);
2469 Safefree(mg->mg_ptr);
2475 #endif /* USE_LOCALE_COLLATE */
2477 /* Just clear the UTF-8 cache data. */
2479 Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg)
2481 PERL_ARGS_ASSERT_MAGIC_SETUTF8;
2482 PERL_UNUSED_CONTEXT;
2483 PERL_UNUSED_ARG(sv);
2484 Safefree(mg->mg_ptr); /* The mg_ptr holds the pos cache. */
2486 mg->mg_len = -1; /* The mg_len holds the len cache. */
2491 Perl_magic_set(pTHX_ SV *sv, MAGIC *mg)
2501 PERL_ARGS_ASSERT_MAGIC_SET;
2505 if (PL_curpm && (rx = PM_GETRE(PL_curpm))) {
2507 CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv);
2509 /* Croak with a READONLY error when a numbered match var is
2510 * set without a previous pattern match. Unless it's C<local $1>
2513 if (!PL_localizing) {
2514 Perl_croak_no_modify();
2520 switch (*mg->mg_ptr) {
2521 case '\001': /* ^A */
2522 if (SvOK(sv)) sv_copypv(PL_bodytarget, sv);
2523 else SvOK_off(PL_bodytarget);
2524 FmLINES(PL_bodytarget) = 0;
2525 if (SvPOK(PL_bodytarget)) {
2526 char *s = SvPVX(PL_bodytarget);
2527 while ( ((s = strchr(s, '\n'))) ) {
2528 FmLINES(PL_bodytarget)++;
2532 /* mg_set() has temporarily made sv non-magical */
2534 if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1)
2535 SvTAINTED_on(PL_bodytarget);
2537 SvTAINTED_off(PL_bodytarget);
2540 case '\003': /* ^C */
2541 PL_minus_c = cBOOL(SvIV(sv));
2544 case '\004': /* ^D */
2546 s = SvPV_nolen_const(sv);
2547 PL_debug = get_debug_opts(&s, 0) | DEBUG_TOP_FLAG;
2548 if (DEBUG_x_TEST || DEBUG_B_TEST)
2549 dump_all_perl(!DEBUG_B_TEST);
2551 PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG;
2554 case '\005': /* ^E */
2555 if (*(mg->mg_ptr+1) == '\0') {
2557 set_vaxc_errno(SvIV(sv));
2560 SetLastError( SvIV(sv) );
2563 os2_setsyserrno(SvIV(sv));
2565 /* will anyone ever use this? */
2566 SETERRNO(SvIV(sv), 4);
2571 else if (strEQ(mg->mg_ptr+1, "NCODING")) {
2572 SvREFCNT_dec(PL_encoding);
2573 if (SvOK(sv) || SvGMAGICAL(sv)) {
2574 PL_encoding = newSVsv(sv);
2581 case '\006': /* ^F */
2582 PL_maxsysfd = SvIV(sv);
2584 case '\010': /* ^H */
2585 PL_hints = SvIV(sv);
2587 case '\011': /* ^I */ /* NOT \t in EBCDIC */
2588 Safefree(PL_inplace);
2589 PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL;
2591 case '\016': /* ^N */
2592 if (PL_curpm && (rx = PM_GETRE(PL_curpm))
2593 && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx;
2595 case '\017': /* ^O */
2596 if (*(mg->mg_ptr+1) == '\0') {
2597 Safefree(PL_osname);
2600 TAINT_PROPER("assigning to $^O");
2601 PL_osname = savesvpv(sv);
2604 else if (strEQ(mg->mg_ptr, "\017PEN")) {
2606 const char *const start = SvPV(sv, len);
2607 const char *out = (const char*)memchr(start, '\0', len);
2611 PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2612 PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT;
2614 /* Opening for input is more common than opening for output, so
2615 ensure that hints for input are sooner on linked list. */
2616 tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1,
2618 : newSVpvs_flags("", SvUTF8(sv));
2619 (void)hv_stores(GvHV(PL_hintgv), "open>", tmp);
2622 tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len,
2624 (void)hv_stores(GvHV(PL_hintgv), "open<", tmp);
2628 case '\020': /* ^P */
2629 PL_perldb = SvIV(sv);
2630 if (PL_perldb && !PL_DBsingle)
2633 case '\024': /* ^T */
2635 PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv));
2637 PL_basetime = (Time_t)SvIV(sv);
2640 case '\025': /* ^UTF8CACHE */
2641 if (strEQ(mg->mg_ptr+1, "TF8CACHE")) {
2642 PL_utf8cache = (signed char) sv_2iv(sv);
2645 case '\027': /* ^W & $^WARNING_BITS */
2646 if (*(mg->mg_ptr+1) == '\0') {
2647 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2649 PL_dowarn = (PL_dowarn & ~G_WARN_ON)
2650 | (i ? G_WARN_ON : G_WARN_OFF) ;
2653 else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) {
2654 if ( ! (PL_dowarn & G_WARN_ALL_MASK)) {
2656 PL_compiling.cop_warnings = pWARN_STD;
2661 int accumulate = 0 ;
2662 int any_fatals = 0 ;
2663 const char * const ptr = SvPV_const(sv, len) ;
2664 for (i = 0 ; i < len ; ++i) {
2665 accumulate |= ptr[i] ;
2666 any_fatals |= (ptr[i] & 0xAA) ;
2669 if (!specialWARN(PL_compiling.cop_warnings))
2670 PerlMemShared_free(PL_compiling.cop_warnings);
2671 PL_compiling.cop_warnings = pWARN_NONE;
2673 /* Yuck. I can't see how to abstract this: */
2675 ((STRLEN *)SvPV_nolen_const(sv)) - 1,
2679 if (!specialWARN(PL_compiling.cop_warnings))
2680 PerlMemShared_free(PL_compiling.cop_warnings);
2681 PL_compiling.cop_warnings = pWARN_ALL;
2682 PL_dowarn |= G_WARN_ONCE ;
2686 const char *const p = SvPV_const(sv, len);
2688 PL_compiling.cop_warnings
2689 = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings,
2692 if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE))
2693 PL_dowarn |= G_WARN_ONCE ;
2701 if (PL_localizing) {
2702 if (PL_localizing == 1)
2703 SAVESPTR(PL_last_in_gv);
2705 else if (SvOK(sv) && GvIO(PL_last_in_gv))
2706 IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv);
2709 Safefree(IoTOP_NAME(GvIOp(PL_defoutgv)));
2710 s = IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2711 IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2714 Safefree(IoFMT_NAME(GvIOp(PL_defoutgv)));
2715 s = IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv);
2716 IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO);
2719 IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv));
2722 IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv));
2723 if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L)
2724 IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L;
2727 IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv));
2731 IO * const io = GvIO(PL_defoutgv);
2734 if ((SvIV(sv)) == 0)
2735 IoFLAGS(io) &= ~IOf_FLUSH;
2737 if (!(IoFLAGS(io) & IOf_FLUSH)) {
2738 PerlIO *ofp = IoOFP(io);
2740 (void)PerlIO_flush(ofp);
2741 IoFLAGS(io) |= IOf_FLUSH;
2747 SvREFCNT_dec(PL_rs);
2748 PL_rs = newSVsv(sv);
2751 SvREFCNT_dec(PL_ors_sv);
2753 PL_ors_sv = newSVsv(sv);
2761 Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible");
2764 #ifdef COMPLEX_STATUS
2765 if (PL_localizing == 2) {
2766 SvUPGRADE(sv, SVt_PVLV);
2767 PL_statusvalue = LvTARGOFF(sv);
2768 PL_statusvalue_vms = LvTARGLEN(sv);
2772 #ifdef VMSISH_STATUS
2774 STATUS_NATIVE_CHILD_SET((U32)SvIV(sv));
2777 STATUS_UNIX_EXIT_SET(SvIV(sv));
2782 # define PERL_VMS_BANG vaxc$errno
2784 # define PERL_VMS_BANG 0
2786 #if defined(WIN32) && ! defined(UNDER_CE)
2787 SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0),
2788 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2790 SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0,
2791 (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG);
2798 const Uid_t new_uid = SvUID(sv);
2799 PL_delaymagic_uid = new_uid;
2800 if (PL_delaymagic) {
2801 PL_delaymagic |= DM_RUID;
2802 break; /* don't do magic till later */
2805 rc = setruid(new_uid);
2808 rc = setreuid(new_uid, (Uid_t)-1);
2810 #ifdef HAS_SETRESUID
2811 rc = setresuid(new_uid, (Uid_t)-1, (Uid_t)-1);
2813 if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */
2815 /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */
2816 if (new_uid != 0 && PerlProc_getuid() == 0)
2817 rc = PerlProc_setuid(0);
2819 rc = PerlProc_setuid(new_uid);
2821 Perl_croak(aTHX_ "setruid() not implemented");
2826 /* XXX $< currently silently ignores failures */
2827 PERL_UNUSED_VAR(rc);
2833 const Uid_t new_euid = SvUID(sv);
2834 PL_delaymagic_euid = new_euid;
2835 if (PL_delaymagic) {
2836 PL_delaymagic |= DM_EUID;
2837 break; /* don't do magic till later */
2840 rc = seteuid(new_euid);
2843 rc = setreuid((Uid_t)-1, new_euid);
2845 #ifdef HAS_SETRESUID
2846 rc = setresuid((Uid_t)-1, new_euid, (Uid_t)-1);
2848 if (new_euid == PerlProc_getuid()) /* special case $> = $< */
2849 rc = PerlProc_setuid(new_euid);
2851 Perl_croak(aTHX_ "seteuid() not implemented");
2856 /* XXX $> currently silently ignores failures */
2857 PERL_UNUSED_VAR(rc);
2863 const Gid_t new_gid = SvGID(sv);
2864 PL_delaymagic_gid = new_gid;
2865 if (PL_delaymagic) {
2866 PL_delaymagic |= DM_RGID;
2867 break; /* don't do magic till later */
2870 rc = setrgid(new_gid);
2873 rc = setregid(new_gid, (Gid_t)-1);
2875 #ifdef HAS_SETRESGID
2876 rc = setresgid(new_gid, (Gid_t)-1, (Gid_t) -1);
2878 if (new_gid == PerlProc_getegid()) /* special case $( = $) */
2879 rc = PerlProc_setgid(new_gid);
2881 Perl_croak(aTHX_ "setrgid() not implemented");
2886 /* XXX $( currently silently ignores failures */
2887 PERL_UNUSED_VAR(rc);
2894 #ifdef HAS_SETGROUPS
2896 const char *p = SvPV_const(sv, len);
2897 Groups_t *gary = NULL;
2898 #ifdef _SC_NGROUPS_MAX
2899 int maxgrp = sysconf(_SC_NGROUPS_MAX);
2904 int maxgrp = NGROUPS;
2909 new_egid = (Gid_t)Atol(p);
2910 for (i = 0; i < maxgrp; ++i) {
2911 while (*p && !isSPACE(*p))
2918 Newx(gary, i + 1, Groups_t);
2920 Renew(gary, i + 1, Groups_t);
2921 gary[i] = (Groups_t)Atol(p);
2924 rc = setgroups(i, gary);
2927 #else /* HAS_SETGROUPS */
2928 new_egid = SvGID(sv);
2929 #endif /* HAS_SETGROUPS */
2930 PL_delaymagic_egid = new_egid;
2931 if (PL_delaymagic) {
2932 PL_delaymagic |= DM_EGID;
2933 break; /* don't do magic till later */
2936 rc = setegid(new_egid);
2939 rc = setregid((Gid_t)-1, new_egid);
2941 #ifdef HAS_SETRESGID
2942 rc = setresgid((Gid_t)-1, new_egid, (Gid_t)-1);
2944 if (new_egid == PerlProc_getgid()) /* special case $) = $( */
2945 rc = PerlProc_setgid(new_egid);
2947 Perl_croak(aTHX_ "setegid() not implemented");
2952 /* XXX $) currently silently ignores failures */
2953 PERL_UNUSED_VAR(rc);
2957 PL_chopset = SvPV_force(sv,len);
2960 /* Store the pid in mg->mg_obj so we can tell when a fork has
2961 occurred. mg->mg_obj points to *$ by default, so clear it. */
2962 if (isGV(mg->mg_obj)) {
2963 if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */
2964 SvREFCNT_dec(mg->mg_obj);
2965 mg->mg_flags |= MGf_REFCOUNTED;
2966 mg->mg_obj = newSViv((IV)PerlProc_getpid());
2968 else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid());
2971 LOCK_DOLLARZERO_MUTEX;
2972 #ifdef HAS_SETPROCTITLE
2973 /* The BSDs don't show the argv[] in ps(1) output, they
2974 * show a string from the process struct and provide
2975 * the setproctitle() routine to manipulate that. */
2976 if (PL_origalen != 1) {
2977 s = SvPV_const(sv, len);
2978 # if __FreeBSD_version > 410001
2979 /* The leading "-" removes the "perl: " prefix,
2980 * but not the "(perl) suffix from the ps(1)
2981 * output, because that's what ps(1) shows if the
2982 * argv[] is modified. */
2983 setproctitle("-%s", s);
2984 # else /* old FreeBSDs, NetBSD, OpenBSD, anyBSD */
2985 /* This doesn't really work if you assume that
2986 * $0 = 'foobar'; will wipe out 'perl' from the $0
2987 * because in ps(1) output the result will be like
2988 * sprintf("perl: %s (perl)", s)
2989 * I guess this is a security feature:
2990 * one (a user process) cannot get rid of the original name.
2992 setproctitle("%s", s);
2995 #elif defined(__hpux) && defined(PSTAT_SETCMD)
2996 if (PL_origalen != 1) {
2998 s = SvPV_const(sv, len);
2999 un.pst_command = (char *)s;
3000 pstat(PSTAT_SETCMD, un, len, 0, 0);
3003 if (PL_origalen > 1) {
3004 /* PL_origalen is set in perl_parse(). */
3005 s = SvPV_force(sv,len);
3006 if (len >= (STRLEN)PL_origalen-1) {
3007 /* Longer than original, will be truncated. We assume that
3008 * PL_origalen bytes are available. */
3009 Copy(s, PL_origargv[0], PL_origalen-1, char);
3012 /* Shorter than original, will be padded. */
3014 /* Special case for Mac OS X: see [perl #38868] */
3017 /* Is the space counterintuitive? Yes.
3018 * (You were expecting \0?)
3019 * Does it work? Seems to. (In Linux 2.4.20 at least.)
3021 const int pad = ' ';
3023 Copy(s, PL_origargv[0], len, char);
3024 PL_origargv[0][len] = 0;
3025 memset(PL_origargv[0] + len + 1,
3026 pad, PL_origalen - len - 1);
3028 PL_origargv[0][PL_origalen-1] = 0;
3029 for (i = 1; i < PL_origargc; i++)
3031 #ifdef HAS_PRCTL_SET_NAME
3032 /* Set the legacy process name in addition to the POSIX name on Linux */
3033 if (prctl(PR_SET_NAME, (unsigned long)s, 0, 0, 0) != 0) {
3034 /* diag_listed_as: SKIPME */
3035 Perl_croak(aTHX_ "Can't set $0 with prctl(): %s", Strerror(errno));
3040 UNLOCK_DOLLARZERO_MUTEX;
3047 Perl_whichsig_sv(pTHX_ SV *sigsv)
3051 PERL_ARGS_ASSERT_WHICHSIG_SV;
3052 PERL_UNUSED_CONTEXT;
3053 sigpv = SvPV_const(sigsv, siglen);
3054 return whichsig_pvn(sigpv, siglen);
3058 Perl_whichsig_pv(pTHX_ const char *sig)
3060 PERL_ARGS_ASSERT_WHICHSIG_PV;
3061 PERL_UNUSED_CONTEXT;
3062 return whichsig_pvn(sig, strlen(sig));
3066 Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len)
3070 PERL_ARGS_ASSERT_WHICHSIG_PVN;
3071 PERL_UNUSED_CONTEXT;
3073 for (sigv = (char* const*)PL_sig_name; *sigv; sigv++)
3074 if (strlen(*sigv) == len && memEQ(sig,*sigv, len))
3075 return PL_sig_num[sigv - (char* const*)PL_sig_name];
3077 if (memEQs(sig, len, "CHLD"))
3081 if (memEQs(sig, len, "CLD"))
3088 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3089 Perl_sighandler(int sig, siginfo_t *sip, void *uap)
3091 Perl_sighandler(int sig)
3094 #ifdef PERL_GET_SIG_CONTEXT
3095 dTHXa(PERL_GET_SIG_CONTEXT);
3102 SV * const tSv = PL_Sv;
3106 XPV * const tXpv = PL_Xpv;
3107 I32 old_ss_ix = PL_savestack_ix;
3108 SV *errsv_save = NULL;
3111 if (!PL_psig_ptr[sig]) {
3112 PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n",
3117 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3118 /* Max number of items pushed there is 3*n or 4. We cannot fix
3119 infinity, so we fix 4 (in fact 5): */
3120 if (PL_savestack_ix + 15 <= PL_savestack_max) {
3122 PL_savestack_ix += 5; /* Protect save in progress. */
3123 SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL);
3126 /* sv_2cv is too complicated, try a simpler variant first: */
3127 if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig])))
3128 || SvTYPE(cv) != SVt_PVCV) {
3130 cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD);
3133 if (!cv || !CvROOT(cv)) {
3134 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "SIG%s handler \"%s\" not defined.\n",
3135 PL_sig_name[sig], (gv ? GvENAME(gv)
3142 sv = PL_psig_name[sig]
3143 ? SvREFCNT_inc_NN(PL_psig_name[sig])
3144 : newSVpv(PL_sig_name[sig],0);
3148 if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) {
3149 /* make sure our assumption about the size of the SAVEs are correct:
3150 * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */
3151 assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix);
3154 PUSHSTACKi(PERLSI_SIGNAL);
3157 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3159 struct sigaction oact;
3161 if (sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) {
3164 SV *rv = newRV_noinc(MUTABLE_SV(sih));
3165 /* The siginfo fields signo, code, errno, pid, uid,
3166 * addr, status, and band are defined by POSIX/SUSv3. */
3167 (void)hv_stores(sih, "signo", newSViv(sip->si_signo));
3168 (void)hv_stores(sih, "code", newSViv(sip->si_code));
3169 #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. */
3170 hv_stores(sih, "errno", newSViv(sip->si_errno));
3171 hv_stores(sih, "status", newSViv(sip->si_status));
3172 hv_stores(sih, "uid", newSViv(sip->si_uid));
3173 hv_stores(sih, "pid", newSViv(sip->si_pid));
3174 hv_stores(sih, "addr", newSVuv(PTR2UV(sip->si_addr)));
3175 hv_stores(sih, "band", newSViv(sip->si_band));
3179 mPUSHp((char *)sip, sizeof(*sip));
3187 errsv_save = newSVsv(ERRSV);
3189 call_sv(MUTABLE_SV(cv), G_DISCARD|G_EVAL);
3193 SV * const errsv = ERRSV;
3194 if (SvTRUE_NN(errsv)) {
3195 SvREFCNT_dec(errsv_save);
3197 /* Handler "died", for example to get out of a restart-able read().
3198 * Before we re-do that on its behalf re-enable the signal which was
3199 * blocked by the system when we entered.
3201 #ifdef HAS_SIGPROCMASK
3202 #if defined(HAS_SIGACTION) && defined(SA_SIGINFO)
3208 sigaddset(&set,sig);
3209 sigprocmask(SIG_UNBLOCK, &set, NULL);
3212 /* Not clear if this will work */
3213 (void)rsignal(sig, SIG_IGN);
3214 (void)rsignal(sig, PL_csighandlerp);
3216 #endif /* !PERL_MICRO */
3220 sv_setsv(errsv, errsv_save);
3221 SvREFCNT_dec(errsv_save);
3226 /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */
3227 PL_savestack_ix = old_ss_ix;
3229 SvREFCNT_dec_NN(sv);
3230 PL_op = myop; /* Apparently not needed... */
3232 PL_Sv = tSv; /* Restore global temporaries. */
3239 S_restore_magic(pTHX_ const void *p)
3242 MGS* const mgs = SSPTR(PTR2IV(p), MGS*);
3243 SV* const sv = mgs->mgs_sv;
3249 if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) {
3250 SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */
3251 #ifdef PERL_OLD_COPY_ON_WRITE
3252 /* While magic was saved (and off) sv_setsv may well have seen
3253 this SV as a prime candidate for COW. */
3255 sv_force_normal_flags(sv, 0);
3257 if (mgs->mgs_readonly)
3259 if (mgs->mgs_magical)
3260 SvFLAGS(sv) |= mgs->mgs_magical;
3265 bumped = mgs->mgs_bumped;
3266 mgs->mgs_sv = NULL; /* mark the MGS structure as restored */
3268 /* If we're still on top of the stack, pop us off. (That condition
3269 * will be satisfied if restore_magic was called explicitly, but *not*
3270 * if it's being called via leave_scope.)
3271 * The reason for doing this is that otherwise, things like sv_2cv()
3272 * may leave alloc gunk on the savestack, and some code
3273 * (e.g. sighandler) doesn't expect that...
3275 if (PL_savestack_ix == mgs->mgs_ss_ix)
3277 UV popval = SSPOPUV;
3278 assert(popval == SAVEt_DESTRUCTOR_X);
3279 PL_savestack_ix -= 2;
3281 assert((popval & SAVE_MASK) == SAVEt_ALLOC);
3282 PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT;
3285 if (SvREFCNT(sv) == 1) {
3286 /* We hold the last reference to this SV, which implies that the
3287 SV was deleted as a side effect of the routines we called.
3288 So artificially keep it alive a bit longer.
3289 We avoid turning on the TEMP flag, which can cause the SV's
3290 buffer to get stolen (and maybe other stuff). */
3295 SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */
3299 /* clean up the mess created by Perl_sighandler().
3300 * Note that this is only called during an exit in a signal handler;
3301 * a die is trapped by the call_sv() and the SAVEDESTRUCTOR_X manually
3305 S_unwind_handler_stack(pTHX_ const void *p)
3310 PL_savestack_ix -= 5; /* Unprotect save in progress. */
3314 =for apidoc magic_sethint
3316 Triggered by a store to %^H, records the key/value pair to
3317 C<PL_compiling.cop_hints_hash>. It is assumed that hints aren't storing
3318 anything that would need a deep copy. Maybe we should warn if we find a
3324 Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg)
3327 SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr)
3328 : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP);
3330 PERL_ARGS_ASSERT_MAGIC_SETHINT;
3332 /* mg->mg_obj isn't being used. If needed, it would be possible to store
3333 an alternative leaf in there, with PL_compiling.cop_hints being used if
3334 it's NULL. If needed for threads, the alternative could lock a mutex,
3335 or take other more complex action. */
3337 /* Something changed in %^H, so it will need to be restored on scope exit.
3338 Doing this here saves a lot of doing it manually in perl code (and
3339 forgetting to do it, and consequent subtle errors. */
3340 PL_hints |= HINT_LOCALIZE_HH;
3341 CopHINTHASH_set(&PL_compiling,
3342 cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0));
3347 =for apidoc magic_clearhint
3349 Triggered by a delete from %^H, records the key to
3350 C<PL_compiling.cop_hints_hash>.
3355 Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg)
3359 PERL_ARGS_ASSERT_MAGIC_CLEARHINT;
3360 PERL_UNUSED_ARG(sv);
3362 PL_hints |= HINT_LOCALIZE_HH;
3363 CopHINTHASH_set(&PL_compiling,
3364 mg->mg_len == HEf_SVKEY
3365 ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling),
3366 MUTABLE_SV(mg->mg_ptr), 0, 0)
3367 : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling),
3368 mg->mg_ptr, mg->mg_len, 0, 0));
3373 =for apidoc magic_clearhints
3375 Triggered by clearing %^H, resets C<PL_compiling.cop_hints_hash>.
3380 Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg)
3382 PERL_ARGS_ASSERT_MAGIC_CLEARHINTS;
3383 PERL_UNUSED_ARG(sv);
3384 PERL_UNUSED_ARG(mg);
3385 cophh_free(CopHINTHASH_get(&PL_compiling));
3386 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
3391 Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv,
3392 const char *name, I32 namlen)
3396 PERL_ARGS_ASSERT_MAGIC_COPYCALLCHECKER;
3397 PERL_UNUSED_ARG(sv);
3398 PERL_UNUSED_ARG(name);
3399 PERL_UNUSED_ARG(namlen);
3401 sv_magic(nsv, &PL_sv_undef, mg->mg_type, NULL, 0);
3402 nmg = mg_find(nsv, mg->mg_type);
3403 if (nmg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(nmg->mg_obj);
3404 nmg->mg_ptr = mg->mg_ptr;
3405 nmg->mg_obj = SvREFCNT_inc_simple(mg->mg_obj);
3406 nmg->mg_flags |= MGf_REFCOUNTED;
3412 * c-indentation-style: bsd
3414 * indent-tabs-mode: nil
3417 * ex: set ts=8 sts=4 sw=4 et: