3 * Copyright (c) 1987-2002 Larry Wall
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
11 * "A ship then new they built for him/of mithril and of elven glass" --Bilbo
15 #define PERL_IN_PERL_C
17 #include "patchlevel.h" /* for local_patches */
21 char *nw_get_sitelib(const char *pl);
24 /* XXX If this causes problems, set i_unistd=undef in the hint file. */
41 #if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE) && !defined(PERL_MICRO)
42 char *getenv (char *); /* Usually in <stdlib.h> */
45 static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
53 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
59 #if defined(USE_5005THREADS)
60 # define INIT_TLS_AND_INTERP \
62 if (!PL_curinterp) { \
63 PERL_SET_INTERP(my_perl); \
69 # if defined(USE_ITHREADS)
70 # define INIT_TLS_AND_INTERP \
72 if (!PL_curinterp) { \
73 PERL_SET_INTERP(my_perl); \
76 PERL_SET_THX(my_perl); \
80 PERL_SET_THX(my_perl); \
84 # define INIT_TLS_AND_INTERP \
86 if (!PL_curinterp) { \
87 PERL_SET_INTERP(my_perl); \
89 PERL_SET_THX(my_perl); \
94 #ifdef PERL_IMPLICIT_SYS
96 perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
97 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
98 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
99 struct IPerlDir* ipD, struct IPerlSock* ipS,
100 struct IPerlProc* ipP)
102 PerlInterpreter *my_perl;
103 /* New() needs interpreter, so call malloc() instead */
104 my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
106 Zero(my_perl, 1, PerlInterpreter);
122 =head1 Embedding Functions
124 =for apidoc perl_alloc
126 Allocates a new Perl interpreter. See L<perlembed>.
134 PerlInterpreter *my_perl;
135 #ifdef USE_5005THREADS
139 /* New() needs interpreter, so call malloc() instead */
140 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
143 Zero(my_perl, 1, PerlInterpreter);
146 #endif /* PERL_IMPLICIT_SYS */
149 =for apidoc perl_construct
151 Initializes a new Perl interpreter. See L<perlembed>.
157 perl_construct(pTHXx)
159 #ifdef USE_5005THREADS
161 struct perl_thread *thr = NULL;
162 #endif /* FAKE_THREADS */
163 #endif /* USE_5005THREADS */
167 PL_perl_destruct_level = 1;
169 if (PL_perl_destruct_level > 0)
173 /* Init the real globals (and main thread)? */
175 #ifdef USE_5005THREADS
176 MUTEX_INIT(&PL_sv_mutex);
178 * Safe to use basic SV functions from now on (though
179 * not things like mortals or tainting yet).
181 MUTEX_INIT(&PL_eval_mutex);
182 COND_INIT(&PL_eval_cond);
183 MUTEX_INIT(&PL_threads_mutex);
184 COND_INIT(&PL_nthreads_cond);
185 # ifdef EMULATE_ATOMIC_REFCOUNTS
186 MUTEX_INIT(&PL_svref_mutex);
187 # endif /* EMULATE_ATOMIC_REFCOUNTS */
189 MUTEX_INIT(&PL_cred_mutex);
190 MUTEX_INIT(&PL_sv_lock_mutex);
191 MUTEX_INIT(&PL_fdpid_mutex);
193 thr = init_main_thread();
194 #endif /* USE_5005THREADS */
196 #ifdef PERL_FLEXIBLE_EXCEPTIONS
197 PL_protect = MEMBER_TO_FPTR(Perl_default_protect); /* for exceptions */
200 PL_curcop = &PL_compiling; /* needed by ckWARN, right away */
202 PL_linestr = NEWSV(65,79);
203 sv_upgrade(PL_linestr,SVt_PVIV);
205 if (!SvREADONLY(&PL_sv_undef)) {
206 /* set read-only and try to insure than we wont see REFCNT==0
209 SvREADONLY_on(&PL_sv_undef);
210 SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
212 sv_setpv(&PL_sv_no,PL_No);
214 SvREADONLY_on(&PL_sv_no);
215 SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
217 sv_setpv(&PL_sv_yes,PL_Yes);
219 SvREADONLY_on(&PL_sv_yes);
220 SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
223 PL_sighandlerp = Perl_sighandler;
224 PL_pidstatus = newHV();
227 PL_rs = newSVpvn("\n", 1);
232 PL_lex_state = LEX_NOTPARSING;
238 SET_NUMERIC_STANDARD();
242 PL_patchlevel = NEWSV(0,4);
243 (void)SvUPGRADE(PL_patchlevel, SVt_PVNV);
244 if (PERL_REVISION > 127 || PERL_VERSION > 127 || PERL_SUBVERSION > 127)
245 SvGROW(PL_patchlevel, UTF8_MAXLEN*3+1);
246 s = (U8*)SvPVX(PL_patchlevel);
247 /* Build version strings using "native" characters */
248 s = uvchr_to_utf8(s, (UV)PERL_REVISION);
249 s = uvchr_to_utf8(s, (UV)PERL_VERSION);
250 s = uvchr_to_utf8(s, (UV)PERL_SUBVERSION);
252 SvCUR_set(PL_patchlevel, s - (U8*)SvPVX(PL_patchlevel));
253 SvPOK_on(PL_patchlevel);
254 SvNVX(PL_patchlevel) = (NV)PERL_REVISION
255 + ((NV)PERL_VERSION / (NV)1000)
256 #if defined(PERL_SUBVERSION) && PERL_SUBVERSION > 0
257 + ((NV)PERL_SUBVERSION / (NV)1000000)
260 SvNOK_on(PL_patchlevel); /* dual valued */
261 SvUTF8_on(PL_patchlevel);
262 SvREADONLY_on(PL_patchlevel);
265 #if defined(LOCAL_PATCH_COUNT)
266 PL_localpatches = local_patches; /* For possible -v */
269 #ifdef HAVE_INTERP_INTERN
273 PerlIO_init(aTHX); /* Hook to IO system */
275 PL_fdpid = newAV(); /* for remembering popen pids by fd */
276 PL_modglobal = newHV(); /* pointers to per-interpreter module globals */
277 PL_errors = newSVpvn("",0);
278 sv_setpvn(PERL_DEBUG_PAD(0), "", 0); /* For regex debugging. */
279 sv_setpvn(PERL_DEBUG_PAD(1), "", 0); /* ext/re needs these */
280 sv_setpvn(PERL_DEBUG_PAD(2), "", 0); /* even without DEBUGGING. */
282 PL_regex_padav = newAV();
283 av_push(PL_regex_padav,(SV*)newAV()); /* First entry is an array of empty elements */
284 PL_regex_pad = AvARRAY(PL_regex_padav);
286 #ifdef USE_REENTRANT_API
287 Perl_reentrant_init(aTHX);
290 /* Note that strtab is a rather special HV. Assumptions are made
291 about not iterating on it, and not adding tie magic to it.
292 It is properly deallocated in perl_destruct() */
295 #ifdef USE_5005THREADS
296 MUTEX_INIT(&PL_strtab_mutex);
298 HvSHAREKEYS_off(PL_strtab); /* mandatory */
299 hv_ksplit(PL_strtab, 512);
301 #if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
302 _dyld_lookup_and_bind
303 ("__environ", (unsigned long *) &environ_pointer, NULL);
306 #ifdef USE_ENVIRON_ARRAY
307 PL_origenviron = environ;
310 /* Use sysconf(_SC_CLK_TCK) if available, if not
311 * available or if the sysconf() fails, use the HZ. */
312 #if defined(HAS_SYSCONF) && defined(_SC_CLK_TCK)
313 PL_clocktick = sysconf(_SC_CLK_TCK);
314 if (PL_clocktick <= 0)
322 =for apidoc nothreadhook
324 Stub that provides thread hook for perl_destruct when there are
331 Perl_nothreadhook(pTHX)
337 =for apidoc perl_destruct
339 Shuts down a Perl interpreter. See L<perlembed>.
347 volatile int destruct_level; /* 0=none, 1=full, 2=full with checks */
349 #ifdef USE_5005THREADS
352 #endif /* USE_5005THREADS */
354 /* wait for all pseudo-forked children to finish */
355 PERL_WAIT_FOR_CHILDREN;
357 #ifdef USE_5005THREADS
359 /* Pass 1 on any remaining threads: detach joinables, join zombies */
361 MUTEX_LOCK(&PL_threads_mutex);
362 DEBUG_S(PerlIO_printf(Perl_debug_log,
363 "perl_destruct: waiting for %d threads...\n",
365 for (t = thr->next; t != thr; t = t->next) {
366 MUTEX_LOCK(&t->mutex);
367 switch (ThrSTATE(t)) {
370 DEBUG_S(PerlIO_printf(Perl_debug_log,
371 "perl_destruct: joining zombie %p\n", t));
372 ThrSETSTATE(t, THRf_DEAD);
373 MUTEX_UNLOCK(&t->mutex);
376 * The SvREFCNT_dec below may take a long time (e.g. av
377 * may contain an object scalar whose destructor gets
378 * called) so we have to unlock threads_mutex and start
381 MUTEX_UNLOCK(&PL_threads_mutex);
383 SvREFCNT_dec((SV*)av);
384 DEBUG_S(PerlIO_printf(Perl_debug_log,
385 "perl_destruct: joined zombie %p OK\n", t));
387 case THRf_R_JOINABLE:
388 DEBUG_S(PerlIO_printf(Perl_debug_log,
389 "perl_destruct: detaching thread %p\n", t));
390 ThrSETSTATE(t, THRf_R_DETACHED);
392 * We unlock threads_mutex and t->mutex in the opposite order
393 * from which we locked them just so that DETACH won't
394 * deadlock if it panics. It's only a breach of good style
395 * not a bug since they are unlocks not locks.
397 MUTEX_UNLOCK(&PL_threads_mutex);
399 MUTEX_UNLOCK(&t->mutex);
402 DEBUG_S(PerlIO_printf(Perl_debug_log,
403 "perl_destruct: ignoring %p (state %u)\n",
405 MUTEX_UNLOCK(&t->mutex);
406 /* fall through and out */
409 /* We leave the above "Pass 1" loop with threads_mutex still locked */
411 /* Pass 2 on remaining threads: wait for the thread count to drop to one */
412 while (PL_nthreads > 1)
414 DEBUG_S(PerlIO_printf(Perl_debug_log,
415 "perl_destruct: final wait for %d threads\n",
417 COND_WAIT(&PL_nthreads_cond, &PL_threads_mutex);
419 /* At this point, we're the last thread */
420 MUTEX_UNLOCK(&PL_threads_mutex);
421 DEBUG_S(PerlIO_printf(Perl_debug_log, "perl_destruct: armageddon has arrived\n"));
422 MUTEX_DESTROY(&PL_threads_mutex);
423 COND_DESTROY(&PL_nthreads_cond);
425 #endif /* !defined(FAKE_THREADS) */
426 #endif /* USE_5005THREADS */
428 destruct_level = PL_perl_destruct_level;
432 if ((s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"))) {
434 if (destruct_level < i)
441 if(PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
446 if (PL_endav && !PL_minus_c)
447 call_list(PL_scopestack_ix, PL_endav);
453 /* Need to flush since END blocks can produce output */
456 if (CALL_FPTR(PL_threadhook)(aTHX)) {
457 /* Threads hook has vetoed further cleanup */
458 return STATUS_NATIVE_EXPORT;
461 /* We must account for everything. */
463 /* Destroy the main CV and syntax tree */
466 op_free(PL_main_root);
467 PL_main_root = Nullop;
469 PL_curcop = &PL_compiling;
470 PL_main_start = Nullop;
471 SvREFCNT_dec(PL_main_cv);
475 /* Tell PerlIO we are about to tear things apart in case
476 we have layers which are using resources that should
480 PerlIO_destruct(aTHX);
482 if (PL_sv_objcount) {
484 * Try to destruct global references. We do this first so that the
485 * destructors and destructees still exist. Some sv's might remain.
486 * Non-referenced objects are on their own.
491 /* unhook hooks which will soon be, or use, destroyed data */
492 SvREFCNT_dec(PL_warnhook);
493 PL_warnhook = Nullsv;
494 SvREFCNT_dec(PL_diehook);
497 /* call exit list functions */
498 while (PL_exitlistlen-- > 0)
499 PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr);
501 Safefree(PL_exitlist);
503 if (destruct_level == 0){
505 DEBUG_P(debprofdump());
507 #if defined(PERLIO_LAYERS)
508 /* No more IO - including error messages ! */
509 PerlIO_cleanup(aTHX);
512 /* The exit() function will do everything that needs doing. */
513 return STATUS_NATIVE_EXPORT;
516 /* jettison our possibly duplicated environment */
517 /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied
518 * so we certainly shouldn't free it here
520 #if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV)
521 if (environ != PL_origenviron
523 /* only main thread can free environ[0] contents */
524 && PL_curinterp == aTHX
530 for (i = 0; environ[i]; i++)
531 safesysfree(environ[i]);
533 /* Must use safesysfree() when working with environ. */
534 safesysfree(environ);
536 environ = PL_origenviron;
541 /* the syntax tree is shared between clones
542 * so op_free(PL_main_root) only ReREFCNT_dec's
543 * REGEXPs in the parent interpreter
544 * we need to manually ReREFCNT_dec for the clones
547 I32 i = AvFILLp(PL_regex_padav) + 1;
548 SV **ary = AvARRAY(PL_regex_padav);
552 REGEXP *re = INT2PTR(REGEXP *,SvIVX(resv));
554 if (SvFLAGS(resv) & SVf_BREAK) {
555 /* this is PL_reg_curpm, already freed
556 * flag is set in regexec.c:S_regtry
558 SvFLAGS(resv) &= ~SVf_BREAK;
560 else if(SvREPADTMP(resv)) {
561 SvREPADTMP_off(resv);
568 SvREFCNT_dec(PL_regex_padav);
569 PL_regex_padav = Nullav;
573 /* loosen bonds of global variables */
576 (void)PerlIO_close(PL_rsfp);
580 /* Filters for program text */
581 SvREFCNT_dec(PL_rsfp_filters);
582 PL_rsfp_filters = Nullav;
585 PL_preprocess = FALSE;
591 PL_doswitches = FALSE;
592 PL_dowarn = G_WARN_OFF;
593 PL_doextract = FALSE;
594 PL_sawampersand = FALSE; /* must save all match strings */
597 Safefree(PL_inplace);
599 SvREFCNT_dec(PL_patchlevel);
602 SvREFCNT_dec(PL_e_script);
603 PL_e_script = Nullsv;
606 while (--PL_origargc >= 0) {
607 Safefree(PL_origargv[PL_origargc]);
609 Safefree(PL_origargv);
611 /* magical thingies */
613 SvREFCNT_dec(PL_ofs_sv); /* $, */
616 SvREFCNT_dec(PL_ors_sv); /* $\ */
619 SvREFCNT_dec(PL_rs); /* $/ */
622 PL_multiline = 0; /* $* */
623 Safefree(PL_osname); /* $^O */
626 SvREFCNT_dec(PL_statname);
627 PL_statname = Nullsv;
630 /* defgv, aka *_ should be taken care of elsewhere */
632 /* clean up after study() */
633 SvREFCNT_dec(PL_lastscream);
634 PL_lastscream = Nullsv;
635 Safefree(PL_screamfirst);
637 Safefree(PL_screamnext);
641 Safefree(PL_efloatbuf);
642 PL_efloatbuf = Nullch;
645 /* startup and shutdown function lists */
646 SvREFCNT_dec(PL_beginav);
647 SvREFCNT_dec(PL_beginav_save);
648 SvREFCNT_dec(PL_endav);
649 SvREFCNT_dec(PL_checkav);
650 SvREFCNT_dec(PL_checkav_save);
651 SvREFCNT_dec(PL_initav);
653 PL_beginav_save = Nullav;
656 PL_checkav_save = Nullav;
659 /* shortcuts just get cleared */
665 PL_argvoutgv = Nullgv;
667 PL_stderrgv = Nullgv;
668 PL_last_in_gv = Nullgv;
670 PL_debstash = Nullhv;
672 /* reset so print() ends up where we expect */
675 SvREFCNT_dec(PL_argvout_stack);
676 PL_argvout_stack = Nullav;
678 SvREFCNT_dec(PL_modglobal);
679 PL_modglobal = Nullhv;
680 SvREFCNT_dec(PL_preambleav);
681 PL_preambleav = Nullav;
682 SvREFCNT_dec(PL_subname);
684 SvREFCNT_dec(PL_linestr);
686 SvREFCNT_dec(PL_pidstatus);
687 PL_pidstatus = Nullhv;
688 SvREFCNT_dec(PL_toptarget);
689 PL_toptarget = Nullsv;
690 SvREFCNT_dec(PL_bodytarget);
691 PL_bodytarget = Nullsv;
692 PL_formtarget = Nullsv;
694 /* free locale stuff */
695 #ifdef USE_LOCALE_COLLATE
696 Safefree(PL_collation_name);
697 PL_collation_name = Nullch;
700 #ifdef USE_LOCALE_NUMERIC
701 Safefree(PL_numeric_name);
702 PL_numeric_name = Nullch;
703 SvREFCNT_dec(PL_numeric_radix_sv);
706 /* clear utf8 character classes */
707 SvREFCNT_dec(PL_utf8_alnum);
708 SvREFCNT_dec(PL_utf8_alnumc);
709 SvREFCNT_dec(PL_utf8_ascii);
710 SvREFCNT_dec(PL_utf8_alpha);
711 SvREFCNT_dec(PL_utf8_space);
712 SvREFCNT_dec(PL_utf8_cntrl);
713 SvREFCNT_dec(PL_utf8_graph);
714 SvREFCNT_dec(PL_utf8_digit);
715 SvREFCNT_dec(PL_utf8_upper);
716 SvREFCNT_dec(PL_utf8_lower);
717 SvREFCNT_dec(PL_utf8_print);
718 SvREFCNT_dec(PL_utf8_punct);
719 SvREFCNT_dec(PL_utf8_xdigit);
720 SvREFCNT_dec(PL_utf8_mark);
721 SvREFCNT_dec(PL_utf8_toupper);
722 SvREFCNT_dec(PL_utf8_totitle);
723 SvREFCNT_dec(PL_utf8_tolower);
724 SvREFCNT_dec(PL_utf8_tofold);
725 SvREFCNT_dec(PL_utf8_idstart);
726 SvREFCNT_dec(PL_utf8_idcont);
727 PL_utf8_alnum = Nullsv;
728 PL_utf8_alnumc = Nullsv;
729 PL_utf8_ascii = Nullsv;
730 PL_utf8_alpha = Nullsv;
731 PL_utf8_space = Nullsv;
732 PL_utf8_cntrl = Nullsv;
733 PL_utf8_graph = Nullsv;
734 PL_utf8_digit = Nullsv;
735 PL_utf8_upper = Nullsv;
736 PL_utf8_lower = Nullsv;
737 PL_utf8_print = Nullsv;
738 PL_utf8_punct = Nullsv;
739 PL_utf8_xdigit = Nullsv;
740 PL_utf8_mark = Nullsv;
741 PL_utf8_toupper = Nullsv;
742 PL_utf8_totitle = Nullsv;
743 PL_utf8_tolower = Nullsv;
744 PL_utf8_tofold = Nullsv;
745 PL_utf8_idstart = Nullsv;
746 PL_utf8_idcont = Nullsv;
748 if (!specialWARN(PL_compiling.cop_warnings))
749 SvREFCNT_dec(PL_compiling.cop_warnings);
750 PL_compiling.cop_warnings = Nullsv;
751 if (!specialCopIO(PL_compiling.cop_io))
752 SvREFCNT_dec(PL_compiling.cop_io);
753 PL_compiling.cop_io = Nullsv;
754 CopFILE_free(&PL_compiling);
755 CopSTASH_free(&PL_compiling);
757 /* Prepare to destruct main symbol table. */
762 SvREFCNT_dec(PL_curstname);
763 PL_curstname = Nullsv;
765 /* clear queued errors */
766 SvREFCNT_dec(PL_errors);
770 if (destruct_level >= 2 && ckWARN_d(WARN_INTERNAL)) {
771 if (PL_scopestack_ix != 0)
772 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
773 "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
774 (long)PL_scopestack_ix);
775 if (PL_savestack_ix != 0)
776 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
777 "Unbalanced saves: %ld more saves than restores\n",
778 (long)PL_savestack_ix);
779 if (PL_tmps_floor != -1)
780 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n",
781 (long)PL_tmps_floor + 1);
782 if (cxstack_ix != -1)
783 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n",
784 (long)cxstack_ix + 1);
787 /* Now absolutely destruct everything, somehow or other, loops or no. */
788 SvFLAGS(PL_fdpid) |= SVTYPEMASK; /* don't clean out pid table now */
789 SvFLAGS(PL_strtab) |= SVTYPEMASK; /* don't clean out strtab now */
791 /* the 2 is for PL_fdpid and PL_strtab */
792 while (PL_sv_count > 2 && sv_clean_all())
795 SvFLAGS(PL_fdpid) &= ~SVTYPEMASK;
796 SvFLAGS(PL_fdpid) |= SVt_PVAV;
797 SvFLAGS(PL_strtab) &= ~SVTYPEMASK;
798 SvFLAGS(PL_strtab) |= SVt_PVHV;
800 AvREAL_off(PL_fdpid); /* no surviving entries */
801 SvREFCNT_dec(PL_fdpid); /* needed in io_close() */
804 #ifdef HAVE_INTERP_INTERN
808 /* Destruct the global string table. */
810 /* Yell and reset the HeVAL() slots that are still holding refcounts,
811 * so that sv_free() won't fail on them.
819 max = HvMAX(PL_strtab);
820 array = HvARRAY(PL_strtab);
823 if (hent && ckWARN_d(WARN_INTERNAL)) {
824 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
825 "Unbalanced string table refcount: (%d) for \"%s\"",
826 HeVAL(hent) - Nullsv, HeKEY(hent));
827 HeVAL(hent) = Nullsv;
837 SvREFCNT_dec(PL_strtab);
840 /* free the pointer table used for cloning */
841 ptr_table_free(PL_ptr_table);
844 /* free special SVs */
846 SvREFCNT(&PL_sv_yes) = 0;
847 sv_clear(&PL_sv_yes);
848 SvANY(&PL_sv_yes) = NULL;
849 SvFLAGS(&PL_sv_yes) = 0;
851 SvREFCNT(&PL_sv_no) = 0;
853 SvANY(&PL_sv_no) = NULL;
854 SvFLAGS(&PL_sv_no) = 0;
858 for (i=0; i<=2; i++) {
859 SvREFCNT(PERL_DEBUG_PAD(i)) = 0;
860 sv_clear(PERL_DEBUG_PAD(i));
861 SvANY(PERL_DEBUG_PAD(i)) = NULL;
862 SvFLAGS(PERL_DEBUG_PAD(i)) = 0;
866 if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
867 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count);
869 #if defined(PERLIO_LAYERS)
870 /* No more IO - including error messages ! */
871 PerlIO_cleanup(aTHX);
874 /* sv_undef needs to stay immortal until after PerlIO_cleanup
875 as currently layers use it rather than Nullsv as a marker
876 for no arg - and will try and SvREFCNT_dec it.
878 SvREFCNT(&PL_sv_undef) = 0;
879 SvREADONLY_off(&PL_sv_undef);
881 Safefree(PL_origfilename);
882 Safefree(PL_reg_start_tmp);
884 Safefree(PL_reg_curpm);
885 Safefree(PL_reg_poscache);
886 Safefree(HeKEY_hek(&PL_hv_fetch_ent_mh));
887 Safefree(PL_op_mask);
888 Safefree(PL_psig_ptr);
889 Safefree(PL_psig_name);
890 Safefree(PL_bitcount);
891 Safefree(PL_psig_pend);
893 PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
895 DEBUG_P(debprofdump());
896 #ifdef USE_5005THREADS
897 MUTEX_DESTROY(&PL_strtab_mutex);
898 MUTEX_DESTROY(&PL_sv_mutex);
899 MUTEX_DESTROY(&PL_eval_mutex);
900 MUTEX_DESTROY(&PL_cred_mutex);
901 MUTEX_DESTROY(&PL_fdpid_mutex);
902 COND_DESTROY(&PL_eval_cond);
903 #ifdef EMULATE_ATOMIC_REFCOUNTS
904 MUTEX_DESTROY(&PL_svref_mutex);
905 #endif /* EMULATE_ATOMIC_REFCOUNTS */
907 /* As the penultimate thing, free the non-arena SV for thrsv */
908 Safefree(SvPVX(PL_thrsv));
909 Safefree(SvANY(PL_thrsv));
912 #endif /* USE_5005THREADS */
914 #ifdef USE_REENTRANT_API
915 Perl_reentrant_free(aTHX);
920 /* As the absolutely last thing, free the non-arena SV for mess() */
923 /* it could have accumulated taint magic */
924 if (SvTYPE(PL_mess_sv) >= SVt_PVMG) {
927 for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
928 moremagic = mg->mg_moremagic;
929 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global
931 Safefree(mg->mg_ptr);
935 /* we know that type >= SVt_PV */
936 (void)SvOOK_off(PL_mess_sv);
937 Safefree(SvPVX(PL_mess_sv));
938 Safefree(SvANY(PL_mess_sv));
939 Safefree(PL_mess_sv);
942 return STATUS_NATIVE_EXPORT;
946 =for apidoc perl_free
948 Releases a Perl interpreter. See L<perlembed>.
956 #if defined(WIN32) || defined(NETWARE)
957 # if defined(PERL_IMPLICIT_SYS)
959 void *host = nw_internal_host;
961 void *host = w32_internal_host;
965 nw_delete_internal_host(host);
967 win32_delete_internal_host(host);
978 Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
980 Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
981 PL_exitlist[PL_exitlistlen].fn = fn;
982 PL_exitlist[PL_exitlistlen].ptr = ptr;
987 =for apidoc perl_parse
989 Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
995 perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
1000 #ifdef USE_5005THREADS
1004 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
1007 Perl_croak(aTHX_ "suidperl is no longer needed since the kernel can now execute\n\
1008 setuid perl scripts securely.\n");
1014 /* we copy rather than point to argv
1015 * since perl_clone will copy and perl_destruct
1016 * has no way of knowing if we've made a copy or
1017 * just point to argv
1019 int i = PL_origargc;
1020 New(0, PL_origargv, i+1, char*);
1021 PL_origargv[i] = '\0';
1023 PL_origargv[i] = savepv(argv[i]);
1031 /* Come here if running an undumped a.out. */
1033 PL_origfilename = savepv(argv[0]);
1034 PL_do_undump = FALSE;
1035 cxstack_ix = -1; /* start label stack again */
1037 init_postdump_symbols(argc,argv,env);
1043 op_free(PL_main_root);
1044 PL_main_root = Nullop;
1046 PL_main_start = Nullop;
1047 SvREFCNT_dec(PL_main_cv);
1048 PL_main_cv = Nullcv;
1051 oldscope = PL_scopestack_ix;
1052 PL_dowarn = G_WARN_OFF;
1054 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1055 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vparse_body), env, xsinit);
1061 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1062 parse_body(env,xsinit);
1065 call_list(oldscope, PL_checkav);
1072 /* my_exit() was called */
1073 while (PL_scopestack_ix > oldscope)
1076 PL_curstash = PL_defstash;
1078 call_list(oldscope, PL_checkav);
1079 ret = STATUS_NATIVE_EXPORT;
1082 PerlIO_printf(Perl_error_log, "panic: top_env\n");
1090 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1092 S_vparse_body(pTHX_ va_list args)
1094 char **env = va_arg(args, char**);
1095 XSINIT_t xsinit = va_arg(args, XSINIT_t);
1097 return parse_body(env, xsinit);
1102 S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
1104 int argc = PL_origargc;
1105 char **argv = PL_origargv;
1106 char *scriptname = NULL;
1108 VOL bool dosearch = FALSE;
1109 char *validarg = "";
1112 char *cddir = Nullch;
1114 sv_setpvn(PL_linestr,"",0);
1115 sv = newSVpvn("",0); /* first used for -I flags */
1119 for (argc--,argv++; argc > 0; argc--,argv++) {
1120 if (argv[0][0] != '-' || !argv[0][1])
1124 validarg = " PHOOEY ";
1133 win32_argv2utf8(argc-1, argv+1);
1136 #ifndef PERL_STRICT_CR
1160 if ((s = moreswitches(s)))
1165 if( !PL_tainting ) {
1166 PL_taint_warn = TRUE;
1173 PL_taint_warn = FALSE;
1178 #ifdef MACOS_TRADITIONAL
1179 /* ignore -e for Dev:Pseudo argument */
1180 if (argv[1] && !strcmp(argv[1], "Dev:Pseudo"))
1183 if (PL_euid != PL_uid || PL_egid != PL_gid)
1184 Perl_croak(aTHX_ "No -e allowed in setuid scripts");
1186 PL_e_script = newSVpvn("",0);
1187 filter_add(read_e_script, NULL);
1190 sv_catpv(PL_e_script, s);
1192 sv_catpv(PL_e_script, argv[1]);
1196 Perl_croak(aTHX_ "No code specified for -e");
1197 sv_catpv(PL_e_script, "\n");
1200 case 'I': /* -I handled both here and in moreswitches() */
1202 if (!*++s && (s=argv[1]) != Nullch) {
1207 STRLEN len = strlen(s);
1208 p = savepvn(s, len);
1209 incpush(p, TRUE, TRUE);
1210 sv_catpvn(sv, "-I", 2);
1211 sv_catpvn(sv, p, len);
1212 sv_catpvn(sv, " ", 1);
1216 Perl_croak(aTHX_ "No directory specified for -I");
1220 PL_preprocess = TRUE;
1230 PL_preambleav = newAV();
1231 av_push(PL_preambleav, newSVpv("use Config qw(myconfig config_vars)",0));
1233 PL_Sv = newSVpv("print myconfig();",0);
1235 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this PERLSHR image: \\n\",");
1237 sv_catpv(PL_Sv,"print \"\\nCharacteristics of this binary (from libperl): \\n\",");
1239 sv_catpv(PL_Sv,"\" Compile-time options:");
1241 sv_catpv(PL_Sv," DEBUGGING");
1243 # ifdef MULTIPLICITY
1244 sv_catpv(PL_Sv," MULTIPLICITY");
1246 # ifdef USE_5005THREADS
1247 sv_catpv(PL_Sv," USE_5005THREADS");
1249 # ifdef USE_ITHREADS
1250 sv_catpv(PL_Sv," USE_ITHREADS");
1252 # ifdef USE_64_BIT_INT
1253 sv_catpv(PL_Sv," USE_64_BIT_INT");
1255 # ifdef USE_64_BIT_ALL
1256 sv_catpv(PL_Sv," USE_64_BIT_ALL");
1258 # ifdef USE_LONG_DOUBLE
1259 sv_catpv(PL_Sv," USE_LONG_DOUBLE");
1261 # ifdef USE_LARGE_FILES
1262 sv_catpv(PL_Sv," USE_LARGE_FILES");
1265 sv_catpv(PL_Sv," USE_SOCKS");
1267 # ifdef PERL_IMPLICIT_CONTEXT
1268 sv_catpv(PL_Sv," PERL_IMPLICIT_CONTEXT");
1270 # ifdef PERL_IMPLICIT_SYS
1271 sv_catpv(PL_Sv," PERL_IMPLICIT_SYS");
1273 sv_catpv(PL_Sv,"\\n\",");
1275 #if defined(LOCAL_PATCH_COUNT)
1276 if (LOCAL_PATCH_COUNT > 0) {
1278 sv_catpv(PL_Sv,"\" Locally applied patches:\\n\",");
1279 for (i = 1; i <= LOCAL_PATCH_COUNT; i++) {
1280 if (PL_localpatches[i])
1281 Perl_sv_catpvf(aTHX_ PL_Sv,"q\" \t%s\n\",",PL_localpatches[i]);
1285 Perl_sv_catpvf(aTHX_ PL_Sv,"\" Built under %s\\n\"",OSNAME);
1288 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled at %s %s\\n\"",__DATE__,__TIME__);
1290 Perl_sv_catpvf(aTHX_ PL_Sv,",\" Compiled on %s\\n\"",__DATE__);
1293 sv_catpv(PL_Sv, "; \
1295 @env = map { \"$_=\\\"$ENV{$_}\\\"\" } sort grep {/^PERL/} keys %ENV; ");
1298 push @env, \"CYGWIN=\\\"$ENV{CYGWIN}\\\"\";");
1301 print \" \\%ENV:\\n @env\\n\" if @env; \
1302 print \" \\@INC:\\n @INC\\n\";");
1305 PL_Sv = newSVpv("config_vars(qw(",0);
1306 sv_catpv(PL_Sv, ++s);
1307 sv_catpv(PL_Sv, "))");
1310 av_push(PL_preambleav, PL_Sv);
1311 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1314 PL_doextract = TRUE;
1322 if (!*++s || isSPACE(*s)) {
1326 /* catch use of gnu style long options */
1327 if (strEQ(s, "version")) {
1331 if (strEQ(s, "help")) {
1338 Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s);
1344 #ifndef SECURE_INTERNAL_GETENV
1347 (s = PerlEnv_getenv("PERL5OPT")))
1352 if (*s == '-' && *(s+1) == 'T') {
1354 PL_taint_warn = FALSE;
1357 char *popt_copy = Nullch;
1370 if (!strchr("DIMUdmtw", *s))
1371 Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
1375 popt_copy = SvPVX(sv_2mortal(newSVpv(popt,0)));
1376 s = popt_copy + (s - popt);
1377 d = popt_copy + (d - popt);
1384 if( !PL_tainting ) {
1385 PL_taint_warn = TRUE;
1395 if (PL_taint_warn && PL_dowarn != G_WARN_ALL_OFF) {
1396 PL_compiling.cop_warnings = newSVpvn(WARN_TAINTstring, WARNsize);
1400 scriptname = argv[0];
1403 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
1405 else if (scriptname == Nullch) {
1407 if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
1415 open_script(scriptname,dosearch,sv,&fdscript);
1417 validate_suid(validarg, scriptname,fdscript);
1420 #if defined(SIGCHLD) || defined(SIGCLD)
1423 # define SIGCHLD SIGCLD
1425 Sighandler_t sigstate = rsignal_state(SIGCHLD);
1426 if (sigstate == SIG_IGN) {
1427 if (ckWARN(WARN_SIGNAL))
1428 Perl_warner(aTHX_ packWARN(WARN_SIGNAL),
1429 "Can't ignore signal CHLD, forcing to default");
1430 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
1436 #ifdef MACOS_TRADITIONAL
1437 if (PL_doextract || gMacPerl_AlwaysExtract) {
1442 if (cddir && PerlDir_chdir(cddir) < 0)
1443 Perl_croak(aTHX_ "Can't chdir to %s",cddir);
1447 PL_main_cv = PL_compcv = (CV*)NEWSV(1104,0);
1448 sv_upgrade((SV *)PL_compcv, SVt_PVCV);
1449 CvUNIQUE_on(PL_compcv);
1451 CvPADLIST(PL_compcv) = pad_new(0);
1452 #ifdef USE_5005THREADS
1453 CvOWNER(PL_compcv) = 0;
1454 New(666, CvMUTEXP(PL_compcv), 1, perl_mutex);
1455 MUTEX_INIT(CvMUTEXP(PL_compcv));
1456 #endif /* USE_5005THREADS */
1459 boot_core_UNIVERSAL();
1461 boot_core_xsutils();
1465 (*xsinit)(aTHX); /* in case linked C routines want magical variables */
1467 #if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC)
1473 # ifdef HAS_SOCKS5_INIT
1474 socks5_init(argv[0]);
1480 init_predump_symbols();
1481 /* init_postdump_symbols not currently designed to be called */
1482 /* more than once (ENV isn't cleared first, for example) */
1483 /* But running with -u leaves %ENV & @ARGV undefined! XXX */
1485 init_postdump_symbols(argc,argv,env);
1487 /* PL_wantutf8 is conditionally turned on by
1488 * locale.c:Perl_init_i18nl10n() if the environment
1489 * look like the user wants to use UTF-8. */
1490 if (PL_wantutf8) { /* Requires init_predump_symbols(). */
1494 /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR
1495 * _and_ the default open discipline. */
1496 if (PL_stdingv && (io = GvIO(PL_stdingv)) && (fp = IoIFP(io)))
1497 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1498 if (PL_defoutgv && (io = GvIO(PL_defoutgv)) && (fp = IoOFP(io)))
1499 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1500 if (PL_stderrgv && (io = GvIO(PL_stderrgv)) && (fp = IoOFP(io)))
1501 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
1502 if ((sv = GvSV(gv_fetchpv("\017PEN", TRUE, SVt_PV)))) {
1503 sv_setpvn(sv, ":utf8\0:utf8", 11);
1510 /* now parse the script */
1512 SETERRNO(0,SS_NORMAL);
1514 #ifdef MACOS_TRADITIONAL
1515 if (gMacPerl_SyntaxError = (yyparse() || PL_error_count)) {
1517 Perl_croak(aTHX_ "%s had compilation errors.\n", MacPerl_MPWFileName(PL_origfilename));
1519 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1520 MacPerl_MPWFileName(PL_origfilename));
1524 if (yyparse() || PL_error_count) {
1526 Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
1528 Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
1533 CopLINE_set(PL_curcop, 0);
1534 PL_curstash = PL_defstash;
1535 PL_preprocess = FALSE;
1537 SvREFCNT_dec(PL_e_script);
1538 PL_e_script = Nullsv;
1542 Not sure that this is still the right place to do this now that we
1543 no longer use PL_nrs. HVDS 2001/09/09
1545 sv_setsv(get_sv("/", TRUE), PL_rs);
1551 SAVECOPFILE(PL_curcop);
1552 SAVECOPLINE(PL_curcop);
1553 gv_check(PL_defstash);
1560 if ((s=PerlEnv_getenv("PERL_DEBUG_MSTATS")) && atoi(s) >= 2)
1561 dump_mstats("after compilation:");
1570 =for apidoc perl_run
1572 Tells a Perl interpreter to run. See L<perlembed>.
1583 #ifdef USE_5005THREADS
1587 oldscope = PL_scopestack_ix;
1592 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1594 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vrun_body), oldscope);
1600 cxstack_ix = -1; /* start context stack again */
1602 case 0: /* normal completion */
1603 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1608 case 2: /* my_exit() */
1609 while (PL_scopestack_ix > oldscope)
1612 PL_curstash = PL_defstash;
1613 if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) &&
1614 PL_endav && !PL_minus_c)
1615 call_list(oldscope, PL_endav);
1617 if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
1618 dump_mstats("after execution: ");
1620 ret = STATUS_NATIVE_EXPORT;
1624 POPSTACK_TO(PL_mainstack);
1627 PerlIO_printf(Perl_error_log, "panic: restartop\n");
1637 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1639 S_vrun_body(pTHX_ va_list args)
1641 I32 oldscope = va_arg(args, I32);
1643 return run_body(oldscope);
1649 S_run_body(pTHX_ I32 oldscope)
1651 DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
1652 PL_sawampersand ? "Enabling" : "Omitting"));
1654 if (!PL_restartop) {
1655 DEBUG_x(dump_all());
1656 DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
1657 DEBUG_S(PerlIO_printf(Perl_debug_log, "main thread is 0x%"UVxf"\n",
1661 #ifdef MACOS_TRADITIONAL
1662 PerlIO_printf(Perl_error_log, "%s%s syntax OK\n",
1663 (gMacPerl_ErrorFormat ? "# " : ""),
1664 MacPerl_MPWFileName(PL_origfilename));
1666 PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
1670 if (PERLDB_SINGLE && PL_DBsingle)
1671 sv_setiv(PL_DBsingle, 1);
1673 call_list(oldscope, PL_initav);
1679 PL_op = PL_restartop;
1683 else if (PL_main_start) {
1684 CvDEPTH(PL_main_cv) = 1;
1685 PL_op = PL_main_start;
1695 =head1 SV Manipulation Functions
1697 =for apidoc p||get_sv
1699 Returns the SV of the specified Perl scalar. If C<create> is set and the
1700 Perl variable does not exist then it will be created. If C<create> is not
1701 set and the variable does not exist then NULL is returned.
1707 Perl_get_sv(pTHX_ const char *name, I32 create)
1710 #ifdef USE_5005THREADS
1711 if (name[1] == '\0' && !isALPHA(name[0])) {
1712 PADOFFSET tmp = find_threadsv(name);
1713 if (tmp != NOT_IN_PAD)
1714 return THREADSV(tmp);
1716 #endif /* USE_5005THREADS */
1717 gv = gv_fetchpv(name, create, SVt_PV);
1724 =head1 Array Manipulation Functions
1726 =for apidoc p||get_av
1728 Returns the AV of the specified Perl array. If C<create> is set and the
1729 Perl variable does not exist then it will be created. If C<create> is not
1730 set and the variable does not exist then NULL is returned.
1736 Perl_get_av(pTHX_ const char *name, I32 create)
1738 GV* gv = gv_fetchpv(name, create, SVt_PVAV);
1747 =head1 Hash Manipulation Functions
1749 =for apidoc p||get_hv
1751 Returns the HV of the specified Perl hash. If C<create> is set and the
1752 Perl variable does not exist then it will be created. If C<create> is not
1753 set and the variable does not exist then NULL is returned.
1759 Perl_get_hv(pTHX_ const char *name, I32 create)
1761 GV* gv = gv_fetchpv(name, create, SVt_PVHV);
1770 =head1 CV Manipulation Functions
1772 =for apidoc p||get_cv
1774 Returns the CV of the specified Perl subroutine. If C<create> is set and
1775 the Perl subroutine does not exist then it will be declared (which has the
1776 same effect as saying C<sub name;>). If C<create> is not set and the
1777 subroutine does not exist then NULL is returned.
1783 Perl_get_cv(pTHX_ const char *name, I32 create)
1785 GV* gv = gv_fetchpv(name, create, SVt_PVCV);
1786 /* XXX unsafe for threads if eval_owner isn't held */
1787 /* XXX this is probably not what they think they're getting.
1788 * It has the same effect as "sub name;", i.e. just a forward
1790 if (create && !GvCVu(gv))
1791 return newSUB(start_subparse(FALSE, 0),
1792 newSVOP(OP_CONST, 0, newSVpv(name,0)),
1800 /* Be sure to refetch the stack pointer after calling these routines. */
1804 =head1 Callback Functions
1806 =for apidoc p||call_argv
1808 Performs a callback to the specified Perl sub. See L<perlcall>.
1814 Perl_call_argv(pTHX_ const char *sub_name, I32 flags, register char **argv)
1816 /* See G_* flags in cop.h */
1817 /* null terminated arg list */
1824 XPUSHs(sv_2mortal(newSVpv(*argv,0)));
1829 return call_pv(sub_name, flags);
1833 =for apidoc p||call_pv
1835 Performs a callback to the specified Perl sub. See L<perlcall>.
1841 Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
1842 /* name of the subroutine */
1843 /* See G_* flags in cop.h */
1845 return call_sv((SV*)get_cv(sub_name, TRUE), flags);
1849 =for apidoc p||call_method
1851 Performs a callback to the specified Perl method. The blessed object must
1852 be on the stack. See L<perlcall>.
1858 Perl_call_method(pTHX_ const char *methname, I32 flags)
1859 /* name of the subroutine */
1860 /* See G_* flags in cop.h */
1862 return call_sv(sv_2mortal(newSVpv(methname,0)), flags | G_METHOD);
1865 /* May be called with any of a CV, a GV, or an SV containing the name. */
1867 =for apidoc p||call_sv
1869 Performs a callback to the Perl sub whose name is in the SV. See
1876 Perl_call_sv(pTHX_ SV *sv, I32 flags)
1877 /* See G_* flags in cop.h */
1880 LOGOP myop; /* fake syntax tree node */
1883 volatile I32 retval = 0;
1885 bool oldcatch = CATCH_GET;
1890 if (flags & G_DISCARD) {
1895 Zero(&myop, 1, LOGOP);
1896 myop.op_next = Nullop;
1897 if (!(flags & G_NOARGS))
1898 myop.op_flags |= OPf_STACKED;
1899 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
1900 (flags & G_ARRAY) ? OPf_WANT_LIST :
1905 EXTEND(PL_stack_sp, 1);
1906 *++PL_stack_sp = sv;
1908 oldscope = PL_scopestack_ix;
1910 if (PERLDB_SUB && PL_curstash != PL_debstash
1911 /* Handle first BEGIN of -d. */
1912 && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
1913 /* Try harder, since this may have been a sighandler, thus
1914 * curstash may be meaningless. */
1915 && (SvTYPE(sv) != SVt_PVCV || CvSTASH((CV*)sv) != PL_debstash)
1916 && !(flags & G_NODEBUG))
1917 PL_op->op_private |= OPpENTERSUB_DB;
1919 if (flags & G_METHOD) {
1920 Zero(&method_op, 1, UNOP);
1921 method_op.op_next = PL_op;
1922 method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
1923 myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
1924 PL_op = (OP*)&method_op;
1927 if (!(flags & G_EVAL)) {
1929 call_body((OP*)&myop, FALSE);
1930 retval = PL_stack_sp - (PL_stack_base + oldmark);
1931 CATCH_SET(oldcatch);
1934 myop.op_other = (OP*)&myop;
1936 /* we're trying to emulate pp_entertry() here */
1938 register PERL_CONTEXT *cx;
1939 I32 gimme = GIMME_V;
1944 push_return(Nullop);
1945 PUSHBLOCK(cx, (CXt_EVAL|CXp_TRYBLOCK), PL_stack_sp);
1947 PL_eval_root = PL_op; /* Only needed so that goto works right. */
1949 PL_in_eval = EVAL_INEVAL;
1950 if (flags & G_KEEPERR)
1951 PL_in_eval |= EVAL_KEEPERR;
1957 #ifdef PERL_FLEXIBLE_EXCEPTIONS
1959 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
1966 #ifndef PERL_FLEXIBLE_EXCEPTIONS
1968 call_body((OP*)&myop, FALSE);
1970 retval = PL_stack_sp - (PL_stack_base + oldmark);
1971 if (!(flags & G_KEEPERR))
1978 /* my_exit() was called */
1979 PL_curstash = PL_defstash;
1982 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
1983 Perl_croak(aTHX_ "Callback called exit");
1988 PL_op = PL_restartop;
1992 PL_stack_sp = PL_stack_base + oldmark;
1993 if (flags & G_ARRAY)
1997 *++PL_stack_sp = &PL_sv_undef;
2002 if (PL_scopestack_ix > oldscope) {
2006 register PERL_CONTEXT *cx;
2018 if (flags & G_DISCARD) {
2019 PL_stack_sp = PL_stack_base + oldmark;
2028 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2030 S_vcall_body(pTHX_ va_list args)
2032 OP *myop = va_arg(args, OP*);
2033 int is_eval = va_arg(args, int);
2035 call_body(myop, is_eval);
2041 S_call_body(pTHX_ OP *myop, int is_eval)
2043 if (PL_op == myop) {
2045 PL_op = Perl_pp_entereval(aTHX); /* this doesn't do a POPMARK */
2047 PL_op = Perl_pp_entersub(aTHX); /* this does */
2053 /* Eval a string. The G_EVAL flag is always assumed. */
2056 =for apidoc p||eval_sv
2058 Tells Perl to C<eval> the string in the SV.
2064 Perl_eval_sv(pTHX_ SV *sv, I32 flags)
2066 /* See G_* flags in cop.h */
2069 UNOP myop; /* fake syntax tree node */
2070 volatile I32 oldmark = SP - PL_stack_base;
2071 volatile I32 retval = 0;
2077 if (flags & G_DISCARD) {
2084 Zero(PL_op, 1, UNOP);
2085 EXTEND(PL_stack_sp, 1);
2086 *++PL_stack_sp = sv;
2087 oldscope = PL_scopestack_ix;
2089 if (!(flags & G_NOARGS))
2090 myop.op_flags = OPf_STACKED;
2091 myop.op_next = Nullop;
2092 myop.op_type = OP_ENTEREVAL;
2093 myop.op_flags |= ((flags & G_VOID) ? OPf_WANT_VOID :
2094 (flags & G_ARRAY) ? OPf_WANT_LIST :
2096 if (flags & G_KEEPERR)
2097 myop.op_flags |= OPf_SPECIAL;
2099 #ifdef PERL_FLEXIBLE_EXCEPTIONS
2101 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_body),
2108 #ifndef PERL_FLEXIBLE_EXCEPTIONS
2110 call_body((OP*)&myop,TRUE);
2112 retval = PL_stack_sp - (PL_stack_base + oldmark);
2113 if (!(flags & G_KEEPERR))
2120 /* my_exit() was called */
2121 PL_curstash = PL_defstash;
2124 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED))
2125 Perl_croak(aTHX_ "Callback called exit");
2130 PL_op = PL_restartop;
2134 PL_stack_sp = PL_stack_base + oldmark;
2135 if (flags & G_ARRAY)
2139 *++PL_stack_sp = &PL_sv_undef;
2145 if (flags & G_DISCARD) {
2146 PL_stack_sp = PL_stack_base + oldmark;
2156 =for apidoc p||eval_pv
2158 Tells Perl to C<eval> the given string and return an SV* result.
2164 Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
2167 SV* sv = newSVpv(p, 0);
2169 eval_sv(sv, G_SCALAR);
2176 if (croak_on_error && SvTRUE(ERRSV)) {
2178 Perl_croak(aTHX_ SvPVx(ERRSV, n_a));
2184 /* Require a module. */
2187 =head1 Embedding Functions
2189 =for apidoc p||require_pv
2191 Tells Perl to C<require> the file named by the string argument. It is
2192 analogous to the Perl code C<eval "require '$file'">. It's even
2193 implemented that way; consider using Perl_load_module instead.
2198 Perl_require_pv(pTHX_ const char *pv)
2202 PUSHSTACKi(PERLSI_REQUIRE);
2204 sv = sv_newmortal();
2205 sv_setpv(sv, "require '");
2208 eval_sv(sv, G_DISCARD);
2214 Perl_magicname(pTHX_ char *sym, char *name, I32 namlen)
2218 if ((gv = gv_fetchpv(sym,TRUE, SVt_PV)))
2219 sv_magic(GvSV(gv), (SV*)gv, PERL_MAGIC_sv, name, namlen);
2223 S_usage(pTHX_ char *name) /* XXX move this out into a module ? */
2225 /* This message really ought to be max 23 lines.
2226 * Removed -h because the user already knows that option. Others? */
2228 static char *usage_msg[] = {
2229 "-0[octal] specify record separator (\\0, if no argument)",
2230 "-a autosplit mode with -n or -p (splits $_ into @F)",
2231 "-C enable native wide character system interfaces",
2232 "-c check syntax only (runs BEGIN and CHECK blocks)",
2233 "-d[:debugger] run program under debugger",
2234 "-D[number/list] set debugging flags (argument is a bit mask or alphabets)",
2235 "-e 'command' one line of program (several -e's allowed, omit programfile)",
2236 "-F/pattern/ split() pattern for -a switch (//'s are optional)",
2237 "-i[extension] edit <> files in place (makes backup if extension supplied)",
2238 "-Idirectory specify @INC/#include directory (several -I's allowed)",
2239 "-l[octal] enable line ending processing, specifies line terminator",
2240 "-[mM][-]module execute `use/no module...' before executing program",
2241 "-n assume 'while (<>) { ... }' loop around program",
2242 "-p assume loop like -n but print line also, like sed",
2243 "-P run program through C preprocessor before compilation",
2244 "-s enable rudimentary parsing for switches after programfile",
2245 "-S look for programfile using PATH environment variable",
2246 "-T enable tainting checks",
2247 "-t enable tainting warnings",
2248 "-u dump core after parsing program",
2249 "-U allow unsafe operations",
2250 "-v print version, subversion (includes VERY IMPORTANT perl info)",
2251 "-V[:variable] print configuration summary (or a single Config.pm variable)",
2252 "-w enable many useful warnings (RECOMMENDED)",
2253 "-W enable all warnings",
2254 "-X disable all warnings",
2255 "-x[directory] strip off text before #!perl line and perhaps cd to directory",
2259 char **p = usage_msg;
2261 PerlIO_printf(PerlIO_stdout(),
2262 "\nUsage: %s [switches] [--] [programfile] [arguments]",
2265 PerlIO_printf(PerlIO_stdout(), "\n %s", *p++);
2268 /* This routine handles any switches that can be given during run */
2271 Perl_moreswitches(pTHX_ char *s)
2281 rschar = (U32)grok_oct(s, &numlen, &flags, NULL);
2282 SvREFCNT_dec(PL_rs);
2283 if (rschar & ~((U8)~0))
2284 PL_rs = &PL_sv_undef;
2285 else if (!rschar && numlen >= 2)
2286 PL_rs = newSVpvn("", 0);
2288 char ch = (char)rschar;
2289 PL_rs = newSVpvn(&ch, 1);
2294 PL_widesyscalls = TRUE;
2300 while (*s && !isSPACE(*s)) ++s;
2302 PL_splitstr = savepv(PL_splitstr);
2315 /* The following permits -d:Mod to accepts arguments following an =
2316 in the fashion that -MSome::Mod does. */
2317 if (*s == ':' || *s == '=') {
2320 sv = newSVpv("use Devel::", 0);
2322 /* We now allow -d:Module=Foo,Bar */
2323 while(isALNUM(*s) || *s==':') ++s;
2325 sv_catpv(sv, start);
2327 sv_catpvn(sv, start, s-start);
2328 sv_catpv(sv, " split(/,/,q{");
2333 my_setenv("PERL5DB", SvPV(sv, PL_na));
2336 PL_perldb = PERLDB_ALL;
2344 if (isALPHA(s[1])) {
2345 /* if adding extra options, remember to update DEBUG_MASK */
2346 static char debopts[] = "psltocPmfrxu HXDSTRJvC";
2349 for (s++; *s && (d = strchr(debopts,*s)); s++)
2350 PL_debug |= 1 << (d - debopts);
2353 PL_debug = atoi(s+1);
2354 for (s++; isDIGIT(*s); s++) ;
2357 if (DEBUG_p_TEST_ && ckWARN_d(WARN_DEBUGGING))
2358 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2359 "-Dp not implemented on this platform\n");
2361 PL_debug |= DEBUG_TOP_FLAG;
2362 #else /* !DEBUGGING */
2363 if (ckWARN_d(WARN_DEBUGGING))
2364 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
2365 "Recompile perl with -DDEBUGGING to use -D switch\n");
2366 for (s++; isALNUM(*s); s++) ;
2372 usage(PL_origargv[0]);
2376 Safefree(PL_inplace);
2377 #if defined(__CYGWIN__) /* do backup extension automagically */
2378 if (*(s+1) == '\0') {
2379 PL_inplace = savepv(".bak");
2382 #endif /* __CYGWIN__ */
2383 PL_inplace = savepv(s+1);
2385 for (s = PL_inplace; *s && !isSPACE(*s); s++) ;
2388 if (*s == '-') /* Additional switches on #! line. */
2392 case 'I': /* -I handled both here and in parse_body() */
2395 while (*s && isSPACE(*s))
2400 /* ignore trailing spaces (possibly followed by other switches) */
2402 for (e = p; *e && !isSPACE(*e); e++) ;
2406 } while (*p && *p != '-');
2407 e = savepvn(s, e-s);
2408 incpush(e, TRUE, TRUE);
2415 Perl_croak(aTHX_ "No directory specified for -I");
2421 SvREFCNT_dec(PL_ors_sv);
2426 PL_ors_sv = newSVpvn("\n",1);
2427 numlen = 3 + (*s == '0');
2428 *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL);
2432 if (RsPARA(PL_rs)) {
2433 PL_ors_sv = newSVpvn("\n\n",2);
2436 PL_ors_sv = newSVsv(PL_rs);
2441 forbid_setid("-M"); /* XXX ? */
2444 forbid_setid("-m"); /* XXX ? */
2449 /* -M-foo == 'no foo' */
2450 if (*s == '-') { use = "no "; ++s; }
2451 sv = newSVpv(use,0);
2453 /* We allow -M'Module qw(Foo Bar)' */
2454 while(isALNUM(*s) || *s==':') ++s;
2456 sv_catpv(sv, start);
2457 if (*(start-1) == 'm') {
2459 Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
2460 sv_catpv( sv, " ()");
2464 Perl_croak(aTHX_ "Module name required with -%c option",
2466 sv_catpvn(sv, start, s-start);
2467 sv_catpv(sv, " split(/,/,q{");
2473 PL_preambleav = newAV();
2474 av_push(PL_preambleav, sv);
2477 Perl_croak(aTHX_ "No space allowed after -%c", *(s-1));
2489 PL_doswitches = TRUE;
2494 Perl_croak(aTHX_ "Too late for \"-t\" option");
2499 Perl_croak(aTHX_ "Too late for \"-T\" option");
2503 #ifdef MACOS_TRADITIONAL
2504 Perl_croak(aTHX_ "Believe me, you don't want to use \"-u\" on a Macintosh");
2506 PL_do_undump = TRUE;
2515 PerlIO_printf(PerlIO_stdout(),
2516 Perl_form(aTHX_ "\nThis is perl, v%"VDf" built for %s",
2517 PL_patchlevel, ARCHNAME));
2519 /* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */
2520 PerlIO_printf(PerlIO_stdout(),
2521 Perl_form(aTHX_ "\nThis is perl, version %vd\n", PL_patchlevel));
2522 PerlIO_printf(PerlIO_stdout(),
2523 Perl_form(aTHX_ " built under %s at %s %s\n",
2524 OSNAME, __DATE__, __TIME__));
2525 PerlIO_printf(PerlIO_stdout(),
2526 Perl_form(aTHX_ " OS Specific Release: %s\n",
2530 #if defined(LOCAL_PATCH_COUNT)
2531 if (LOCAL_PATCH_COUNT > 0)
2532 PerlIO_printf(PerlIO_stdout(),
2533 "\n(with %d registered patch%s, "
2534 "see perl -V for more detail)",
2535 (int)LOCAL_PATCH_COUNT,
2536 (LOCAL_PATCH_COUNT!=1) ? "es" : "");
2539 PerlIO_printf(PerlIO_stdout(),
2540 "\n\nCopyright 1987-2002, Larry Wall\n");
2541 #ifdef MACOS_TRADITIONAL
2542 PerlIO_printf(PerlIO_stdout(),
2543 "\nMac OS port Copyright 1991-2002, Matthias Neeracher;\n"
2544 "maintained by Chris Nandor\n");
2547 PerlIO_printf(PerlIO_stdout(),
2548 "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
2551 PerlIO_printf(PerlIO_stdout(),
2552 "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
2553 "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
2556 PerlIO_printf(PerlIO_stdout(),
2557 "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
2558 "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n");
2561 PerlIO_printf(PerlIO_stdout(),
2562 "atariST series port, ++jrb bammi@cadence.com\n");
2565 PerlIO_printf(PerlIO_stdout(),
2566 "BeOS port Copyright Tom Spindler, 1997-1999\n");
2569 PerlIO_printf(PerlIO_stdout(),
2570 "MPE/iX port Copyright by Mark Klein and Mark Bixby, 1996-2002\n");
2573 PerlIO_printf(PerlIO_stdout(),
2574 "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
2577 PerlIO_printf(PerlIO_stdout(),
2578 "Stratus VOS port by Paul.Green@stratus.com, 1997-2002\n");
2581 PerlIO_printf(PerlIO_stdout(),
2582 "VM/ESA port by Neale Ferguson, 1998-1999\n");
2585 PerlIO_printf(PerlIO_stdout(),
2586 "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
2589 PerlIO_printf(PerlIO_stdout(),
2590 "MiNT port by Guido Flohr, 1997-1999\n");
2593 PerlIO_printf(PerlIO_stdout(),
2594 "EPOC port by Olaf Flebbe, 1999-2002\n");
2597 printf("WINCE port by Rainer Keuchel, 2001-2002\n");
2598 printf("Built on " __DATE__ " " __TIME__ "\n\n");
2601 #ifdef BINARY_BUILD_NOTICE
2602 BINARY_BUILD_NOTICE;
2604 PerlIO_printf(PerlIO_stdout(),
2606 Perl may be copied only under the terms of either the Artistic License or the\n\
2607 GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
2608 Complete documentation for Perl, including FAQ lists, should be found on\n\
2609 this system using `man perl' or `perldoc perl'. If you have access to the\n\
2610 Internet, point your browser at http://www.perl.com/, the Perl Home Page.\n\n");
2613 if (! (PL_dowarn & G_WARN_ALL_MASK))
2614 PL_dowarn |= G_WARN_ON;
2618 PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
2619 if (!specialWARN(PL_compiling.cop_warnings))
2620 SvREFCNT_dec(PL_compiling.cop_warnings);
2621 PL_compiling.cop_warnings = pWARN_ALL ;
2625 PL_dowarn = G_WARN_ALL_OFF;
2626 if (!specialWARN(PL_compiling.cop_warnings))
2627 SvREFCNT_dec(PL_compiling.cop_warnings);
2628 PL_compiling.cop_warnings = pWARN_NONE ;
2633 if (s[1] == '-') /* Additional switches on #! line. */
2638 #if defined(WIN32) || !defined(PERL_STRICT_CR)
2644 #ifdef ALTERNATE_SHEBANG
2645 case 'S': /* OS/2 needs -S on "extproc" line. */
2653 Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
2658 /* compliments of Tom Christiansen */
2660 /* unexec() can be found in the Gnu emacs distribution */
2661 /* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
2664 Perl_my_unexec(pTHX)
2672 prog = newSVpv(BIN_EXP, 0);
2673 sv_catpv(prog, "/perl");
2674 file = newSVpv(PL_origfilename, 0);
2675 sv_catpv(file, ".perldump");
2677 unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
2678 /* unexec prints msg to stderr in case of failure */
2679 PerlProc_exit(status);
2682 # include <lib$routines.h>
2683 lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */
2685 ABORT(); /* for use with undump */
2690 /* initialize curinterp */
2696 # define PERLVAR(var,type)
2697 # define PERLVARA(var,n,type)
2698 # if defined(PERL_IMPLICIT_CONTEXT)
2699 # if defined(USE_5005THREADS)
2700 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2701 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2702 # else /* !USE_5005THREADS */
2703 # define PERLVARI(var,type,init) aTHX->var = init;
2704 # define PERLVARIC(var,type,init) aTHX->var = init;
2705 # endif /* USE_5005THREADS */
2707 # define PERLVARI(var,type,init) PERL_GET_INTERP->var = init;
2708 # define PERLVARIC(var,type,init) PERL_GET_INTERP->var = init;
2710 # include "intrpvar.h"
2711 # ifndef USE_5005THREADS
2712 # include "thrdvar.h"
2719 # define PERLVAR(var,type)
2720 # define PERLVARA(var,n,type)
2721 # define PERLVARI(var,type,init) PL_##var = init;
2722 # define PERLVARIC(var,type,init) PL_##var = init;
2723 # include "intrpvar.h"
2724 # ifndef USE_5005THREADS
2725 # include "thrdvar.h"
2736 S_init_main_stash(pTHX)
2740 PL_curstash = PL_defstash = newHV();
2741 PL_curstname = newSVpvn("main",4);
2742 gv = gv_fetchpv("main::",TRUE, SVt_PVHV);
2743 SvREFCNT_dec(GvHV(gv));
2744 GvHV(gv) = (HV*)SvREFCNT_inc(PL_defstash);
2746 HvNAME(PL_defstash) = savepv("main");
2747 PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpv("INC",TRUE, SVt_PVAV)));
2748 GvMULTI_on(PL_incgv);
2749 PL_hintgv = gv_fetchpv("\010",TRUE, SVt_PV); /* ^H */
2750 GvMULTI_on(PL_hintgv);
2751 PL_defgv = gv_fetchpv("_",TRUE, SVt_PVAV);
2752 PL_errgv = gv_HVadd(gv_fetchpv("@", TRUE, SVt_PV));
2753 GvMULTI_on(PL_errgv);
2754 PL_replgv = gv_fetchpv("\022", TRUE, SVt_PV); /* ^R */
2755 GvMULTI_on(PL_replgv);
2756 (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */
2757 sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */
2758 sv_setpvn(ERRSV, "", 0);
2759 PL_curstash = PL_defstash;
2760 CopSTASH_set(&PL_compiling, PL_defstash);
2761 PL_debstash = GvHV(gv_fetchpv("DB::", GV_ADDMULTI, SVt_PVHV));
2762 PL_globalstash = GvHV(gv_fetchpv("CORE::GLOBAL::", GV_ADDMULTI, SVt_PVHV));
2763 /* We must init $/ before switches are processed. */
2764 sv_setpvn(get_sv("/", TRUE), "\n", 1);
2768 S_open_script(pTHX_ char *scriptname, bool dosearch, SV *sv, int *fdscript)
2772 char *cpp_discard_flag;
2778 PL_origfilename = savepv("-e");
2781 /* if find_script() returns, it returns a malloc()-ed value */
2782 PL_origfilename = scriptname = find_script(scriptname, dosearch, NULL, 1);
2784 if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) {
2785 char *s = scriptname + 8;
2786 *fdscript = atoi(s);
2790 scriptname = savepv(s + 1);
2791 Safefree(PL_origfilename);
2792 PL_origfilename = scriptname;
2797 CopFILE_free(PL_curcop);
2798 CopFILE_set(PL_curcop, PL_origfilename);
2799 if (strEQ(PL_origfilename,"-"))
2801 if (*fdscript >= 0) {
2802 PL_rsfp = PerlIO_fdopen(*fdscript,PERL_SCRIPT_MODE);
2803 # if defined(HAS_FCNTL) && defined(F_SETFD)
2805 /* ensure close-on-exec */
2806 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2809 else if (PL_preprocess) {
2810 char *cpp_cfg = CPPSTDIN;
2811 SV *cpp = newSVpvn("",0);
2812 SV *cmd = NEWSV(0,0);
2814 if (strEQ(cpp_cfg, "cppstdin"))
2815 Perl_sv_catpvf(aTHX_ cpp, "%s/", BIN_EXP);
2816 sv_catpv(cpp, cpp_cfg);
2819 sv_catpvn(sv, "-I", 2);
2820 sv_catpv(sv,PRIVLIB_EXP);
2823 DEBUG_P(PerlIO_printf(Perl_debug_log,
2824 "PL_preprocess: scriptname=\"%s\", cpp=\"%s\", sv=\"%s\", CPPMINUS=\"%s\"\n",
2825 scriptname, SvPVX (cpp), SvPVX (sv), CPPMINUS));
2827 # if defined(MSDOS) || defined(WIN32) || defined(VMS)
2834 cpp_discard_flag = "";
2836 cpp_discard_flag = "-C";
2840 perl = os2_execname(aTHX);
2842 perl = PL_origargv[0];
2846 /* This strips off Perl comments which might interfere with
2847 the C pre-processor, including #!. #line directives are
2848 deliberately stripped to avoid confusion with Perl's version
2849 of #line. FWP played some golf with it so it will fit
2850 into VMS's 255 character buffer.
2853 code = "(1../^#!.*perl/i)|/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2855 code = "/^\\s*#(?!\\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\\b)/||!($|=1)||print";
2857 Perl_sv_setpvf(aTHX_ cmd, "\
2858 %s -ne%s%s%s %s | %"SVf" %s %"SVf" %s",
2859 perl, quote, code, quote, scriptname, cpp,
2860 cpp_discard_flag, sv, CPPMINUS);
2862 PL_doextract = FALSE;
2863 # ifdef IAMSUID /* actually, this is caught earlier */
2864 if (PL_euid != PL_uid && !PL_euid) { /* if running suidperl */
2866 (void)seteuid(PL_uid); /* musn't stay setuid root */
2868 # ifdef HAS_SETREUID
2869 (void)setreuid((Uid_t)-1, PL_uid);
2871 # ifdef HAS_SETRESUID
2872 (void)setresuid((Uid_t)-1, PL_uid, (Uid_t)-1);
2874 PerlProc_setuid(PL_uid);
2878 if (PerlProc_geteuid() != PL_uid)
2879 Perl_croak(aTHX_ "Can't do seteuid!\n");
2881 # endif /* IAMSUID */
2883 DEBUG_P(PerlIO_printf(Perl_debug_log,
2884 "PL_preprocess: cmd=\"%s\"\n",
2887 PL_rsfp = PerlProc_popen(SvPVX(cmd), "r");
2891 else if (!*scriptname) {
2892 forbid_setid("program input from stdin");
2893 PL_rsfp = PerlIO_stdin();
2896 PL_rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
2897 # if defined(HAS_FCNTL) && defined(F_SETFD)
2899 /* ensure close-on-exec */
2900 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,1);
2905 # ifndef IAMSUID /* in case script is not readable before setuid */
2907 PerlLIO_stat(CopFILE(PL_curcop),&PL_statbuf) >= 0 &&
2908 PL_statbuf.st_mode & (S_ISUID|S_ISGID))
2911 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT,
2912 BIN_EXP, (int)PERL_REVISION,
2914 (int)PERL_SUBVERSION), PL_origargv);
2915 Perl_croak(aTHX_ "Can't do setuid\n");
2921 Perl_croak(aTHX_ "Can't open perl script: %s\n",
2924 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
2925 CopFILE(PL_curcop), Strerror(errno));
2931 * I_SYSSTATVFS HAS_FSTATVFS
2933 * I_STATFS HAS_FSTATFS HAS_GETFSSTAT
2934 * I_MNTENT HAS_GETMNTENT HAS_HASMNTOPT
2935 * here so that metaconfig picks them up. */
2939 S_fd_on_nosuid_fs(pTHX_ int fd)
2941 int check_okay = 0; /* able to do all the required sys/libcalls */
2942 int on_nosuid = 0; /* the fd is on a nosuid fs */
2944 * Preferred order: fstatvfs(), fstatfs(), ustat()+getmnt(), getmntent().
2945 * fstatvfs() is UNIX98.
2946 * fstatfs() is 4.3 BSD.
2947 * ustat()+getmnt() is pre-4.3 BSD.
2948 * getmntent() is O(number-of-mounted-filesystems) and can hang on
2949 * an irrelevant filesystem while trying to reach the right one.
2952 #undef FD_ON_NOSUID_CHECK_OKAY /* found the syscalls to do the check? */
2954 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2955 defined(HAS_FSTATVFS)
2956 # define FD_ON_NOSUID_CHECK_OKAY
2957 struct statvfs stfs;
2959 check_okay = fstatvfs(fd, &stfs) == 0;
2960 on_nosuid = check_okay && (stfs.f_flag & ST_NOSUID);
2961 # endif /* fstatvfs */
2963 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2964 defined(PERL_MOUNT_NOSUID) && \
2965 defined(HAS_FSTATFS) && \
2966 defined(HAS_STRUCT_STATFS) && \
2967 defined(HAS_STRUCT_STATFS_F_FLAGS)
2968 # define FD_ON_NOSUID_CHECK_OKAY
2971 check_okay = fstatfs(fd, &stfs) == 0;
2972 on_nosuid = check_okay && (stfs.f_flags & PERL_MOUNT_NOSUID);
2973 # endif /* fstatfs */
2975 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
2976 defined(PERL_MOUNT_NOSUID) && \
2977 defined(HAS_FSTAT) && \
2978 defined(HAS_USTAT) && \
2979 defined(HAS_GETMNT) && \
2980 defined(HAS_STRUCT_FS_DATA) && \
2982 # define FD_ON_NOSUID_CHECK_OKAY
2985 if (fstat(fd, &fdst) == 0) {
2987 if (ustat(fdst.st_dev, &us) == 0) {
2989 /* NOSTAT_ONE here because we're not examining fields which
2990 * vary between that case and STAT_ONE. */
2991 if (getmnt((int*)0, &fsd, (int)0, NOSTAT_ONE, us.f_fname) == 0) {
2992 size_t cmplen = sizeof(us.f_fname);
2993 if (sizeof(fsd.fd_req.path) < cmplen)
2994 cmplen = sizeof(fsd.fd_req.path);
2995 if (strnEQ(fsd.fd_req.path, us.f_fname, cmplen) &&
2996 fdst.st_dev == fsd.fd_req.dev) {
2998 on_nosuid = fsd.fd_req.flags & PERL_MOUNT_NOSUID;
3004 # endif /* fstat+ustat+getmnt */
3006 # if !defined(FD_ON_NOSUID_CHECK_OKAY) && \
3007 defined(HAS_GETMNTENT) && \
3008 defined(HAS_HASMNTOPT) && \
3009 defined(MNTOPT_NOSUID)
3010 # define FD_ON_NOSUID_CHECK_OKAY
3011 FILE *mtab = fopen("/etc/mtab", "r");
3012 struct mntent *entry;
3015 if (mtab && (fstat(fd, &stb) == 0)) {
3016 while (entry = getmntent(mtab)) {
3017 if (stat(entry->mnt_dir, &fsb) == 0
3018 && fsb.st_dev == stb.st_dev)
3020 /* found the filesystem */
3022 if (hasmntopt(entry, MNTOPT_NOSUID))
3025 } /* A single fs may well fail its stat(). */
3030 # endif /* getmntent+hasmntopt */
3033 Perl_croak(aTHX_ "Can't check filesystem of script \"%s\" for nosuid", PL_origfilename);
3036 #endif /* IAMSUID */
3039 S_validate_suid(pTHX_ char *validarg, char *scriptname, int fdscript)
3045 /* do we need to emulate setuid on scripts? */
3047 /* This code is for those BSD systems that have setuid #! scripts disabled
3048 * in the kernel because of a security problem. Merely defining DOSUID
3049 * in perl will not fix that problem, but if you have disabled setuid
3050 * scripts in the kernel, this will attempt to emulate setuid and setgid
3051 * on scripts that have those now-otherwise-useless bits set. The setuid
3052 * root version must be called suidperl or sperlN.NNN. If regular perl
3053 * discovers that it has opened a setuid script, it calls suidperl with
3054 * the same argv that it had. If suidperl finds that the script it has
3055 * just opened is NOT setuid root, it sets the effective uid back to the
3056 * uid. We don't just make perl setuid root because that loses the
3057 * effective uid we had before invoking perl, if it was different from the
3060 * DOSUID must be defined in both perl and suidperl, and IAMSUID must
3061 * be defined in suidperl only. suidperl must be setuid root. The
3062 * Configure script will set this up for you if you want it.
3068 if (PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf) < 0) /* normal stat is insecure */
3069 Perl_croak(aTHX_ "Can't stat script \"%s\"",PL_origfilename);
3070 if (fdscript < 0 && PL_statbuf.st_mode & (S_ISUID|S_ISGID)) {
3075 #ifndef HAS_SETREUID
3076 /* On this access check to make sure the directories are readable,
3077 * there is actually a small window that the user could use to make
3078 * filename point to an accessible directory. So there is a faint
3079 * chance that someone could execute a setuid script down in a
3080 * non-accessible directory. I don't know what to do about that.
3081 * But I don't think it's too important. The manual lies when
3082 * it says access() is useful in setuid programs.
3084 if (PerlLIO_access(CopFILE(PL_curcop),1)) /*double check*/
3085 Perl_croak(aTHX_ "Permission denied");
3087 /* If we can swap euid and uid, then we can determine access rights
3088 * with a simple stat of the file, and then compare device and
3089 * inode to make sure we did stat() on the same file we opened.
3090 * Then we just have to make sure he or she can execute it.
3097 setreuid(PL_euid,PL_uid) < 0
3100 setresuid(PL_euid,PL_uid,(Uid_t)-1) < 0
3103 || PerlProc_getuid() != PL_euid || PerlProc_geteuid() != PL_uid)
3104 Perl_croak(aTHX_ "Can't swap uid and euid"); /* really paranoid */
3105 if (PerlLIO_stat(CopFILE(PL_curcop),&tmpstatbuf) < 0)
3106 Perl_croak(aTHX_ "Permission denied"); /* testing full pathname here */
3107 #if defined(IAMSUID) && !defined(NO_NOSUID_CHECK)
3108 if (fd_on_nosuid_fs(PerlIO_fileno(PL_rsfp)))
3109 Perl_croak(aTHX_ "Permission denied");
3111 if (tmpstatbuf.st_dev != PL_statbuf.st_dev ||
3112 tmpstatbuf.st_ino != PL_statbuf.st_ino) {
3113 (void)PerlIO_close(PL_rsfp);
3114 Perl_croak(aTHX_ "Permission denied\n");
3118 setreuid(PL_uid,PL_euid) < 0
3120 # if defined(HAS_SETRESUID)
3121 setresuid(PL_uid,PL_euid,(Uid_t)-1) < 0
3124 || PerlProc_getuid() != PL_uid || PerlProc_geteuid() != PL_euid)
3125 Perl_croak(aTHX_ "Can't reswap uid and euid");
3126 if (!cando(S_IXUSR,FALSE,&PL_statbuf)) /* can real uid exec? */
3127 Perl_croak(aTHX_ "Permission denied\n");
3129 #endif /* HAS_SETREUID */
3130 #endif /* IAMSUID */
3132 if (!S_ISREG(PL_statbuf.st_mode))
3133 Perl_croak(aTHX_ "Permission denied");
3134 if (PL_statbuf.st_mode & S_IWOTH)
3135 Perl_croak(aTHX_ "Setuid/gid script is writable by world");
3136 PL_doswitches = FALSE; /* -s is insecure in suid */
3137 CopLINE_inc(PL_curcop);
3138 if (sv_gets(PL_linestr, PL_rsfp, 0) == Nullch ||
3139 strnNE(SvPV(PL_linestr,n_a),"#!",2) ) /* required even on Sys V */
3140 Perl_croak(aTHX_ "No #! line");
3141 s = SvPV(PL_linestr,n_a)+2;
3143 while (!isSPACE(*s)) s++;
3144 for (s2 = s; (s2 > SvPV(PL_linestr,n_a)+2 &&
3145 (isDIGIT(s2[-1]) || strchr("._-", s2[-1]))); s2--) ;
3146 if (strnNE(s2-4,"perl",4) && strnNE(s-9,"perl",4)) /* sanity check */
3147 Perl_croak(aTHX_ "Not a perl script");
3148 while (*s == ' ' || *s == '\t') s++;
3150 * #! arg must be what we saw above. They can invoke it by
3151 * mentioning suidperl explicitly, but they may not add any strange
3152 * arguments beyond what #! says if they do invoke suidperl that way.
3154 len = strlen(validarg);
3155 if (strEQ(validarg," PHOOEY ") ||
3156 strnNE(s,validarg,len) || !isSPACE(s[len]))
3157 Perl_croak(aTHX_ "Args must match #! line");
3160 if (PL_euid != PL_uid && (PL_statbuf.st_mode & S_ISUID) &&
3161 PL_euid == PL_statbuf.st_uid)
3163 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3164 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3165 #endif /* IAMSUID */
3167 if (PL_euid) { /* oops, we're not the setuid root perl */
3168 (void)PerlIO_close(PL_rsfp);
3171 PerlProc_execv(Perl_form(aTHX_ "%s/sperl"PERL_FS_VER_FMT, BIN_EXP,
3172 (int)PERL_REVISION, (int)PERL_VERSION,
3173 (int)PERL_SUBVERSION), PL_origargv);
3175 Perl_croak(aTHX_ "Can't do setuid\n");
3178 if (PL_statbuf.st_mode & S_ISGID && PL_statbuf.st_gid != PL_egid) {
3180 (void)setegid(PL_statbuf.st_gid);
3183 (void)setregid((Gid_t)-1,PL_statbuf.st_gid);
3185 #ifdef HAS_SETRESGID
3186 (void)setresgid((Gid_t)-1,PL_statbuf.st_gid,(Gid_t)-1);
3188 PerlProc_setgid(PL_statbuf.st_gid);
3192 if (PerlProc_getegid() != PL_statbuf.st_gid)
3193 Perl_croak(aTHX_ "Can't do setegid!\n");
3195 if (PL_statbuf.st_mode & S_ISUID) {
3196 if (PL_statbuf.st_uid != PL_euid)
3198 (void)seteuid(PL_statbuf.st_uid); /* all that for this */
3201 (void)setreuid((Uid_t)-1,PL_statbuf.st_uid);
3203 #ifdef HAS_SETRESUID
3204 (void)setresuid((Uid_t)-1,PL_statbuf.st_uid,(Uid_t)-1);
3206 PerlProc_setuid(PL_statbuf.st_uid);
3210 if (PerlProc_geteuid() != PL_statbuf.st_uid)
3211 Perl_croak(aTHX_ "Can't do seteuid!\n");
3213 else if (PL_uid) { /* oops, mustn't run as root */
3215 (void)seteuid((Uid_t)PL_uid);
3218 (void)setreuid((Uid_t)-1,(Uid_t)PL_uid);
3220 #ifdef HAS_SETRESUID
3221 (void)setresuid((Uid_t)-1,(Uid_t)PL_uid,(Uid_t)-1);
3223 PerlProc_setuid((Uid_t)PL_uid);
3227 if (PerlProc_geteuid() != PL_uid)
3228 Perl_croak(aTHX_ "Can't do seteuid!\n");
3231 if (!cando(S_IXUSR,TRUE,&PL_statbuf))
3232 Perl_croak(aTHX_ "Permission denied\n"); /* they can't do this */
3235 else if (PL_preprocess)
3236 Perl_croak(aTHX_ "-P not allowed for setuid/setgid script\n");
3237 else if (fdscript >= 0)
3238 Perl_croak(aTHX_ "fd script not allowed in suidperl\n");
3240 Perl_croak(aTHX_ "Script is not setuid/setgid in suidperl\n");
3242 /* We absolutely must clear out any saved ids here, so we */
3243 /* exec the real perl, substituting fd script for scriptname. */
3244 /* (We pass script name as "subdir" of fd, which perl will grok.) */
3245 PerlIO_rewind(PL_rsfp);
3246 PerlLIO_lseek(PerlIO_fileno(PL_rsfp),(Off_t)0,0); /* just in case rewind didn't */
3247 for (which = 1; PL_origargv[which] && PL_origargv[which] != scriptname; which++) ;
3248 if (!PL_origargv[which])
3249 Perl_croak(aTHX_ "Permission denied");
3250 PL_origargv[which] = savepv(Perl_form(aTHX_ "/dev/fd/%d/%s",
3251 PerlIO_fileno(PL_rsfp), PL_origargv[which]));
3252 #if defined(HAS_FCNTL) && defined(F_SETFD)
3253 fcntl(PerlIO_fileno(PL_rsfp),F_SETFD,0); /* ensure no close-on-exec */
3255 PerlProc_execv(Perl_form(aTHX_ "%s/perl"PERL_FS_VER_FMT, BIN_EXP,
3256 (int)PERL_REVISION, (int)PERL_VERSION,
3257 (int)PERL_SUBVERSION), PL_origargv);/* try again */
3258 Perl_croak(aTHX_ "Can't do setuid\n");
3259 #endif /* IAMSUID */
3261 if (PL_euid != PL_uid || PL_egid != PL_gid) { /* (suidperl doesn't exist, in fact) */
3262 #ifndef SETUID_SCRIPTS_ARE_SECURE_NOW
3263 PerlLIO_fstat(PerlIO_fileno(PL_rsfp),&PL_statbuf); /* may be either wrapped or real suid */
3264 if ((PL_euid != PL_uid && PL_euid == PL_statbuf.st_uid && PL_statbuf.st_mode & S_ISUID)
3266 (PL_egid != PL_gid && PL_egid == PL_statbuf.st_gid && PL_statbuf.st_mode & S_ISGID)
3269 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3270 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3271 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
3272 /* not set-id, must be wrapped */
3278 S_find_beginning(pTHX)
3280 register char *s, *s2;
3281 #ifdef MACOS_TRADITIONAL
3285 /* skip forward in input to the real script? */
3288 #ifdef MACOS_TRADITIONAL
3289 /* Since the Mac OS does not honor #! arguments for us, we do it ourselves */
3291 while (PL_doextract || gMacPerl_AlwaysExtract) {
3292 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch) {
3293 if (!gMacPerl_AlwaysExtract)
3294 Perl_croak(aTHX_ "No Perl script found in input\n");
3296 if (PL_doextract) /* require explicit override ? */
3297 if (!OverrideExtract(PL_origfilename))
3298 Perl_croak(aTHX_ "User aborted script\n");
3300 PL_doextract = FALSE;
3302 /* Pater peccavi, file does not have #! */
3303 PerlIO_rewind(PL_rsfp);
3308 while (PL_doextract) {
3309 if ((s = sv_gets(PL_linestr, PL_rsfp, 0)) == Nullch)
3310 Perl_croak(aTHX_ "No Perl script found in input\n");
3313 if (*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL")))) {
3314 PerlIO_ungetc(PL_rsfp, '\n'); /* to keep line count right */
3315 PL_doextract = FALSE;
3316 while (*s && !(isSPACE (*s) || *s == '#')) s++;
3318 while (*s == ' ' || *s == '\t') s++;
3320 while (isDIGIT(s2[-1]) || strchr("-._", s2[-1])) s2--;
3321 if (strnEQ(s2-4,"perl",4))
3323 while ((s = moreswitches(s)))
3326 #ifdef MACOS_TRADITIONAL
3327 /* We are always searching for the #!perl line in MacPerl,
3328 * so if we find it, still keep the line count correct
3329 * by counting lines we already skipped over
3331 for (; maclines > 0 ; maclines--)
3332 PerlIO_ungetc(PL_rsfp, '\n');
3336 /* gMacPerl_AlwaysExtract is false in MPW tool */
3337 } else if (gMacPerl_AlwaysExtract) {
3348 PL_uid = PerlProc_getuid();
3349 PL_euid = PerlProc_geteuid();
3350 PL_gid = PerlProc_getgid();
3351 PL_egid = PerlProc_getegid();
3353 PL_uid |= PL_gid << 16;
3354 PL_euid |= PL_egid << 16;
3356 PL_tainting |= (PL_uid && (PL_euid != PL_uid || PL_egid != PL_gid));
3360 S_forbid_setid(pTHX_ char *s)
3362 if (PL_euid != PL_uid)
3363 Perl_croak(aTHX_ "No %s allowed while running setuid", s);
3364 if (PL_egid != PL_gid)
3365 Perl_croak(aTHX_ "No %s allowed while running setgid", s);
3369 Perl_init_debugger(pTHX)
3371 HV *ostash = PL_curstash;
3373 PL_curstash = PL_debstash;
3374 PL_dbargs = GvAV(gv_AVadd((gv_fetchpv("args", GV_ADDMULTI, SVt_PVAV))));
3375 AvREAL_off(PL_dbargs);
3376 PL_DBgv = gv_fetchpv("DB", GV_ADDMULTI, SVt_PVGV);
3377 PL_DBline = gv_fetchpv("dbline", GV_ADDMULTI, SVt_PVAV);
3378 PL_DBsub = gv_HVadd(gv_fetchpv("sub", GV_ADDMULTI, SVt_PVHV));
3379 sv_upgrade(GvSV(PL_DBsub), SVt_IV); /* IVX accessed if PERLDB_SUB_NN */
3380 PL_DBsingle = GvSV((gv_fetchpv("single", GV_ADDMULTI, SVt_PV)));
3381 sv_setiv(PL_DBsingle, 0);
3382 PL_DBtrace = GvSV((gv_fetchpv("trace", GV_ADDMULTI, SVt_PV)));
3383 sv_setiv(PL_DBtrace, 0);
3384 PL_DBsignal = GvSV((gv_fetchpv("signal", GV_ADDMULTI, SVt_PV)));
3385 sv_setiv(PL_DBsignal, 0);
3386 PL_curstash = ostash;
3389 #ifndef STRESS_REALLOC
3390 #define REASONABLE(size) (size)
3392 #define REASONABLE(size) (1) /* unreasonable */
3396 Perl_init_stacks(pTHX)
3398 /* start with 128-item stack and 8K cxstack */
3399 PL_curstackinfo = new_stackinfo(REASONABLE(128),
3400 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
3401 PL_curstackinfo->si_type = PERLSI_MAIN;
3402 PL_curstack = PL_curstackinfo->si_stack;
3403 PL_mainstack = PL_curstack; /* remember in case we switch stacks */
3405 PL_stack_base = AvARRAY(PL_curstack);
3406 PL_stack_sp = PL_stack_base;
3407 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
3409 New(50,PL_tmps_stack,REASONABLE(128),SV*);
3412 PL_tmps_max = REASONABLE(128);
3414 New(54,PL_markstack,REASONABLE(32),I32);
3415 PL_markstack_ptr = PL_markstack;
3416 PL_markstack_max = PL_markstack + REASONABLE(32);
3420 New(54,PL_scopestack,REASONABLE(32),I32);
3421 PL_scopestack_ix = 0;
3422 PL_scopestack_max = REASONABLE(32);
3424 New(54,PL_savestack,REASONABLE(128),ANY);
3425 PL_savestack_ix = 0;
3426 PL_savestack_max = REASONABLE(128);
3428 New(54,PL_retstack,REASONABLE(16),OP*);
3430 PL_retstack_max = REASONABLE(16);
3438 while (PL_curstackinfo->si_next)
3439 PL_curstackinfo = PL_curstackinfo->si_next;
3440 while (PL_curstackinfo) {
3441 PERL_SI *p = PL_curstackinfo->si_prev;
3442 /* curstackinfo->si_stack got nuked by sv_free_arenas() */
3443 Safefree(PL_curstackinfo->si_cxstack);
3444 Safefree(PL_curstackinfo);
3445 PL_curstackinfo = p;
3447 Safefree(PL_tmps_stack);
3448 Safefree(PL_markstack);
3449 Safefree(PL_scopestack);
3450 Safefree(PL_savestack);
3451 Safefree(PL_retstack);
3460 lex_start(PL_linestr);
3462 PL_subname = newSVpvn("main",4);
3466 S_init_predump_symbols(pTHX)
3471 sv_setpvn(get_sv("\"", TRUE), " ", 1);
3472 PL_stdingv = gv_fetchpv("STDIN",TRUE, SVt_PVIO);
3473 GvMULTI_on(PL_stdingv);
3474 io = GvIOp(PL_stdingv);
3475 IoTYPE(io) = IoTYPE_RDONLY;
3476 IoIFP(io) = PerlIO_stdin();
3477 tmpgv = gv_fetchpv("stdin",TRUE, SVt_PV);
3479 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3481 tmpgv = gv_fetchpv("STDOUT",TRUE, SVt_PVIO);
3484 IoTYPE(io) = IoTYPE_WRONLY;
3485 IoOFP(io) = IoIFP(io) = PerlIO_stdout();
3487 tmpgv = gv_fetchpv("stdout",TRUE, SVt_PV);
3489 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3491 PL_stderrgv = gv_fetchpv("STDERR",TRUE, SVt_PVIO);
3492 GvMULTI_on(PL_stderrgv);
3493 io = GvIOp(PL_stderrgv);
3494 IoTYPE(io) = IoTYPE_WRONLY;
3495 IoOFP(io) = IoIFP(io) = PerlIO_stderr();
3496 tmpgv = gv_fetchpv("stderr",TRUE, SVt_PV);
3498 GvIOp(tmpgv) = (IO*)SvREFCNT_inc(io);
3500 PL_statname = NEWSV(66,0); /* last filename we did stat on */
3503 Safefree(PL_osname);
3504 PL_osname = savepv(OSNAME);
3508 Perl_init_argv_symbols(pTHX_ register int argc, register char **argv)
3511 argc--,argv++; /* skip name of script */
3512 if (PL_doswitches) {
3513 for (; argc > 0 && **argv == '-'; argc--,argv++) {
3516 if (argv[0][1] == '-' && !argv[0][2]) {
3520 if ((s = strchr(argv[0], '='))) {
3522 sv_setpv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),s);
3525 sv_setiv(GvSV(gv_fetchpv(argv[0]+1,TRUE, SVt_PV)),1);
3528 if ((PL_argvgv = gv_fetchpv("ARGV",TRUE, SVt_PVAV))) {
3529 GvMULTI_on(PL_argvgv);
3530 (void)gv_AVadd(PL_argvgv);
3531 av_clear(GvAVn(PL_argvgv));
3532 for (; argc > 0; argc--,argv++) {
3533 SV *sv = newSVpv(argv[0],0);
3534 av_push(GvAVn(PL_argvgv),sv);
3535 if (PL_widesyscalls)
3536 (void)sv_utf8_decode(sv);
3541 #ifdef HAS_PROCSELFEXE
3542 /* This is a function so that we don't hold on to MAXPATHLEN
3543 bytes of stack longer than necessary
3546 S_procself_val(pTHX_ SV *sv, char *arg0)
3548 char buf[MAXPATHLEN];
3549 int len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
3551 /* On Playstation2 Linux V1.0 (kernel 2.2.1) readlink(/proc/self/exe)
3552 includes a spurious NUL which will cause $^X to fail in system
3553 or backticks (this will prevent extensions from being built and
3554 many tests from working). readlink is not meant to add a NUL.
3555 Normal readlink works fine.
3557 if (len > 0 && buf[len-1] == '\0') {
3561 /* FreeBSD's implementation is acknowledged to be imperfect, sometimes
3562 returning the text "unknown" from the readlink rather than the path
3563 to the executable (or returning an error from the readlink). Any valid
3564 path has a '/' in it somewhere, so use that to validate the result.
3565 See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703
3567 if (len > 0 && memchr(buf, '/', len)) {
3568 sv_setpvn(sv,buf,len);
3574 #endif /* HAS_PROCSELFEXE */
3577 S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register char **env)
3583 PL_toptarget = NEWSV(0,0);
3584 sv_upgrade(PL_toptarget, SVt_PVFM);
3585 sv_setpvn(PL_toptarget, "", 0);
3586 PL_bodytarget = NEWSV(0,0);
3587 sv_upgrade(PL_bodytarget, SVt_PVFM);
3588 sv_setpvn(PL_bodytarget, "", 0);
3589 PL_formtarget = PL_bodytarget;
3593 init_argv_symbols(argc,argv);
3595 if ((tmpgv = gv_fetchpv("0",TRUE, SVt_PV))) {
3596 #ifdef MACOS_TRADITIONAL
3597 /* $0 is not majick on a Mac */
3598 sv_setpv(GvSV(tmpgv),MacPerl_MPWFileName(PL_origfilename));
3600 sv_setpv(GvSV(tmpgv),PL_origfilename);
3601 magicname("0", "0", 1);
3604 if ((tmpgv = gv_fetchpv("\030",TRUE, SVt_PV))) {/* $^X */
3605 #ifdef HAS_PROCSELFEXE
3606 S_procself_val(aTHX_ GvSV(tmpgv), PL_origargv[0]);
3609 sv_setpv(GvSV(tmpgv), os2_execname(aTHX));
3611 sv_setpv(GvSV(tmpgv),PL_origargv[0]);
3615 if ((PL_envgv = gv_fetchpv("ENV",TRUE, SVt_PVHV))) {
3617 GvMULTI_on(PL_envgv);
3618 hv = GvHVn(PL_envgv);
3619 hv_magic(hv, Nullgv, PERL_MAGIC_env);
3620 #ifdef USE_ENVIRON_ARRAY
3621 /* Note that if the supplied env parameter is actually a copy
3622 of the global environ then it may now point to free'd memory
3623 if the environment has been modified since. To avoid this
3624 problem we treat env==NULL as meaning 'use the default'
3629 # ifdef USE_ITHREADS
3630 && PL_curinterp == aTHX
3634 environ[0] = Nullch;
3637 for (; *env; env++) {
3638 if (!(s = strchr(*env,'=')))
3645 sv = newSVpv(s+1, 0);
3646 (void)hv_store(hv, *env, s - *env, sv, 0);
3650 #endif /* USE_ENVIRON_ARRAY */
3653 if ((tmpgv = gv_fetchpv("$",TRUE, SVt_PV))) {
3654 SvREADONLY_off(GvSV(tmpgv));
3655 sv_setiv(GvSV(tmpgv), (IV)PerlProc_getpid());
3656 SvREADONLY_on(GvSV(tmpgv));
3658 #ifdef THREADS_HAVE_PIDS
3659 PL_ppid = (IV)getppid();
3662 /* touch @F array to prevent spurious warnings 20020415 MJD */
3664 (void) get_av("main::F", TRUE | GV_ADDMULTI);
3666 /* touch @- and @+ arrays to prevent spurious warnings 20020415 MJD */
3667 (void) get_av("main::-", TRUE | GV_ADDMULTI);
3668 (void) get_av("main::+", TRUE | GV_ADDMULTI);
3672 S_init_perllib(pTHX)
3677 s = PerlEnv_getenv("PERL5LIB");
3679 incpush(s, TRUE, TRUE);
3681 incpush(PerlEnv_getenv("PERLLIB"), FALSE, FALSE);
3683 /* Treat PERL5?LIB as a possible search list logical name -- the
3684 * "natural" VMS idiom for a Unix path string. We allow each
3685 * element to be a set of |-separated directories for compatibility.
3689 if (my_trnlnm("PERL5LIB",buf,0))
3690 do { incpush(buf,TRUE,TRUE); } while (my_trnlnm("PERL5LIB",buf,++idx));
3692 while (my_trnlnm("PERLLIB",buf,idx++)) incpush(buf,FALSE,FALSE);
3696 /* Use the ~-expanded versions of APPLLIB (undocumented),
3697 ARCHLIB PRIVLIB SITEARCH SITELIB VENDORARCH and VENDORLIB
3700 incpush(APPLLIB_EXP, TRUE, TRUE);
3704 incpush(ARCHLIB_EXP, FALSE, FALSE);
3706 #ifdef MACOS_TRADITIONAL
3709 SV * privdir = NEWSV(55, 0);
3710 char * macperl = PerlEnv_getenv("MACPERL");
3715 Perl_sv_setpvf(aTHX_ privdir, "%slib:", macperl);
3716 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3717 incpush(SvPVX(privdir), TRUE, FALSE);
3718 Perl_sv_setpvf(aTHX_ privdir, "%ssite_perl:", macperl);
3719 if (PerlLIO_stat(SvPVX(privdir), &tmpstatbuf) >= 0 && S_ISDIR(tmpstatbuf.st_mode))
3720 incpush(SvPVX(privdir), TRUE, FALSE);
3722 SvREFCNT_dec(privdir);
3725 incpush(":", FALSE, FALSE);
3728 # define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
3731 incpush(PRIVLIB_EXP, TRUE, FALSE);
3733 incpush(PRIVLIB_EXP, FALSE, FALSE);
3737 /* sitearch is always relative to sitelib on Windows for
3738 * DLL-based path intuition to work correctly */
3739 # if !defined(WIN32)
3740 incpush(SITEARCH_EXP, FALSE, FALSE);
3746 incpush(SITELIB_EXP, TRUE, FALSE); /* this picks up sitearch as well */
3748 incpush(SITELIB_EXP, FALSE, FALSE);
3752 #ifdef SITELIB_STEM /* Search for version-specific dirs below here */
3753 incpush(SITELIB_STEM, FALSE, TRUE);
3756 #ifdef PERL_VENDORARCH_EXP
3757 /* vendorarch is always relative to vendorlib on Windows for
3758 * DLL-based path intuition to work correctly */
3759 # if !defined(WIN32)
3760 incpush(PERL_VENDORARCH_EXP, FALSE, FALSE);
3764 #ifdef PERL_VENDORLIB_EXP
3766 incpush(PERL_VENDORLIB_EXP, TRUE, FALSE); /* this picks up vendorarch as well */
3768 incpush(PERL_VENDORLIB_EXP, FALSE, FALSE);
3772 #ifdef PERL_VENDORLIB_STEM /* Search for version-specific dirs below here */
3773 incpush(PERL_VENDORLIB_STEM, FALSE, TRUE);
3776 #ifdef PERL_OTHERLIBDIRS
3777 incpush(PERL_OTHERLIBDIRS, TRUE, TRUE);
3781 incpush(".", FALSE, FALSE);
3782 #endif /* MACOS_TRADITIONAL */
3785 #if defined(DOSISH) || defined(EPOC)
3786 # define PERLLIB_SEP ';'
3789 # define PERLLIB_SEP '|'
3791 # if defined(MACOS_TRADITIONAL)
3792 # define PERLLIB_SEP ','
3794 # define PERLLIB_SEP ':'
3798 #ifndef PERLLIB_MANGLE
3799 # define PERLLIB_MANGLE(s,n) (s)
3803 S_incpush(pTHX_ char *p, int addsubdirs, int addoldvers)
3805 SV *subdir = Nullsv;
3810 if (addsubdirs || addoldvers) {
3811 subdir = sv_newmortal();
3814 /* Break at all separators */
3816 SV *libdir = NEWSV(55,0);
3819 /* skip any consecutive separators */
3820 while ( *p == PERLLIB_SEP ) {
3821 /* Uncomment the next line for PATH semantics */
3822 /* av_push(GvAVn(PL_incgv), newSVpvn(".", 1)); */
3826 if ( (s = strchr(p, PERLLIB_SEP)) != Nullch ) {
3827 sv_setpvn(libdir, PERLLIB_MANGLE(p, (STRLEN)(s - p)),
3832 sv_setpv(libdir, PERLLIB_MANGLE(p, 0));
3833 p = Nullch; /* break out */
3835 #ifdef MACOS_TRADITIONAL
3836 if (!strchr(SvPVX(libdir), ':')) {
3839 sv_setpv(libdir, MacPerl_CanonDir(SvPVX(libdir), buf, 0));
3841 if (SvPVX(libdir)[SvCUR(libdir)-1] != ':')
3842 sv_catpv(libdir, ":");
3846 * BEFORE pushing libdir onto @INC we may first push version- and
3847 * archname-specific sub-directories.
3849 if (addsubdirs || addoldvers) {
3850 #ifdef PERL_INC_VERSION_LIST
3851 /* Configure terminates PERL_INC_VERSION_LIST with a NULL */
3852 const char *incverlist[] = { PERL_INC_VERSION_LIST };
3853 const char **incver;
3860 if ((unix = tounixspec_ts(SvPV(libdir,len),Nullch)) != Nullch) {
3862 while (unix[len-1] == '/') len--; /* Cosmetic */
3863 sv_usepvn(libdir,unix,len);
3866 PerlIO_printf(Perl_error_log,
3867 "Failed to unixify @INC element \"%s\"\n",
3871 #ifdef MACOS_TRADITIONAL
3872 #define PERL_AV_SUFFIX_FMT ""
3873 #define PERL_ARCH_FMT "%s:"
3874 #define PERL_ARCH_FMT_PATH PERL_FS_VER_FMT PERL_AV_SUFFIX_FMT
3876 #define PERL_AV_SUFFIX_FMT "/"
3877 #define PERL_ARCH_FMT "/%s"
3878 #define PERL_ARCH_FMT_PATH PERL_AV_SUFFIX_FMT PERL_FS_VER_FMT
3880 /* .../version/archname if -d .../version/archname */
3881 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH PERL_ARCH_FMT,
3883 (int)PERL_REVISION, (int)PERL_VERSION,
3884 (int)PERL_SUBVERSION, ARCHNAME);
3885 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3886 S_ISDIR(tmpstatbuf.st_mode))
3887 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3889 /* .../version if -d .../version */
3890 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT_PATH, libdir,
3891 (int)PERL_REVISION, (int)PERL_VERSION,
3892 (int)PERL_SUBVERSION);
3893 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3894 S_ISDIR(tmpstatbuf.st_mode))
3895 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3897 /* .../archname if -d .../archname */
3898 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, ARCHNAME);
3899 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3900 S_ISDIR(tmpstatbuf.st_mode))
3901 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3904 #ifdef PERL_INC_VERSION_LIST
3906 for (incver = incverlist; *incver; incver++) {
3907 /* .../xxx if -d .../xxx */
3908 Perl_sv_setpvf(aTHX_ subdir, "%"SVf PERL_ARCH_FMT, libdir, *incver);
3909 if (PerlLIO_stat(SvPVX(subdir), &tmpstatbuf) >= 0 &&
3910 S_ISDIR(tmpstatbuf.st_mode))
3911 av_push(GvAVn(PL_incgv), newSVsv(subdir));
3917 /* finally push this lib directory on the end of @INC */
3918 av_push(GvAVn(PL_incgv), libdir);
3922 #ifdef USE_5005THREADS
3923 STATIC struct perl_thread *
3924 S_init_main_thread(pTHX)
3926 #if !defined(PERL_IMPLICIT_CONTEXT)
3927 struct perl_thread *thr;
3931 Newz(53, thr, 1, struct perl_thread);
3932 PL_curcop = &PL_compiling;
3933 thr->interp = PERL_GET_INTERP;
3934 thr->cvcache = newHV();
3935 thr->threadsv = newAV();
3936 /* thr->threadsvp is set when find_threadsv is called */
3937 thr->specific = newAV();
3938 thr->flags = THRf_R_JOINABLE;
3939 MUTEX_INIT(&thr->mutex);
3940 /* Handcraft thrsv similarly to mess_sv */
3941 New(53, PL_thrsv, 1, SV);
3942 Newz(53, xpv, 1, XPV);
3943 SvFLAGS(PL_thrsv) = SVt_PV;
3944 SvANY(PL_thrsv) = (void*)xpv;
3945 SvREFCNT(PL_thrsv) = 1 << 30; /* practically infinite */
3946 SvPVX(PL_thrsv) = (char*)thr;
3947 SvCUR_set(PL_thrsv, sizeof(thr));
3948 SvLEN_set(PL_thrsv, sizeof(thr));
3949 *SvEND(PL_thrsv) = '\0'; /* in the trailing_nul field */
3950 thr->oursv = PL_thrsv;
3951 PL_chopset = " \n-";
3954 MUTEX_LOCK(&PL_threads_mutex);
3960 MUTEX_UNLOCK(&PL_threads_mutex);
3962 #ifdef HAVE_THREAD_INTERN
3963 Perl_init_thread_intern(thr);
3966 #ifdef SET_THREAD_SELF
3967 SET_THREAD_SELF(thr);
3969 thr->self = pthread_self();
3970 #endif /* SET_THREAD_SELF */
3974 * These must come after the thread self setting
3975 * because sv_setpvn does SvTAINT and the taint
3976 * fields thread selfness being set.
3978 PL_toptarget = NEWSV(0,0);
3979 sv_upgrade(PL_toptarget, SVt_PVFM);
3980 sv_setpvn(PL_toptarget, "", 0);
3981 PL_bodytarget = NEWSV(0,0);
3982 sv_upgrade(PL_bodytarget, SVt_PVFM);
3983 sv_setpvn(PL_bodytarget, "", 0);
3984 PL_formtarget = PL_bodytarget;
3985 thr->errsv = newSVpvn("", 0);
3986 (void) find_threadsv("@"); /* Ensure $@ is initialised early */
3989 PL_peepp = MEMBER_TO_FPTR(Perl_peep);
3990 PL_regcompp = MEMBER_TO_FPTR(Perl_pregcomp);
3991 PL_regexecp = MEMBER_TO_FPTR(Perl_regexec_flags);
3992 PL_regint_start = MEMBER_TO_FPTR(Perl_re_intuit_start);
3993 PL_regint_string = MEMBER_TO_FPTR(Perl_re_intuit_string);
3994 PL_regfree = MEMBER_TO_FPTR(Perl_pregfree);
3996 PL_reginterp_cnt = 0;
4000 #endif /* USE_5005THREADS */
4003 Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
4006 line_t oldline = CopLINE(PL_curcop);
4012 while (AvFILL(paramList) >= 0) {
4013 cv = (CV*)av_shift(paramList);
4015 if (paramList == PL_beginav) {
4016 /* save PL_beginav for compiler */
4017 if (! PL_beginav_save)
4018 PL_beginav_save = newAV();
4019 av_push(PL_beginav_save, (SV*)cv);
4021 else if (paramList == PL_checkav) {
4022 /* save PL_checkav for compiler */
4023 if (! PL_checkav_save)
4024 PL_checkav_save = newAV();
4025 av_push(PL_checkav_save, (SV*)cv);
4030 #ifdef PERL_FLEXIBLE_EXCEPTIONS
4031 CALLPROTECT(aTHX_ pcur_env, &ret, MEMBER_TO_FPTR(S_vcall_list_body), cv);
4037 #ifndef PERL_FLEXIBLE_EXCEPTIONS
4041 (void)SvPV(atsv, len);
4044 PL_curcop = &PL_compiling;
4045 CopLINE_set(PL_curcop, oldline);
4046 if (paramList == PL_beginav)
4047 sv_catpv(atsv, "BEGIN failed--compilation aborted");
4049 Perl_sv_catpvf(aTHX_ atsv,
4050 "%s failed--call queue aborted",
4051 paramList == PL_checkav ? "CHECK"
4052 : paramList == PL_initav ? "INIT"
4054 while (PL_scopestack_ix > oldscope)
4057 Perl_croak(aTHX_ "%s", SvPVx(atsv, n_a));
4064 /* my_exit() was called */
4065 while (PL_scopestack_ix > oldscope)
4068 PL_curstash = PL_defstash;
4069 PL_curcop = &PL_compiling;
4070 CopLINE_set(PL_curcop, oldline);
4072 if (PL_statusvalue && !(PL_exit_flags & PERL_EXIT_EXPECTED)) {
4073 if (paramList == PL_beginav)
4074 Perl_croak(aTHX_ "BEGIN failed--compilation aborted");
4076 Perl_croak(aTHX_ "%s failed--call queue aborted",
4077 paramList == PL_checkav ? "CHECK"
4078 : paramList == PL_initav ? "INIT"
4085 PL_curcop = &PL_compiling;
4086 CopLINE_set(PL_curcop, oldline);
4089 PerlIO_printf(Perl_error_log, "panic: restartop\n");
4097 #ifdef PERL_FLEXIBLE_EXCEPTIONS
4099 S_vcall_list_body(pTHX_ va_list args)
4101 CV *cv = va_arg(args, CV*);
4102 return call_list_body(cv);
4107 S_call_list_body(pTHX_ CV *cv)
4109 PUSHMARK(PL_stack_sp);
4110 call_sv((SV*)cv, G_EVAL|G_DISCARD);
4115 Perl_my_exit(pTHX_ U32 status)
4117 DEBUG_S(PerlIO_printf(Perl_debug_log, "my_exit: thread %p, status %lu\n",
4118 thr, (unsigned long) status));
4127 STATUS_NATIVE_SET(status);
4134 Perl_my_failure_exit(pTHX)
4137 if (vaxc$errno & 1) {
4138 if (STATUS_NATIVE & 1) /* fortuitiously includes "-1" */
4139 STATUS_NATIVE_SET(44);
4142 if (!vaxc$errno && errno) /* unlikely */
4143 STATUS_NATIVE_SET(44);
4145 STATUS_NATIVE_SET(vaxc$errno);
4150 STATUS_POSIX_SET(errno);
4152 exitstatus = STATUS_POSIX >> 8;
4153 if (exitstatus & 255)
4154 STATUS_POSIX_SET(exitstatus);
4156 STATUS_POSIX_SET(255);
4163 S_my_exit_jump(pTHX)
4165 register PERL_CONTEXT *cx;
4170 SvREFCNT_dec(PL_e_script);
4171 PL_e_script = Nullsv;
4174 POPSTACK_TO(PL_mainstack);
4175 if (cxstack_ix >= 0) {
4178 POPBLOCK(cx,PL_curpm);
4186 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen)
4189 p = SvPVX(PL_e_script);
4190 nl = strchr(p, '\n');
4191 nl = (nl) ? nl+1 : SvEND(PL_e_script);
4193 filter_del(read_e_script);
4196 sv_catpvn(buf_sv, p, nl-p);
4197 sv_chop(PL_e_script, nl);