This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
perlvar - expand and link to ${^OPEN} documentation
[perl5.git] / perl.c
CommitLineData
4b88f280 1#line 2 "perl.c"
a0d0e21e
LW
2/* perl.c
3 *
737f4459 4 * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
2eee27d7 5 * 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
b28d5df5 6 * 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Larry Wall and others
a687059c 7 *
352d5a3a
LW
8 * You may distribute under the terms of either the GNU General Public
9 * License or the Artistic License, as specified in the README file.
a687059c 10 *
8d063cd8
LW
11 */
12
a0d0e21e 13/*
4ac71550
TC
14 * A ship then new they built for him
15 * of mithril and of elven-glass
cdad3b53 16 * --from Bilbo's song of EƤrendil
4ac71550
TC
17 *
18 * [p.236 of _The Lord of the Rings_, II/i: "Many Meetings"]
a0d0e21e 19 */
45d8adaa 20
166f8a29
DM
21/* This file contains the top-level functions that are used to create, use
22 * and destroy a perl interpreter, plus the functions used by XS code to
23 * call back into perl. Note that it does not contain the actual main()
ddfa107c 24 * function of the interpreter; that can be found in perlmain.c
a1b69980
DM
25 *
26 * Note that at build time this file is also linked to as perlmini.c,
27 * and perlmini.o is then built with PERL_IS_MINIPERL defined, which is
28 * then used to create the miniperl executable, rather than perl.o.
166f8a29
DM
29 */
30
c44493f1 31#if defined(PERL_IS_MINIPERL) && !defined(USE_SITECUSTOMIZE)
43c0c913
NC
32# define USE_SITECUSTOMIZE
33#endif
34
378cc40b 35#include "EXTERN.h"
864dbfa3 36#define PERL_IN_PERL_C
378cc40b 37#include "perl.h"
e3321bb0 38#include "patchlevel.h" /* for local_patches */
4a5df386 39#include "XSUB.h"
378cc40b 40
011f1a1a
JH
41#ifdef NETWARE
42#include "nwutil.h"
011f1a1a
JH
43#endif
44
2aa47728 45#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
bf357333
NC
46# ifdef I_SYSUIO
47# include <sys/uio.h>
48# endif
49
50union control_un {
51 struct cmsghdr cm;
52 char control[CMSG_SPACE(sizeof(int))];
53};
54
2aa47728
NC
55#endif
56
5311654c
JH
57#ifndef HZ
58# ifdef CLK_TCK
59# define HZ CLK_TCK
60# else
61# define HZ 60
62# endif
63#endif
64
acfe0abc 65static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
0cb96387 66
cc69b689 67#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
b24bc095 68# define validate_suid(rsfp) NOOP
cc69b689 69#else
b24bc095 70# define validate_suid(rsfp) S_validate_suid(aTHX_ rsfp)
a687059c 71#endif
8d063cd8 72
d6f07c05
AL
73#define CALL_BODY_SUB(myop) \
74 if (PL_op == (myop)) \
139d0ce6 75 PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); \
d6f07c05
AL
76 if (PL_op) \
77 CALLRUNOPS(aTHX);
78
79#define CALL_LIST_BODY(cv) \
80 PUSHMARK(PL_stack_sp); \
9a8aa25b 81 call_sv(MUTABLE_SV((cv)), G_EVAL|G_DISCARD|G_VOID);
d6f07c05 82
e6827a76 83static void
daa7d858 84S_init_tls_and_interp(PerlInterpreter *my_perl)
e6827a76 85{
27da23d5 86 dVAR;
e6827a76
NC
87 if (!PL_curinterp) {
88 PERL_SET_INTERP(my_perl);
3db8f154 89#if defined(USE_ITHREADS)
e6827a76
NC
90 INIT_THREADS;
91 ALLOC_THREAD_KEY;
92 PERL_SET_THX(my_perl);
93 OP_REFCNT_INIT;
e8570548 94 OP_CHECK_MUTEX_INIT;
1e5c5f69 95 KEYWORD_PLUGIN_MUTEX_INIT;
71ad1b0c 96 HINTS_REFCNT_INIT;
929e1213 97 LOCALE_INIT;
8310e7fa 98 USER_PROP_MUTEX_INIT;
2bc5f86a 99 ENV_INIT;
e6827a76 100 MUTEX_INIT(&PL_dollarzero_mutex);
016af4f1
DM
101 MUTEX_INIT(&PL_my_ctx_mutex);
102# endif
e6827a76 103 }
c0bce9aa
NC
104#if defined(USE_ITHREADS)
105 else
106#else
107 /* This always happens for non-ithreads */
108#endif
109 {
e6827a76
NC
110 PERL_SET_THX(my_perl);
111 }
112}
06d86050 113
cbec8ebe
DM
114
115/* these implement the PERL_SYS_INIT, PERL_SYS_INIT3, PERL_SYS_TERM macros */
116
117void
118Perl_sys_init(int* argc, char*** argv)
119{
4fc0badb 120 dVAR;
7918f24d
NC
121
122 PERL_ARGS_ASSERT_SYS_INIT;
123
cbec8ebe
DM
124 PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */
125 PERL_UNUSED_ARG(argv);
126 PERL_SYS_INIT_BODY(argc, argv);
127}
128
129void
130Perl_sys_init3(int* argc, char*** argv, char*** env)
131{
4fc0badb 132 dVAR;
7918f24d
NC
133
134 PERL_ARGS_ASSERT_SYS_INIT3;
135
cbec8ebe
DM
136 PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */
137 PERL_UNUSED_ARG(argv);
138 PERL_UNUSED_ARG(env);
139 PERL_SYS_INIT3_BODY(argc, argv, env);
140}
141
142void
88772978 143Perl_sys_term(void)
cbec8ebe 144{
4fc0badb 145 dVAR;
bf81751b
DM
146 if (!PL_veto_cleanup) {
147 PERL_SYS_TERM_BODY();
148 }
cbec8ebe
DM
149}
150
151
32e30700
GS
152#ifdef PERL_IMPLICIT_SYS
153PerlInterpreter *
7766f137
GS
154perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
155 struct IPerlMem* ipMP, struct IPerlEnv* ipE,
32e30700
GS
156 struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
157 struct IPerlDir* ipD, struct IPerlSock* ipS,
158 struct IPerlProc* ipP)
159{
160 PerlInterpreter *my_perl;
7918f24d
NC
161
162 PERL_ARGS_ASSERT_PERL_ALLOC_USING;
163
9f653bb5 164 /* Newx() needs interpreter, so call malloc() instead */
32e30700 165 my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
e6827a76 166 S_init_tls_and_interp(my_perl);
32e30700
GS
167 Zero(my_perl, 1, PerlInterpreter);
168 PL_Mem = ipM;
7766f137
GS
169 PL_MemShared = ipMS;
170 PL_MemParse = ipMP;
32e30700
GS
171 PL_Env = ipE;
172 PL_StdIO = ipStd;
173 PL_LIO = ipLIO;
174 PL_Dir = ipD;
175 PL_Sock = ipS;
176 PL_Proc = ipP;
7cb608b5 177 INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl);
7766f137 178
32e30700
GS
179 return my_perl;
180}
181#else
954c1994
GS
182
183/*
ccfc67b7
JH
184=head1 Embedding Functions
185
954c1994
GS
186=for apidoc perl_alloc
187
188Allocates a new Perl interpreter. See L<perlembed>.
189
190=cut
191*/
192
93a17b20 193PerlInterpreter *
cea2e8a9 194perl_alloc(void)
79072805 195{
cea2e8a9 196 PerlInterpreter *my_perl;
79072805 197
9f653bb5 198 /* Newx() needs interpreter, so call malloc() instead */
e8ee3774 199 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
ba869deb 200
e6827a76 201 S_init_tls_and_interp(my_perl);
7cb608b5 202#ifndef PERL_TRACK_MEMPOOL
07409e01 203 return (PerlInterpreter *) ZeroD(my_perl, 1, PerlInterpreter);
7cb608b5
NC
204#else
205 Zero(my_perl, 1, PerlInterpreter);
206 INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl);
207 return my_perl;
208#endif
79072805 209}
32e30700 210#endif /* PERL_IMPLICIT_SYS */
79072805 211
954c1994
GS
212/*
213=for apidoc perl_construct
214
215Initializes a new Perl interpreter. See L<perlembed>.
216
217=cut
218*/
219
79072805 220void
0cb96387 221perl_construct(pTHXx)
79072805 222{
27da23d5 223 dVAR;
7918f24d
NC
224
225 PERL_ARGS_ASSERT_PERL_CONSTRUCT;
226
8990e307 227#ifdef MULTIPLICITY
54aff467 228 init_interp();
ac27b0f5 229 PL_perl_destruct_level = 1;
54aff467 230#else
7918f24d 231 PERL_UNUSED_ARG(my_perl);
54aff467
GS
232 if (PL_perl_destruct_level > 0)
233 init_interp();
234#endif
34caed6d
DM
235 PL_curcop = &PL_compiling; /* needed by ckWARN, right away */
236
75d476e2
S
237#ifdef PERL_TRACE_OPS
238 Zero(PL_op_exec_cnt, OP_max+2, UV);
239#endif
240
0d96b528 241 init_constants();
34caed6d 242
e04fc1aa
CB
243 SvREADONLY_on(&PL_sv_placeholder);
244 SvREFCNT(&PL_sv_placeholder) = SvREFCNT_IMMORTAL;
245
dc37125b
DM
246 PL_sighandlerp = Perl_sighandler;
247 PL_sighandler1p = Perl_sighandler1;
248 PL_sighandler3p = Perl_sighandler3;
249
e04fc1aa
CB
250#ifdef PERL_USES_PL_PIDSTATUS
251 PL_pidstatus = newHV();
252#endif
253
254 PL_rs = newSVpvs("\n");
255
256 init_stacks();
257
258/* The PERL_INTERNAL_RAND_SEED set-up must be after init_stacks because it calls
259 * things that may put SVs on the stack.
260 */
261
d6295071 262#ifdef NO_PERL_INTERNAL_RAND_SEED
f26b33bd 263 Perl_drand48_init_r(&PL_internal_random_state, seed());
d6295071
TC
264#else
265 {
266 UV seed;
267 const char *env_pv;
268 if (PerlProc_getuid() != PerlProc_geteuid() ||
269 PerlProc_getgid() != PerlProc_getegid() ||
270 !(env_pv = PerlEnv_getenv("PERL_INTERNAL_RAND_SEED")) ||
271 grok_number(env_pv, strlen(env_pv), &seed) != IS_NUMBER_IN_UV) {
272 seed = seed();
273 }
274 Perl_drand48_init_r(&PL_internal_random_state, (U32)seed);
275 }
276#endif
f26b33bd 277
748a9306 278 init_ids();
a5f75d66 279
312caa8e 280 JMPENV_BOOTSTRAP;
f86702cc 281 STATUS_ALL_SUCCESS;
282
95e064d9 283 init_uniprops();
8c90d3a9
KW
284 (void) uvchr_to_utf8_flags((U8 *) PL_TR_SPECIAL_HANDLING_UTF8,
285 TR_SPECIAL_HANDLING,
286 UNICODE_ALLOW_ABOVE_IV_MAX);
0b5b802d 287
ab821d7f 288#if defined(LOCAL_PATCH_COUNT)
3280af22 289 PL_localpatches = local_patches; /* For possible -v */
ab821d7f 290#endif
291
fa2e4594
TC
292#if defined(LIBM_LIB_VERSION)
293 /*
294 * Some BSDs and Cygwin default to POSIX math instead of IEEE.
295 * This switches them over to IEEE.
296 */
297 _LIB_VERSION = _IEEE_;
298#endif
299
52853b95
GS
300#ifdef HAVE_INTERP_INTERN
301 sys_intern_init();
302#endif
303
3a1ee7e8 304 PerlIO_init(aTHX); /* Hook to IO system */
760ac839 305
3280af22
NIS
306 PL_fdpid = newAV(); /* for remembering popen pids by fd */
307 PL_modglobal = newHV(); /* pointers to per-interpreter module globals */
396482e1 308 PL_errors = newSVpvs("");
854da30f
YO
309 SvPVCLEAR(PERL_DEBUG_PAD(0)); /* For regex debugging. */
310 SvPVCLEAR(PERL_DEBUG_PAD(1)); /* ext/re needs these */
311 SvPVCLEAR(PERL_DEBUG_PAD(2)); /* even without DEBUGGING. */
1fcf4c12 312#ifdef USE_ITHREADS
402d2eb1
NC
313 /* First entry is a list of empty elements. It needs to be initialised
314 else all hell breaks loose in S_find_uninit_var(). */
315 Perl_av_create_and_push(aTHX_ &PL_regex_padav, newSVpvs(""));
13137afc 316 PL_regex_pad = AvARRAY(PL_regex_padav);
d4d03940 317 Newxz(PL_stashpad, PL_stashpadmax, HV *);
1fcf4c12 318#endif
e5dd39fc 319#ifdef USE_REENTRANT_API
59bd0823 320 Perl_reentrant_init(aTHX);
e5dd39fc 321#endif
e6a172f3 322 if (PL_hash_seed_set == FALSE) {
9d5e3f1a
YO
323 /* Initialize the hash seed and state at startup. This must be
324 * done very early, before ANY hashes are constructed, and once
325 * setup is fixed for the lifetime of the process.
326 *
327 * If you decide to disable the seeding process you should choose
328 * a suitable seed yourself and define PERL_HASH_SEED to a well chosen
329 * string. See hv_func.h for details.
330 */
1a237f4f 331#if defined(USE_HASH_SEED)
9d5e3f1a 332 /* get the hash seed from the environment or from an RNG */
7dc86639 333 Perl_get_hash_seed(aTHX_ PL_hash_seed);
1a237f4f 334#else
9d5e3f1a
YO
335 /* they want a hard coded seed, check that it is long enough */
336 assert( strlen(PERL_HASH_SEED) >= PERL_HASH_SEED_BYTES );
1a237f4f 337#endif
e6a172f3 338
9d5e3f1a
YO
339 /* now we use the chosen seed to initialize the state -
340 * in some configurations this may be a relatively speaking
341 * expensive operation, but we only have to do it once at startup */
342 PERL_HASH_SEED_STATE(PERL_HASH_SEED,PL_hash_state);
343
344#ifdef PERL_USE_SINGLE_CHAR_HASH_CACHE
345 /* we can build a special cache for 0/1 byte keys, if people choose
346 * I suspect most of the time it is not worth it */
347 {
348 char str[2]="\0";
349 int i;
350 for (i=0;i<256;i++) {
351 str[0]= i;
352 PERL_HASH_WITH_STATE(PL_hash_state,PL_hash_chars[i],str,1);
353 }
354 PERL_HASH_WITH_STATE(PL_hash_state,PL_hash_chars[256],str,0);
355 }
356#endif
357 /* at this point we have initialezed the hash function, and we can start
358 * constructing hashes */
359 PL_hash_seed_set= TRUE;
360 }
c82f4881
N
361
362 /* Allow PL_strtab to be pre-initialized before calling perl_construct.
363 * can use a custom optimized PL_strtab hash before calling perl_construct */
364 if (!PL_strtab) {
365 /* Note that strtab is a rather special HV. Assumptions are made
366 about not iterating on it, and not adding tie magic to it.
367 It is properly deallocated in perl_destruct() */
368 PL_strtab = newHV();
369
370 /* SHAREKEYS tells us that the hash has its keys shared with PL_strtab,
371 * which is not the case with PL_strtab itself */
372 HvSHAREKEYS_off(PL_strtab); /* mandatory */
373 hv_ksplit(PL_strtab, 1 << 11);
374 }
3d47000e 375
a38ab475
RZ
376 Zero(PL_sv_consts, SV_CONSTS_COUNT, SV*);
377
2f42fcb0
JH
378#ifndef PERL_MICRO
379# ifdef USE_ENVIRON_ARRAY
0631ea03 380 PL_origenviron = environ;
2f42fcb0 381# endif
0631ea03
AB
382#endif
383
5311654c 384 /* Use sysconf(_SC_CLK_TCK) if available, if not
dbc1d986 385 * available or if the sysconf() fails, use the HZ.
27da23d5
JH
386 * The HZ if not originally defined has been by now
387 * been defined as CLK_TCK, if available. */
b6c36746 388#if defined(HAS_SYSCONF) && defined(_SC_CLK_TCK)
5311654c
JH
389 PL_clocktick = sysconf(_SC_CLK_TCK);
390 if (PL_clocktick <= 0)
391#endif
392 PL_clocktick = HZ;
393
081fc587
AB
394 PL_stashcache = newHV();
395
e8e3635e 396 PL_patchlevel = newSVpvs("v" PERL_VERSION_STRING);
d7aa5382 397
27da23d5
JH
398#ifdef HAS_MMAP
399 if (!PL_mmap_page_size) {
400#if defined(HAS_SYSCONF) && (defined(_SC_PAGESIZE) || defined(_SC_MMAP_PAGE_SIZE))
401 {
402 SETERRNO(0, SS_NORMAL);
403# ifdef _SC_PAGESIZE
404 PL_mmap_page_size = sysconf(_SC_PAGESIZE);
405# else
406 PL_mmap_page_size = sysconf(_SC_MMAP_PAGE_SIZE);
407# endif
408 if ((long) PL_mmap_page_size < 0) {
f63f4036
Z
409 Perl_croak(aTHX_ "panic: sysconf: %s",
410 errno ? Strerror(errno) : "pagesize unknown");
27da23d5
JH
411 }
412 }
39bb759e 413#elif defined(HAS_GETPAGESIZE)
27da23d5 414 PL_mmap_page_size = getpagesize();
39bb759e 415#elif defined(I_SYS_PARAM) && defined(PAGESIZE)
27da23d5 416 PL_mmap_page_size = PAGESIZE; /* compiletime, bad */
27da23d5
JH
417#endif
418 if (PL_mmap_page_size <= 0)
419 Perl_croak(aTHX_ "panic: bad pagesize %" IVdf,
420 (IV) PL_mmap_page_size);
421 }
422#endif /* HAS_MMAP */
423
424#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
425 PL_timesbase.tms_utime = 0;
426 PL_timesbase.tms_stime = 0;
427 PL_timesbase.tms_cutime = 0;
428 PL_timesbase.tms_cstime = 0;
429#endif
430
7d113631
NC
431 PL_osname = Perl_savepvn(aTHX_ STR_WITH_LEN(OSNAME));
432
a3e6e81e 433 PL_registered_mros = newHV();
9e169432
NC
434 /* Start with 1 bucket, for DFS. It's unlikely we'll need more. */
435 HvMAX(PL_registered_mros) = 0;
a3e6e81e 436
39e69e77 437#ifdef USE_POSIX_2008_LOCALE
6ebbc862
KW
438 PL_C_locale_obj = newlocale(LC_ALL_MASK, "C", NULL);
439#endif
7b8dd5f4 440
8990e307 441 ENTER;
cb3fd6ac 442 init_i18nl10n(1);
79072805
LW
443}
444
954c1994 445/*
62375a60
NIS
446=for apidoc nothreadhook
447
448Stub that provides thread hook for perl_destruct when there are
449no threads.
450
451=cut
452*/
453
454int
4e9e3734 455Perl_nothreadhook(pTHX)
62375a60 456{
96a5add6 457 PERL_UNUSED_CONTEXT;
62375a60
NIS
458 return 0;
459}
460
41e4abd8
NC
461#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
462void
463Perl_dump_sv_child(pTHX_ SV *sv)
464{
465 ssize_t got;
bf357333
NC
466 const int sock = PL_dumper_fd;
467 const int debug_fd = PerlIO_fileno(Perl_debug_log);
bf357333
NC
468 union control_un control;
469 struct msghdr msg;
808ad2d0 470 struct iovec vec[2];
bf357333 471 struct cmsghdr *cmptr;
808ad2d0
NC
472 int returned_errno;
473 unsigned char buffer[256];
41e4abd8 474
7918f24d
NC
475 PERL_ARGS_ASSERT_DUMP_SV_CHILD;
476
bf357333 477 if(sock == -1 || debug_fd == -1)
41e4abd8
NC
478 return;
479
480 PerlIO_flush(Perl_debug_log);
481
bf357333
NC
482 /* All these shenanigans are to pass a file descriptor over to our child for
483 it to dump out to. We can't let it hold open the file descriptor when it
484 forks, as the file descriptor it will dump to can turn out to be one end
485 of pipe that some other process will wait on for EOF. (So as it would
b293a5f8 486 be open, the wait would be forever.) */
bf357333
NC
487
488 msg.msg_control = control.control;
489 msg.msg_controllen = sizeof(control.control);
490 /* We're a connected socket so we don't need a destination */
491 msg.msg_name = NULL;
492 msg.msg_namelen = 0;
493 msg.msg_iov = vec;
808ad2d0 494 msg.msg_iovlen = 1;
bf357333
NC
495
496 cmptr = CMSG_FIRSTHDR(&msg);
497 cmptr->cmsg_len = CMSG_LEN(sizeof(int));
498 cmptr->cmsg_level = SOL_SOCKET;
499 cmptr->cmsg_type = SCM_RIGHTS;
500 *((int *)CMSG_DATA(cmptr)) = 1;
501
502 vec[0].iov_base = (void*)&sv;
503 vec[0].iov_len = sizeof(sv);
504 got = sendmsg(sock, &msg, 0);
41e4abd8
NC
505
506 if(got < 0) {
bf357333 507 perror("Debug leaking scalars parent sendmsg failed");
41e4abd8
NC
508 abort();
509 }
bf357333
NC
510 if(got < sizeof(sv)) {
511 perror("Debug leaking scalars parent short sendmsg");
41e4abd8
NC
512 abort();
513 }
514
808ad2d0
NC
515 /* Return protocol is
516 int: errno value
517 unsigned char: length of location string (0 for empty)
518 unsigned char*: string (not terminated)
519 */
520 vec[0].iov_base = (void*)&returned_errno;
521 vec[0].iov_len = sizeof(returned_errno);
522 vec[1].iov_base = buffer;
523 vec[1].iov_len = 1;
524
525 got = readv(sock, vec, 2);
41e4abd8
NC
526
527 if(got < 0) {
528 perror("Debug leaking scalars parent read failed");
808ad2d0 529 PerlIO_flush(PerlIO_stderr());
41e4abd8
NC
530 abort();
531 }
808ad2d0 532 if(got < sizeof(returned_errno) + 1) {
41e4abd8 533 perror("Debug leaking scalars parent short read");
808ad2d0 534 PerlIO_flush(PerlIO_stderr());
41e4abd8
NC
535 abort();
536 }
537
808ad2d0
NC
538 if (*buffer) {
539 got = read(sock, buffer + 1, *buffer);
540 if(got < 0) {
541 perror("Debug leaking scalars parent read 2 failed");
542 PerlIO_flush(PerlIO_stderr());
543 abort();
544 }
545
546 if(got < *buffer) {
547 perror("Debug leaking scalars parent short read 2");
548 PerlIO_flush(PerlIO_stderr());
549 abort();
550 }
551 }
552
553 if (returned_errno || *buffer) {
554 Perl_warn(aTHX_ "Debug leaking scalars child failed%s%.*s with errno"
555 " %d: %s", (*buffer ? " at " : ""), (int) *buffer, buffer + 1,
0c0d42ff 556 returned_errno, Strerror(returned_errno));
41e4abd8
NC
557 }
558}
559#endif
560
62375a60 561/*
44170c9a 562=for apidoc perl_destruct
0301e899
Z
563
564Shuts down a Perl interpreter. See L<perlembed> for a tutorial.
565
566C<my_perl> points to the Perl interpreter. It must have been previously
567created through the use of L</perl_alloc> and L</perl_construct>. It may
568have been initialised through L</perl_parse>, and may have been used
569through L</perl_run> and other means. This function should be called for
570any Perl interpreter that has been constructed with L</perl_construct>,
571even if subsequent operations on it failed, for example if L</perl_parse>
572returned a non-zero value.
573
574If the interpreter's C<PL_exit_flags> word has the
575C<PERL_EXIT_DESTRUCT_END> flag set, then this function will execute code
576in C<END> blocks before performing the rest of destruction. If it is
577desired to make any use of the interpreter between L</perl_parse> and
578L</perl_destruct> other than just calling L</perl_run>, then this flag
579should be set early on. This matters if L</perl_run> will not be called,
580or if anything else will be done in addition to calling L</perl_run>.
581
582Returns a value be a suitable value to pass to the C library function
583C<exit> (or to return from C<main>), to serve as an exit code indicating
584the nature of the way the interpreter terminated. This takes into account
585any failure of L</perl_parse> and any early exit from L</perl_run>.
586The exit code is of the type required by the host operating system,
587so because of differing exit code conventions it is not portable to
588interpret specific numeric values as having specific meanings.
954c1994
GS
589
590=cut
591*/
592
31d77e54 593int
0cb96387 594perl_destruct(pTHXx)
79072805 595{
27da23d5 596 dVAR;
8162b70e 597 volatile signed char destruct_level; /* see possible values in intrpvar.h */
a0d0e21e 598 HV *hv;
2aa47728 599#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
2aa47728
NC
600 pid_t child;
601#endif
9c0b6888 602 int i;
8990e307 603
7918f24d
NC
604 PERL_ARGS_ASSERT_PERL_DESTRUCT;
605#ifndef MULTIPLICITY
ed6c66dd 606 PERL_UNUSED_ARG(my_perl);
7918f24d 607#endif
9d4ba2ae 608
3d22c4f0
GG
609 assert(PL_scopestack_ix == 1);
610
7766f137
GS
611 /* wait for all pseudo-forked children to finish */
612 PERL_WAIT_FOR_CHILDREN;
613
3280af22 614 destruct_level = PL_perl_destruct_level;
4633a7c4 615 {
9d4ba2ae
AL
616 const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL");
617 if (s) {
96e440d2
JH
618 int i;
619 if (strEQ(s, "-1")) { /* Special case: modperl folklore. */
620 i = -1;
621 } else {
22ff3130
HS
622 UV uv;
623 if (grok_atoUV(s, &uv, NULL) && uv <= INT_MAX)
624 i = (int)uv;
625 else
626 i = 0;
96e440d2 627 }
36e77d41 628 if (destruct_level < i) destruct_level = i;
36e77d41 629#ifdef PERL_TRACK_MEMPOOL
f5199772
KW
630 /* RT #114496, for perl_free */
631 PL_perl_destruct_level = i;
36e77d41 632#endif
5f05dabc 633 }
4633a7c4 634 }
4633a7c4 635
27da23d5 636 if (PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
f3faeb53
AB
637 dJMPENV;
638 int x = 0;
639
640 JMPENV_PUSH(x);
1b6737cc 641 PERL_UNUSED_VAR(x);
9ebf26ad 642 if (PL_endav && !PL_minus_c) {
ca7b837b 643 PERL_SET_PHASE(PERL_PHASE_END);
f3faeb53 644 call_list(PL_scopestack_ix, PL_endav);
9ebf26ad 645 }
f3faeb53 646 JMPENV_POP;
26f423df 647 }
f3faeb53 648 LEAVE;
a0d0e21e 649 FREETMPS;
3d22c4f0 650 assert(PL_scopestack_ix == 0);
a0d0e21e 651
803bd7c9
DM
652 /* normally when we get here, PL_parser should be null due to having
653 * its original (null) value restored by SAVEt_PARSER during leaving
654 * scope (usually before run-time starts in fact).
655 * But if a thread is created within a BEGIN block, the parser is
656 * duped, but the SAVEt_PARSER savestack entry isn't. So PL_parser
657 * never gets cleaned up.
658 * Clean it up here instead. This is a bit of a hack.
659 */
660 if (PL_parser) {
661 /* stop parser_free() stomping on PL_curcop */
662 PL_parser->saved_curcop = PL_curcop;
663 parser_free(PL_parser);
664 }
665
666
e00b64d4 667 /* Need to flush since END blocks can produce output */
8abddda3
TC
668 /* flush stdout separately, since we can identify it */
669#ifdef USE_PERLIO
670 {
671 PerlIO *stdo = PerlIO_stdout();
672 if (*stdo && PerlIO_flush(stdo)) {
673 PerlIO_restore_errno(stdo);
675c73ca 674 if (errno)
37537123 675 PerlIO_printf(PerlIO_stderr(), "Unable to flush stdout: %s\n",
675c73ca 676 Strerror(errno));
8abddda3
TC
677 if (!STATUS_UNIX)
678 STATUS_ALL_FAILURE;
679 }
680 }
681#endif
f13a2bc0 682 my_fflush_all();
e00b64d4 683
75d476e2 684#ifdef PERL_TRACE_OPS
e71f25b3
JC
685 /* dump OP-counts if $ENV{PERL_TRACE_OPS} > 0 */
686 {
687 const char * const ptoenv = PerlEnv_getenv("PERL_TRACE_OPS");
688 UV uv;
689
690 if (!ptoenv || !Perl_grok_atoUV(ptoenv, &uv, NULL)
691 || !(uv > 0))
692 goto no_trace_out;
693 }
75d476e2
S
694 PerlIO_printf(Perl_debug_log, "Trace of all OPs executed:\n");
695 for (i = 0; i <= OP_max; ++i) {
e71f25b3 696 if (PL_op_exec_cnt[i])
147e3846 697 PerlIO_printf(Perl_debug_log, " %s: %" UVuf "\n", PL_op_name[i], PL_op_exec_cnt[i]);
75d476e2
S
698 }
699 /* Utility slot for easily doing little tracing experiments in the runloop: */
700 if (PL_op_exec_cnt[OP_max+1] != 0)
147e3846 701 PerlIO_printf(Perl_debug_log, " SPECIAL: %" UVuf "\n", PL_op_exec_cnt[OP_max+1]);
75d476e2 702 PerlIO_printf(Perl_debug_log, "\n");
e71f25b3 703 no_trace_out:
75d476e2
S
704#endif
705
706
16c91539 707 if (PL_threadhook(aTHX)) {
62375a60 708 /* Threads hook has vetoed further cleanup */
c301d606 709 PL_veto_cleanup = TRUE;
37038d91 710 return STATUS_EXIT;
62375a60
NIS
711 }
712
2aa47728
NC
713#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
714 if (destruct_level != 0) {
715 /* Fork here to create a child. Our child's job is to preserve the
716 state of scalars prior to destruction, so that we can instruct it
717 to dump any scalars that we later find have leaked.
718 There's no subtlety in this code - it assumes POSIX, and it doesn't
719 fail gracefully */
720 int fd[2];
721
49836294 722 if(PerlSock_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, fd)) {
2aa47728
NC
723 perror("Debug leaking scalars socketpair failed");
724 abort();
725 }
726
727 child = fork();
728 if(child == -1) {
729 perror("Debug leaking scalars fork failed");
730 abort();
731 }
732 if (!child) {
733 /* We are the child */
3125a5a4
NC
734 const int sock = fd[1];
735 const int debug_fd = PerlIO_fileno(Perl_debug_log);
736 int f;
808ad2d0
NC
737 const char *where;
738 /* Our success message is an integer 0, and a char 0 */
b61433a9 739 static const char success[sizeof(int) + 1] = {0};
3125a5a4 740
2aa47728 741 close(fd[0]);
2aa47728 742
3125a5a4
NC
743 /* We need to close all other file descriptors otherwise we end up
744 with interesting hangs, where the parent closes its end of a
745 pipe, and sits waiting for (another) child to terminate. Only
746 that child never terminates, because it never gets EOF, because
bf357333
NC
747 we also have the far end of the pipe open. We even need to
748 close the debugging fd, because sometimes it happens to be one
749 end of a pipe, and a process is waiting on the other end for
750 EOF. Normally it would be closed at some point earlier in
751 destruction, but if we happen to cause the pipe to remain open,
752 EOF never occurs, and we get an infinite hang. Hence all the
753 games to pass in a file descriptor if it's actually needed. */
3125a5a4
NC
754
755 f = sysconf(_SC_OPEN_MAX);
756 if(f < 0) {
808ad2d0
NC
757 where = "sysconf failed";
758 goto abort;
3125a5a4
NC
759 }
760 while (f--) {
761 if (f == sock)
762 continue;
3125a5a4
NC
763 close(f);
764 }
765
2aa47728
NC
766 while (1) {
767 SV *target;
bf357333
NC
768 union control_un control;
769 struct msghdr msg;
770 struct iovec vec[1];
771 struct cmsghdr *cmptr;
772 ssize_t got;
773 int got_fd;
774
775 msg.msg_control = control.control;
776 msg.msg_controllen = sizeof(control.control);
777 /* We're a connected socket so we don't need a source */
778 msg.msg_name = NULL;
779 msg.msg_namelen = 0;
780 msg.msg_iov = vec;
c3caa5c3 781 msg.msg_iovlen = C_ARRAY_LENGTH(vec);
bf357333
NC
782
783 vec[0].iov_base = (void*)&target;
784 vec[0].iov_len = sizeof(target);
785
786 got = recvmsg(sock, &msg, 0);
2aa47728
NC
787
788 if(got == 0)
789 break;
790 if(got < 0) {
808ad2d0
NC
791 where = "recv failed";
792 goto abort;
2aa47728
NC
793 }
794 if(got < sizeof(target)) {
808ad2d0
NC
795 where = "short recv";
796 goto abort;
2aa47728 797 }
bf357333 798
808ad2d0
NC
799 if(!(cmptr = CMSG_FIRSTHDR(&msg))) {
800 where = "no cmsg";
801 goto abort;
802 }
803 if(cmptr->cmsg_len != CMSG_LEN(sizeof(int))) {
804 where = "wrong cmsg_len";
805 goto abort;
806 }
807 if(cmptr->cmsg_level != SOL_SOCKET) {
808 where = "wrong cmsg_level";
809 goto abort;
810 }
811 if(cmptr->cmsg_type != SCM_RIGHTS) {
812 where = "wrong cmsg_type";
813 goto abort;
814 }
bf357333
NC
815
816 got_fd = *(int*)CMSG_DATA(cmptr);
817 /* For our last little bit of trickery, put the file descriptor
818 back into Perl_debug_log, as if we never actually closed it
819 */
808ad2d0 820 if(got_fd != debug_fd) {
884fc2d3 821 if (PerlLIO_dup2_cloexec(got_fd, debug_fd) == -1) {
808ad2d0
NC
822 where = "dup2";
823 goto abort;
824 }
825 }
2aa47728 826 sv_dump(target);
bf357333 827
2aa47728
NC
828 PerlIO_flush(Perl_debug_log);
829
808ad2d0 830 got = write(sock, &success, sizeof(success));
2aa47728
NC
831
832 if(got < 0) {
808ad2d0
NC
833 where = "write failed";
834 goto abort;
2aa47728 835 }
808ad2d0
NC
836 if(got < sizeof(success)) {
837 where = "short write";
838 goto abort;
2aa47728
NC
839 }
840 }
841 _exit(0);
808ad2d0
NC
842 abort:
843 {
844 int send_errno = errno;
845 unsigned char length = (unsigned char) strlen(where);
846 struct iovec failure[3] = {
847 {(void*)&send_errno, sizeof(send_errno)},
848 {&length, 1},
849 {(void*)where, length}
850 };
851 int got = writev(sock, failure, 3);
852 /* Bad news travels fast. Faster than data. We'll get a SIGPIPE
853 in the parent if we try to read from the socketpair after the
854 child has exited, even if there was data to read.
855 So sleep a bit to give the parent a fighting chance of
856 reading the data. */
857 sleep(2);
858 _exit((got == -1) ? errno : 0);
859 }
bf357333 860 /* End of child. */
2aa47728 861 }
41e4abd8 862 PL_dumper_fd = fd[0];
2aa47728
NC
863 close(fd[1]);
864 }
865#endif
866
ff0cee69 867 /* We must account for everything. */
868
869 /* Destroy the main CV and syntax tree */
37e77c23
FC
870 /* Set PL_curcop now, because destroying ops can cause new SVs
871 to be generated in Perl_pad_swipe, and when running with
872 -DDEBUG_LEAKING_SCALARS they expect PL_curcop to point to a valid
873 op from which the filename structure member is copied. */
17fbfdf6 874 PL_curcop = &PL_compiling;
3280af22 875 if (PL_main_root) {
4e380990
DM
876 /* ensure comppad/curpad to refer to main's pad */
877 if (CvPADLIST(PL_main_cv)) {
878 PAD_SET_CUR_NOSAVE(CvPADLIST(PL_main_cv), 1);
325e1816 879 PL_comppad_name = PadlistNAMES(CvPADLIST(PL_main_cv));
4e380990 880 }
3280af22 881 op_free(PL_main_root);
5f66b61c 882 PL_main_root = NULL;
a0d0e21e 883 }
5f66b61c 884 PL_main_start = NULL;
aac9d523
DM
885 /* note that PL_main_cv isn't usually actually freed at this point,
886 * due to the CvOUTSIDE refs from subs compiled within it. It will
887 * get freed once all the subs are freed in sv_clean_all(), for
888 * destruct_level > 0 */
3280af22 889 SvREFCNT_dec(PL_main_cv);
601f1833 890 PL_main_cv = NULL;
ca7b837b 891 PERL_SET_PHASE(PERL_PHASE_DESTRUCT);
ff0cee69 892
13621cfb
NIS
893 /* Tell PerlIO we are about to tear things apart in case
894 we have layers which are using resources that should
895 be cleaned up now.
896 */
897
898 PerlIO_destruct(aTHX);
899
ddf23d4a
S
900 /*
901 * Try to destruct global references. We do this first so that the
902 * destructors and destructees still exist. Some sv's might remain.
903 * Non-referenced objects are on their own.
904 */
905 sv_clean_objs();
8990e307 906
5cd24f17 907 /* unhook hooks which will soon be, or use, destroyed data */
3280af22 908 SvREFCNT_dec(PL_warnhook);
a0714e2c 909 PL_warnhook = NULL;
3280af22 910 SvREFCNT_dec(PL_diehook);
a0714e2c 911 PL_diehook = NULL;
5cd24f17 912
4b556e6c 913 /* call exit list functions */
3280af22 914 while (PL_exitlistlen-- > 0)
acfe0abc 915 PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr);
4b556e6c 916
3280af22 917 Safefree(PL_exitlist);
4b556e6c 918
1c4916e5
CB
919 PL_exitlist = NULL;
920 PL_exitlistlen = 0;
921
a3e6e81e
NC
922 SvREFCNT_dec(PL_registered_mros);
923
551a8b83 924 /* jettison our possibly duplicated environment */
4b647fb0
DM
925 /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied
926 * so we certainly shouldn't free it here
927 */
2f42fcb0 928#ifndef PERL_MICRO
4b647fb0 929#if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV)
50acdf95 930 if (environ != PL_origenviron && !PL_use_safe_putenv
4efc5df6
GS
931#ifdef USE_ITHREADS
932 /* only main thread can free environ[0] contents */
933 && PL_curinterp == aTHX
934#endif
935 )
936 {
551a8b83
JH
937 I32 i;
938
939 for (i = 0; environ[i]; i++)
4b420006 940 safesysfree(environ[i]);
0631ea03 941
4b420006
JH
942 /* Must use safesysfree() when working with environ. */
943 safesysfree(environ);
551a8b83
JH
944
945 environ = PL_origenviron;
946 }
947#endif
2f42fcb0 948#endif /* !PERL_MICRO */
551a8b83 949
30985c42
JH
950 if (destruct_level == 0) {
951
952 DEBUG_P(debprofdump());
953
954#if defined(PERLIO_LAYERS)
955 /* No more IO - including error messages ! */
956 PerlIO_cleanup(aTHX);
957#endif
958
959 CopFILE_free(&PL_compiling);
30985c42
JH
960
961 /* The exit() function will do everything that needs doing. */
962 return STATUS_EXIT;
963 }
964
9fa9f06b
KW
965 /* Below, do clean up for when PERL_DESTRUCT_LEVEL is not 0 */
966
5f8cb046
DM
967#ifdef USE_ITHREADS
968 /* the syntax tree is shared between clones
969 * so op_free(PL_main_root) only ReREFCNT_dec's
970 * REGEXPs in the parent interpreter
971 * we need to manually ReREFCNT_dec for the clones
972 */
0547a729
DM
973 {
974 I32 i = AvFILLp(PL_regex_padav);
975 SV **ary = AvARRAY(PL_regex_padav);
976
977 for (; i; i--) {
978 SvREFCNT_dec(ary[i]);
979 ary[i] = &PL_sv_undef;
980 }
981 }
5f8cb046
DM
982#endif
983
0547a729 984
ad64d0ec 985 SvREFCNT_dec(MUTABLE_SV(PL_stashcache));
081fc587
AB
986 PL_stashcache = NULL;
987
5f05dabc 988 /* loosen bonds of global variables */
989
2f9285f8
DM
990 /* XXX can PL_parser still be non-null here? */
991 if(PL_parser && PL_parser->rsfp) {
992 (void)PerlIO_close(PL_parser->rsfp);
993 PL_parser->rsfp = NULL;
8ebc5c01 994 }
995
84386e14
RGS
996 if (PL_minus_F) {
997 Safefree(PL_splitstr);
998 PL_splitstr = NULL;
999 }
1000
8ebc5c01 1001 /* switches */
3280af22
NIS
1002 PL_minus_n = FALSE;
1003 PL_minus_p = FALSE;
1004 PL_minus_l = FALSE;
1005 PL_minus_a = FALSE;
1006 PL_minus_F = FALSE;
1007 PL_doswitches = FALSE;
599cee73 1008 PL_dowarn = G_WARN_OFF;
1a904fc8 1009#ifdef PERL_SAWAMPERSAND
d3b97530 1010 PL_sawampersand = 0; /* must save all match strings */
1a904fc8 1011#endif
3280af22
NIS
1012 PL_unsafe = FALSE;
1013
1014 Safefree(PL_inplace);
bd61b366 1015 PL_inplace = NULL;
a7cb1f99 1016 SvREFCNT_dec(PL_patchlevel);
3280af22
NIS
1017
1018 if (PL_e_script) {
1019 SvREFCNT_dec(PL_e_script);
a0714e2c 1020 PL_e_script = NULL;
8ebc5c01 1021 }
1022
bf9cdc68
RG
1023 PL_perldb = 0;
1024
8ebc5c01 1025 /* magical thingies */
1026
e23d9e2f
CS
1027 SvREFCNT_dec(PL_ofsgv); /* *, */
1028 PL_ofsgv = NULL;
5f05dabc 1029
7889fe52 1030 SvREFCNT_dec(PL_ors_sv); /* $\ */
a0714e2c 1031 PL_ors_sv = NULL;
8ebc5c01 1032
3280af22 1033 SvREFCNT_dec(PL_rs); /* $/ */
a0714e2c 1034 PL_rs = NULL;
dc92893f 1035
d33b2eba 1036 Safefree(PL_osname); /* $^O */
bd61b366 1037 PL_osname = NULL;
5f05dabc 1038
3280af22 1039 SvREFCNT_dec(PL_statname);
a0714e2c
SS
1040 PL_statname = NULL;
1041 PL_statgv = NULL;
5f05dabc 1042
8ebc5c01 1043 /* defgv, aka *_ should be taken care of elsewhere */
1044
7d5ea4e7
GS
1045 /* float buffer */
1046 Safefree(PL_efloatbuf);
bd61b366 1047 PL_efloatbuf = NULL;
7d5ea4e7
GS
1048 PL_efloatsize = 0;
1049
8ebc5c01 1050 /* startup and shutdown function lists */
3280af22 1051 SvREFCNT_dec(PL_beginav);
5a837c8f 1052 SvREFCNT_dec(PL_beginav_save);
3280af22 1053 SvREFCNT_dec(PL_endav);
7d30b5c4 1054 SvREFCNT_dec(PL_checkav);
ece599bd 1055 SvREFCNT_dec(PL_checkav_save);
3c10abe3
AG
1056 SvREFCNT_dec(PL_unitcheckav);
1057 SvREFCNT_dec(PL_unitcheckav_save);
3280af22 1058 SvREFCNT_dec(PL_initav);
7d49f689
NC
1059 PL_beginav = NULL;
1060 PL_beginav_save = NULL;
1061 PL_endav = NULL;
1062 PL_checkav = NULL;
1063 PL_checkav_save = NULL;
3c10abe3
AG
1064 PL_unitcheckav = NULL;
1065 PL_unitcheckav_save = NULL;
7d49f689 1066 PL_initav = NULL;
5618dfe8 1067
8ebc5c01 1068 /* shortcuts just get cleared */
a0714e2c
SS
1069 PL_hintgv = NULL;
1070 PL_errgv = NULL;
a0714e2c
SS
1071 PL_argvoutgv = NULL;
1072 PL_stdingv = NULL;
1073 PL_stderrgv = NULL;
1074 PL_last_in_gv = NULL;
a0714e2c
SS
1075 PL_DBsingle = NULL;
1076 PL_DBtrace = NULL;
1077 PL_DBsignal = NULL;
a6d69523
TC
1078 PL_DBsingle_iv = 0;
1079 PL_DBtrace_iv = 0;
1080 PL_DBsignal_iv = 0;
601f1833 1081 PL_DBcv = NULL;
7d49f689 1082 PL_dbargs = NULL;
5c284bb0 1083 PL_debstash = NULL;
8ebc5c01 1084
cf93a474 1085 SvREFCNT_dec(PL_envgv);
f03015cd 1086 SvREFCNT_dec(PL_incgv);
722fa0e9 1087 SvREFCNT_dec(PL_argvgv);
475b1e90 1088 SvREFCNT_dec(PL_replgv);
8cece913
FC
1089 SvREFCNT_dec(PL_DBgv);
1090 SvREFCNT_dec(PL_DBline);
1091 SvREFCNT_dec(PL_DBsub);
cf93a474 1092 PL_envgv = NULL;
f03015cd 1093 PL_incgv = NULL;
722fa0e9 1094 PL_argvgv = NULL;
475b1e90 1095 PL_replgv = NULL;
8cece913
FC
1096 PL_DBgv = NULL;
1097 PL_DBline = NULL;
1098 PL_DBsub = NULL;
1099
7a1c5554 1100 SvREFCNT_dec(PL_argvout_stack);
7d49f689 1101 PL_argvout_stack = NULL;
8ebc5c01 1102
5c831c24 1103 SvREFCNT_dec(PL_modglobal);
5c284bb0 1104 PL_modglobal = NULL;
5c831c24 1105 SvREFCNT_dec(PL_preambleav);
7d49f689 1106 PL_preambleav = NULL;
5c831c24 1107 SvREFCNT_dec(PL_subname);
a0714e2c 1108 PL_subname = NULL;
ca0c25f6 1109#ifdef PERL_USES_PL_PIDSTATUS
5c831c24 1110 SvREFCNT_dec(PL_pidstatus);
5c284bb0 1111 PL_pidstatus = NULL;
ca0c25f6 1112#endif
5c831c24 1113 SvREFCNT_dec(PL_toptarget);
a0714e2c 1114 PL_toptarget = NULL;
5c831c24 1115 SvREFCNT_dec(PL_bodytarget);
a0714e2c
SS
1116 PL_bodytarget = NULL;
1117 PL_formtarget = NULL;
5c831c24 1118
d33b2eba 1119 /* free locale stuff */
b9582b6a 1120#ifdef USE_LOCALE_COLLATE
d33b2eba 1121 Safefree(PL_collation_name);
bd61b366 1122 PL_collation_name = NULL;
b9582b6a 1123#endif
e9bc6d6b
KW
1124#if defined(USE_POSIX_2008_LOCALE) \
1125 && defined(USE_THREAD_SAFE_LOCALE) \
1126 && ! defined(HAS_QUERYLOCALE)
1127 for (i = 0; i < (int) C_ARRAY_LENGTH(PL_curlocales); i++) {
1128 Safefree(PL_curlocales[i]);
1129 PL_curlocales[i] = NULL;
1130 }
1131#endif
9fe4122e
KW
1132#ifdef HAS_POSIX_2008_LOCALE
1133 {
1134 /* This also makes sure we aren't using a locale object that gets freed
1135 * below */
1136 const locale_t old_locale = uselocale(LC_GLOBAL_LOCALE);
e72200e7
KW
1137 if ( old_locale != LC_GLOBAL_LOCALE
1138# ifdef USE_POSIX_2008_LOCALE
1139 && old_locale != PL_C_locale_obj
1140# endif
1141 ) {
19ee3daf
KW
1142 DEBUG_Lv(PerlIO_printf(Perl_debug_log,
1143 "%s:%d: Freeing %p\n", __FILE__, __LINE__, old_locale));
9fe4122e
KW
1144 freelocale(old_locale);
1145 }
1146 }
1147# ifdef USE_LOCALE_NUMERIC
e1aa2579 1148 if (PL_underlying_numeric_obj) {
19ee3daf
KW
1149 DEBUG_Lv(PerlIO_printf(Perl_debug_log,
1150 "%s:%d: Freeing %p\n", __FILE__, __LINE__,
1151 PL_underlying_numeric_obj));
e1aa2579
KW
1152 freelocale(PL_underlying_numeric_obj);
1153 PL_underlying_numeric_obj = (locale_t) NULL;
1154 }
e1aa2579 1155# endif
9fe4122e
KW
1156#endif
1157#ifdef USE_LOCALE_NUMERIC
1158 Safefree(PL_numeric_name);
1159 PL_numeric_name = NULL;
1160 SvREFCNT_dec(PL_numeric_radix_sv);
1161 PL_numeric_radix_sv = NULL;
e1aa2579
KW
1162#endif
1163
9aac5db8
KW
1164 if (PL_setlocale_buf) {
1165 Safefree(PL_setlocale_buf);
1166 PL_setlocale_buf = NULL;
1167 }
1168
7e5377f7
KW
1169 if (PL_langinfo_buf) {
1170 Safefree(PL_langinfo_buf);
1171 PL_langinfo_buf = NULL;
1172 }
1173
5b7de470 1174#ifdef USE_LOCALE_CTYPE
780fcc9f 1175 SvREFCNT_dec(PL_warn_locale);
780fcc9f 1176 PL_warn_locale = NULL;
5b7de470 1177#endif
5c831c24 1178
a8def808
KW
1179 SvREFCNT_dec(PL_AboveLatin1);
1180 PL_AboveLatin1 = NULL;
1181 SvREFCNT_dec(PL_Assigned_invlist);
1182 PL_Assigned_invlist = NULL;
1183 SvREFCNT_dec(PL_GCB_invlist);
1184 PL_GCB_invlist = NULL;
1185 SvREFCNT_dec(PL_HasMultiCharFold);
1186 PL_HasMultiCharFold = NULL;
1187 SvREFCNT_dec(PL_InMultiCharFold);
1188 PL_InMultiCharFold = NULL;
1189 SvREFCNT_dec(PL_Latin1);
1190 PL_Latin1 = NULL;
1191 SvREFCNT_dec(PL_LB_invlist);
1192 PL_LB_invlist = NULL;
1193 SvREFCNT_dec(PL_SB_invlist);
1194 PL_SB_invlist = NULL;
1195 SvREFCNT_dec(PL_SCX_invlist);
1196 PL_SCX_invlist = NULL;
1197 SvREFCNT_dec(PL_UpperLatin1);
1198 PL_UpperLatin1 = NULL;
1199 SvREFCNT_dec(PL_in_some_fold);
1200 PL_in_some_fold = NULL;
1201 SvREFCNT_dec(PL_utf8_idcont);
1202 PL_utf8_idcont = NULL;
1203 SvREFCNT_dec(PL_utf8_idstart);
1204 PL_utf8_idstart = NULL;
1205 SvREFCNT_dec(PL_utf8_perl_idcont);
1206 PL_utf8_perl_idcont = NULL;
1207 SvREFCNT_dec(PL_utf8_perl_idstart);
1208 PL_utf8_perl_idstart = NULL;
1209 SvREFCNT_dec(PL_utf8_xidcont);
1210 PL_utf8_xidcont = NULL;
1211 SvREFCNT_dec(PL_utf8_xidstart);
1212 PL_utf8_xidstart = NULL;
1213 SvREFCNT_dec(PL_WB_invlist);
1214 PL_WB_invlist = NULL;
1215 SvREFCNT_dec(PL_utf8_toupper);
1216 PL_utf8_toupper = NULL;
1217 SvREFCNT_dec(PL_utf8_totitle);
1218 PL_utf8_totitle = NULL;
1219 SvREFCNT_dec(PL_utf8_tolower);
1220 PL_utf8_tolower = NULL;
1221 SvREFCNT_dec(PL_utf8_tofold);
1222 PL_utf8_tofold = NULL;
1223 SvREFCNT_dec(PL_utf8_tosimplefold);
1224 PL_utf8_tosimplefold = NULL;
1225 SvREFCNT_dec(PL_utf8_charname_begin);
1226 PL_utf8_charname_begin = NULL;
1227 SvREFCNT_dec(PL_utf8_charname_continue);
1228 PL_utf8_charname_continue = NULL;
1229 SvREFCNT_dec(PL_utf8_mark);
1230 PL_utf8_mark = NULL;
1231 SvREFCNT_dec(PL_InBitmap);
1232 PL_InBitmap = NULL;
1233 SvREFCNT_dec(PL_CCC_non0_non230);
1234 PL_CCC_non0_non230 = NULL;
1235 SvREFCNT_dec(PL_Private_Use);
1236 PL_Private_Use = NULL;
1237
1238 for (i = 0; i < POSIX_CC_COUNT; i++) {
1239 SvREFCNT_dec(PL_XPosix_ptrs[i]);
1240 PL_XPosix_ptrs[i] = NULL;
1241
1242 if (i != _CC_CASED) { /* A copy of Alpha */
1243 SvREFCNT_dec(PL_Posix_ptrs[i]);
1244 PL_Posix_ptrs[i] = NULL;
1245 }
1246 }
1247
1943af61 1248 free_and_set_cop_warnings(&PL_compiling, NULL);
20439bc7
Z
1249 cophh_free(CopHINTHASH_get(&PL_compiling));
1250 CopHINTHASH_set(&PL_compiling, cophh_new_empty());
05ec9bb3 1251 CopFILE_free(&PL_compiling);
5c831c24 1252
a0d0e21e 1253 /* Prepare to destruct main symbol table. */
5f05dabc 1254
3280af22 1255 hv = PL_defstash;
ca556bcd 1256 /* break ref loop *:: <=> %:: */
854da30f 1257 (void)hv_deletes(hv, "main::", G_DISCARD);
3280af22 1258 PL_defstash = 0;
a0d0e21e 1259 SvREFCNT_dec(hv);
5c831c24 1260 SvREFCNT_dec(PL_curstname);
a0714e2c 1261 PL_curstname = NULL;
a0d0e21e 1262
5a844595
GS
1263 /* clear queued errors */
1264 SvREFCNT_dec(PL_errors);
a0714e2c 1265 PL_errors = NULL;
5a844595 1266
dd69841b
BB
1267 SvREFCNT_dec(PL_isarev);
1268
a0d0e21e 1269 FREETMPS;
9b387841 1270 if (destruct_level >= 2) {
3280af22 1271 if (PL_scopestack_ix != 0)
9b387841
NC
1272 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1273 "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
1274 (long)PL_scopestack_ix);
3280af22 1275 if (PL_savestack_ix != 0)
9b387841
NC
1276 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1277 "Unbalanced saves: %ld more saves than restores\n",
1278 (long)PL_savestack_ix);
3280af22 1279 if (PL_tmps_floor != -1)
9b387841
NC
1280 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n",
1281 (long)PL_tmps_floor + 1);
a0d0e21e 1282 if (cxstack_ix != -1)
9b387841
NC
1283 Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n",
1284 (long)cxstack_ix + 1);
a0d0e21e 1285 }
8990e307 1286
0547a729
DM
1287#ifdef USE_ITHREADS
1288 SvREFCNT_dec(PL_regex_padav);
1289 PL_regex_padav = NULL;
1290 PL_regex_pad = NULL;
1291#endif
1292
776df701 1293#ifdef PERL_IMPLICIT_CONTEXT
57bb2458
JH
1294 /* the entries in this list are allocated via SV PVX's, so get freed
1295 * in sv_clean_all */
1296 Safefree(PL_my_cxt_list);
776df701 1297#endif
57bb2458 1298
8990e307 1299 /* Now absolutely destruct everything, somehow or other, loops or no. */
5226ed68
JH
1300
1301 /* the 2 is for PL_fdpid and PL_strtab */
d17ea597 1302 while (sv_clean_all() > 2)
5226ed68
JH
1303 ;
1304
23083432
FC
1305#ifdef USE_ITHREADS
1306 Safefree(PL_stashpad); /* must come after sv_clean_all */
1307#endif
1308
d4777f27
GS
1309 AvREAL_off(PL_fdpid); /* no surviving entries */
1310 SvREFCNT_dec(PL_fdpid); /* needed in io_close() */
7d49f689 1311 PL_fdpid = NULL;
d33b2eba 1312
6c644e78
GS
1313#ifdef HAVE_INTERP_INTERN
1314 sys_intern_clear();
1315#endif
1316
a38ab475
RZ
1317 /* constant strings */
1318 for (i = 0; i < SV_CONSTS_COUNT; i++) {
1319 SvREFCNT_dec(PL_sv_consts[i]);
1320 PL_sv_consts[i] = NULL;
1321 }
1322
6e72f9df 1323 /* Destruct the global string table. */
1324 {
1325 /* Yell and reset the HeVAL() slots that are still holding refcounts,
1326 * so that sv_free() won't fail on them.
80459961
NC
1327 * Now that the global string table is using a single hunk of memory
1328 * for both HE and HEK, we either need to explicitly unshare it the
1329 * correct way, or actually free things here.
6e72f9df 1330 */
80459961
NC
1331 I32 riter = 0;
1332 const I32 max = HvMAX(PL_strtab);
c4420975 1333 HE * const * const array = HvARRAY(PL_strtab);
80459961
NC
1334 HE *hent = array[0];
1335
6e72f9df 1336 for (;;) {
0453d815 1337 if (hent && ckWARN_d(WARN_INTERNAL)) {
44f8325f 1338 HE * const next = HeNEXT(hent);
9014280d 1339 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
44f8325f 1340 "Unbalanced string table refcount: (%ld) for \"%s\"",
de616631 1341 (long)hent->he_valu.hent_refcount, HeKEY(hent));
80459961
NC
1342 Safefree(hent);
1343 hent = next;
6e72f9df 1344 }
1345 if (!hent) {
1346 if (++riter > max)
1347 break;
1348 hent = array[riter];
1349 }
1350 }
80459961
NC
1351
1352 Safefree(array);
1353 HvARRAY(PL_strtab) = 0;
1354 HvTOTALKEYS(PL_strtab) = 0;
6e72f9df 1355 }
3280af22 1356 SvREFCNT_dec(PL_strtab);
6e72f9df 1357
e652bb2f 1358#ifdef USE_ITHREADS
c21d1a0f 1359 /* free the pointer tables used for cloning */
a0739874 1360 ptr_table_free(PL_ptr_table);
bf9cdc68 1361 PL_ptr_table = (PTR_TBL_t*)NULL;
53186e96 1362#endif
a0739874 1363
d33b2eba
GS
1364 /* free special SVs */
1365
1366 SvREFCNT(&PL_sv_yes) = 0;
1367 sv_clear(&PL_sv_yes);
1368 SvANY(&PL_sv_yes) = NULL;
4c5e2b0d 1369 SvFLAGS(&PL_sv_yes) = 0;
d33b2eba
GS
1370
1371 SvREFCNT(&PL_sv_no) = 0;
1372 sv_clear(&PL_sv_no);
1373 SvANY(&PL_sv_no) = NULL;
4c5e2b0d 1374 SvFLAGS(&PL_sv_no) = 0;
01724ea0 1375
5a6c2837
DM
1376 SvREFCNT(&PL_sv_zero) = 0;
1377 sv_clear(&PL_sv_zero);
1378 SvANY(&PL_sv_zero) = NULL;
1379 SvFLAGS(&PL_sv_zero) = 0;
1380
9f375a43
DM
1381 {
1382 int i;
1383 for (i=0; i<=2; i++) {
1384 SvREFCNT(PERL_DEBUG_PAD(i)) = 0;
1385 sv_clear(PERL_DEBUG_PAD(i));
1386 SvANY(PERL_DEBUG_PAD(i)) = NULL;
1387 SvFLAGS(PERL_DEBUG_PAD(i)) = 0;
1388 }
1389 }
1390
0453d815 1391 if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
9014280d 1392 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count);
6e72f9df 1393
eba0f806
DM
1394#ifdef DEBUG_LEAKING_SCALARS
1395 if (PL_sv_count != 0) {
1396 SV* sva;
1397 SV* sv;
eb578fdb 1398 SV* svend;
eba0f806 1399
ad64d0ec 1400 for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
eba0f806
DM
1401 svend = &sva[SvREFCNT(sva)];
1402 for (sv = sva + 1; sv < svend; ++sv) {
e4787c0c 1403 if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
a548cda8 1404 PerlIO_printf(Perl_debug_log, "leaked: sv=0x%p"
72ba98d5
KW
1405 " flags=0x%" UVxf
1406 " refcnt=%" UVuf pTHX__FORMAT "\n"
147e3846
KW
1407 "\tallocated at %s:%d %s %s (parent 0x%" UVxf ");"
1408 "serial %" UVuf "\n",
574b8821
NC
1409 (void*)sv, (UV)sv->sv_flags, (UV)sv->sv_refcnt
1410 pTHX__VALUE,
fd0854ff
DM
1411 sv->sv_debug_file ? sv->sv_debug_file : "(unknown)",
1412 sv->sv_debug_line,
1413 sv->sv_debug_inpad ? "for" : "by",
1414 sv->sv_debug_optype ?
1415 PL_op_name[sv->sv_debug_optype]: "(none)",
cd676548 1416 PTR2UV(sv->sv_debug_parent),
cbe56f1d 1417 sv->sv_debug_serial
fd0854ff 1418 );
2aa47728 1419#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
41e4abd8 1420 Perl_dump_sv_child(aTHX_ sv);
2aa47728 1421#endif
eba0f806
DM
1422 }
1423 }
1424 }
1425 }
2aa47728
NC
1426#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
1427 {
1428 int status;
1429 fd_set rset;
1430 /* Wait for up to 4 seconds for child to terminate.
1431 This seems to be the least effort way of timing out on reaping
1432 its exit status. */
1433 struct timeval waitfor = {4, 0};
41e4abd8 1434 int sock = PL_dumper_fd;
2aa47728
NC
1435
1436 shutdown(sock, 1);
1437 FD_ZERO(&rset);
1438 FD_SET(sock, &rset);
1439 select(sock + 1, &rset, NULL, NULL, &waitfor);
1440 waitpid(child, &status, WNOHANG);
1441 close(sock);
1442 }
1443#endif
eba0f806 1444#endif
77abb4c6
NC
1445#ifdef DEBUG_LEAKING_SCALARS_ABORT
1446 if (PL_sv_count)
1447 abort();
1448#endif
bf9cdc68 1449 PL_sv_count = 0;
eba0f806 1450
56a2bab7 1451#if defined(PERLIO_LAYERS)
3a1ee7e8
NIS
1452 /* No more IO - including error messages ! */
1453 PerlIO_cleanup(aTHX);
1454#endif
1455
9f4bd222 1456 /* sv_undef needs to stay immortal until after PerlIO_cleanup
a0714e2c 1457 as currently layers use it rather than NULL as a marker
9f4bd222
NIS
1458 for no arg - and will try and SvREFCNT_dec it.
1459 */
1460 SvREFCNT(&PL_sv_undef) = 0;
1461 SvREADONLY_off(&PL_sv_undef);
1462
3280af22 1463 Safefree(PL_origfilename);
bd61b366 1464 PL_origfilename = NULL;
43c5f42d 1465 Safefree(PL_reg_curpm);
dd28f7bb 1466 free_tied_hv_pool();
3280af22 1467 Safefree(PL_op_mask);
cf36064f 1468 Safefree(PL_psig_name);
bf9cdc68 1469 PL_psig_name = (SV**)NULL;
d525a7b2 1470 PL_psig_ptr = (SV**)NULL;
31c91b43
LR
1471 {
1472 /* We need to NULL PL_psig_pend first, so that
1473 signal handlers know not to use it */
1474 int *psig_save = PL_psig_pend;
1475 PL_psig_pend = (int*)NULL;
1476 Safefree(psig_save);
1477 }
6e72f9df 1478 nuke_stacks();
284167a5
S
1479 TAINTING_set(FALSE);
1480 TAINT_WARN_set(FALSE);
3280af22 1481 PL_hints = 0; /* Reset hints. Should hints be per-interpreter ? */
ac27b0f5 1482
a0d0e21e 1483 DEBUG_P(debprofdump());
d33b2eba 1484
b173165c
FC
1485 PL_debug = 0;
1486
e5dd39fc 1487#ifdef USE_REENTRANT_API
10bc17b6 1488 Perl_reentrant_free(aTHX);
e5dd39fc
AB
1489#endif
1490
a24da70b
NC
1491 /* These all point to HVs that are about to be blown away.
1492 Code in core and on CPAN assumes that if the interpreter is re-started
1493 that they will be cleanly NULL or pointing to a valid HV. */
1494 PL_custom_op_names = NULL;
1495 PL_custom_op_descs = NULL;
1496 PL_custom_ops = NULL;
1497
612f20c3
GS
1498 sv_free_arenas();
1499
5d9a96ca
DM
1500 while (PL_regmatch_slab) {
1501 regmatch_slab *s = PL_regmatch_slab;
1502 PL_regmatch_slab = PL_regmatch_slab->next;
1503 Safefree(s);
1504 }
1505
fc36a67e 1506 /* As the absolutely last thing, free the non-arena SV for mess() */
1507
3280af22 1508 if (PL_mess_sv) {
f350b448
NC
1509 /* we know that type == SVt_PVMG */
1510
9c63abab 1511 /* it could have accumulated taint magic */
f350b448
NC
1512 MAGIC* mg;
1513 MAGIC* moremagic;
1514 for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
1515 moremagic = mg->mg_moremagic;
1516 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global
1517 && mg->mg_len >= 0)
1518 Safefree(mg->mg_ptr);
1519 Safefree(mg);
9c63abab 1520 }
f350b448 1521
fc36a67e 1522 /* we know that type >= SVt_PV */
8bd4d4c5 1523 SvPV_free(PL_mess_sv);
3280af22
NIS
1524 Safefree(SvANY(PL_mess_sv));
1525 Safefree(PL_mess_sv);
a0714e2c 1526 PL_mess_sv = NULL;
fc36a67e 1527 }
37038d91 1528 return STATUS_EXIT;
79072805
LW
1529}
1530
954c1994
GS
1531/*
1532=for apidoc perl_free
1533
1534Releases a Perl interpreter. See L<perlembed>.
1535
1536=cut
1537*/
1538
79072805 1539void
0cb96387 1540perl_free(pTHXx)
79072805 1541{
5174512c
NC
1542 dVAR;
1543
7918f24d
NC
1544 PERL_ARGS_ASSERT_PERL_FREE;
1545
c301d606
DM
1546 if (PL_veto_cleanup)
1547 return;
1548
7cb608b5 1549#ifdef PERL_TRACK_MEMPOOL
55ef9aae
MHM
1550 {
1551 /*
1552 * Don't free thread memory if PERL_DESTRUCT_LEVEL is set to a non-zero
1553 * value as we're probably hunting memory leaks then
1554 */
36e77d41 1555 if (PL_perl_destruct_level == 0) {
4fd0a9b8 1556 const U32 old_debug = PL_debug;
55ef9aae
MHM
1557 /* Emulate the PerlHost behaviour of free()ing all memory allocated in this
1558 thread at thread exit. */
4fd0a9b8
NC
1559 if (DEBUG_m_TEST) {
1560 PerlIO_puts(Perl_debug_log, "Disabling memory debugging as we "
1561 "free this thread's memory\n");
1562 PL_debug &= ~ DEBUG_m_FLAG;
1563 }
6edcbed6
DD
1564 while(aTHXx->Imemory_debug_header.next != &(aTHXx->Imemory_debug_header)){
1565 char * next = (char *)(aTHXx->Imemory_debug_header.next);
1566 Malloc_t ptr = PERL_MEMORY_DEBUG_HEADER_SIZE + next;
1567 safesysfree(ptr);
1568 }
4fd0a9b8 1569 PL_debug = old_debug;
55ef9aae
MHM
1570 }
1571 }
7cb608b5
NC
1572#endif
1573
acfe0abc 1574#if defined(WIN32) || defined(NETWARE)
ce3e5b80 1575# if defined(PERL_IMPLICIT_SYS)
b36c9a52 1576 {
acfe0abc 1577# ifdef NETWARE
7af12a34 1578 void *host = nw_internal_host;
7af12a34 1579 PerlMem_free(aTHXx);
7af12a34 1580 nw_delete_internal_host(host);
acfe0abc 1581# else
bdb50480
NC
1582 void *host = w32_internal_host;
1583 PerlMem_free(aTHXx);
7af12a34 1584 win32_delete_internal_host(host);
acfe0abc 1585# endif
7af12a34 1586 }
1c0ca838
GS
1587# else
1588 PerlMem_free(aTHXx);
1589# endif
acfe0abc
GS
1590#else
1591 PerlMem_free(aTHXx);
76e3520e 1592#endif
79072805
LW
1593}
1594
b7f7fff6 1595#if defined(USE_ITHREADS)
aebd1ac7
GA
1596/* provide destructors to clean up the thread key when libperl is unloaded */
1597#ifndef WIN32 /* handled during DLL_PROCESS_DETACH in win32/perllib.c */
1598
826955bd 1599#if defined(__hpux) && !(defined(__ux_version) && __ux_version <= 1020) && !defined(__GNUC__)
aebd1ac7 1600#pragma fini "perl_fini"
666ad1ec
GA
1601#elif defined(__sun) && !defined(__GNUC__)
1602#pragma fini (perl_fini)
aebd1ac7
GA
1603#endif
1604
0dbb1585
AL
1605static void
1606#if defined(__GNUC__)
1607__attribute__((destructor))
aebd1ac7 1608#endif
de009b76 1609perl_fini(void)
aebd1ac7 1610{
27da23d5 1611 dVAR;
5c64bffd
NC
1612 if (
1613#ifdef PERL_GLOBAL_STRUCT_PRIVATE
1614 my_vars &&
1615#endif
1616 PL_curinterp && !PL_veto_cleanup)
aebd1ac7
GA
1617 FREE_THREAD_KEY;
1618}
1619
1620#endif /* WIN32 */
1621#endif /* THREADS */
1622
4b556e6c 1623void
864dbfa3 1624Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
4b556e6c 1625{
3280af22
NIS
1626 Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
1627 PL_exitlist[PL_exitlistlen].fn = fn;
1628 PL_exitlist[PL_exitlistlen].ptr = ptr;
1629 ++PL_exitlistlen;
4b556e6c
JD
1630}
1631
954c1994 1632/*
44170c9a 1633=for apidoc perl_parse
0301e899
Z
1634
1635Tells a Perl interpreter to parse a Perl script. This performs most
1636of the initialisation of a Perl interpreter. See L<perlembed> for
1637a tutorial.
1638
1639C<my_perl> points to the Perl interpreter that is to parse the script.
1640It must have been previously created through the use of L</perl_alloc>
1641and L</perl_construct>. C<xsinit> points to a callback function that
1642will be called to set up the ability for this Perl interpreter to load
1643XS extensions, or may be null to perform no such setup.
1644
1645C<argc> and C<argv> supply a set of command-line arguments to the Perl
1646interpreter, as would normally be passed to the C<main> function of
1647a C program. C<argv[argc]> must be null. These arguments are where
1648the script to parse is specified, either by naming a script file or by
1649providing a script in a C<-e> option.
a3e261d5
Z
1650If L<C<$0>|perlvar/$0> will be written to in the Perl interpreter, then
1651the argument strings must be in writable memory, and so mustn't just be
1652string constants.
0301e899
Z
1653
1654C<env> specifies a set of environment variables that will be used by
1655this Perl interpreter. If non-null, it must point to a null-terminated
1656array of environment strings. If null, the Perl interpreter will use
1657the environment supplied by the C<environ> global variable.
1658
1659This function initialises the interpreter, and parses and compiles the
1660script specified by the command-line arguments. This includes executing
1661code in C<BEGIN>, C<UNITCHECK>, and C<CHECK> blocks. It does not execute
1662C<INIT> blocks or the main program.
1663
1664Returns an integer of slightly tricky interpretation. The correct
1665use of the return value is as a truth value indicating whether there
1666was a failure in initialisation. If zero is returned, this indicates
1667that initialisation was successful, and it is safe to proceed to call
1668L</perl_run> and make other use of it. If a non-zero value is returned,
1669this indicates some problem that means the interpreter wants to terminate.
1670The interpreter should not be just abandoned upon such failure; the caller
1671should proceed to shut the interpreter down cleanly with L</perl_destruct>
1672and free it with L</perl_free>.
1673
1674For historical reasons, the non-zero return value also attempts to
1675be a suitable value to pass to the C library function C<exit> (or to
1676return from C<main>), to serve as an exit code indicating the nature
1677of the way initialisation terminated. However, this isn't portable,
625e8b0b
TC
1678due to differing exit code conventions. A historical bug is preserved
1679for the time being: if the Perl built-in C<exit> is called during this
1680function's execution, with a type of exit entailing a zero exit code
1681under the host operating system's conventions, then this function
1682returns zero rather than a non-zero value. This bug, [perl #2754],
1683leads to C<perl_run> being called (and therefore C<INIT> blocks and the
1684main program running) despite a call to C<exit>. It has been preserved
1685because a popular module-installing module has come to rely on it and
1686needs time to be fixed. This issue is [perl #132577], and the original
1687bug is due to be fixed in Perl 5.30.
0301e899 1688
954c1994
GS
1689=cut
1690*/
1691
03d9f026
FC
1692#define SET_CURSTASH(newstash) \
1693 if (PL_curstash != newstash) { \
1694 SvREFCNT_dec(PL_curstash); \
1695 PL_curstash = (HV *)SvREFCNT_inc(newstash); \
1696 }
1697
79072805 1698int
0cb96387 1699perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
8d063cd8 1700{
27da23d5 1701 dVAR;
6224f72b 1702 I32 oldscope;
6224f72b 1703 int ret;
db36c5a1 1704 dJMPENV;
8d063cd8 1705
7918f24d
NC
1706 PERL_ARGS_ASSERT_PERL_PARSE;
1707#ifndef MULTIPLICITY
ed6c66dd 1708 PERL_UNUSED_ARG(my_perl);
7918f24d 1709#endif
1a237f4f 1710#if (defined(USE_HASH_SEED) || defined(USE_HASH_SEED_DEBUG)) && !defined(NO_PERL_HASH_SEED_DEBUG)
b0891165 1711 {
7dc86639
YO
1712 const char * const s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG");
1713
22ff3130 1714 if (s && strEQ(s, "1")) {
25c1b134
TC
1715 const unsigned char *seed= PERL_HASH_SEED;
1716 const unsigned char *seed_end= PERL_HASH_SEED + PERL_HASH_SEED_BYTES;
7dc86639
YO
1717 PerlIO_printf(Perl_debug_log, "HASH_FUNCTION = %s HASH_SEED = 0x", PERL_HASH_FUNC);
1718 while (seed < seed_end) {
1719 PerlIO_printf(Perl_debug_log, "%02x", *seed++);
1720 }
6a5b4183
YO
1721#ifdef PERL_HASH_RANDOMIZE_KEYS
1722 PerlIO_printf(Perl_debug_log, " PERTURB_KEYS = %d (%s)",
1723 PL_HASH_RAND_BITS_ENABLED,
1724 PL_HASH_RAND_BITS_ENABLED == 0 ? "NO" : PL_HASH_RAND_BITS_ENABLED == 1 ? "RANDOM" : "DETERMINISTIC");
1725#endif
7dc86639
YO
1726 PerlIO_printf(Perl_debug_log, "\n");
1727 }
b0891165 1728 }
1a237f4f 1729#endif /* #if (defined(USE_HASH_SEED) ... */
43238333 1730
ea34f6bd 1731#ifdef __amigaos4__
43238333
AB
1732 {
1733 struct NameTranslationInfo nti;
1734 __translate_amiga_to_unix_path_name(&argv[0],&nti);
1735 }
1736#endif
1737
cc85e83f
Z
1738 {
1739 int i;
1740 assert(argc >= 0);
1741 for(i = 0; i != argc; i++)
1742 assert(argv[i]);
1743 assert(!argv[argc]);
1744 }
3280af22 1745 PL_origargc = argc;
e2975953 1746 PL_origargv = argv;
a0d0e21e 1747
a2722ac9
GA
1748 if (PL_origalen != 0) {
1749 PL_origalen = 1; /* don't use old PL_origalen if perl_parse() is called again */
1750 }
1751 else {
3cb9023d
JH
1752 /* Set PL_origalen be the sum of the contiguous argv[]
1753 * elements plus the size of the env in case that it is
e9137a8e 1754 * contiguous with the argv[]. This is used in mg.c:Perl_magic_set()
3cb9023d
JH
1755 * as the maximum modifiable length of $0. In the worst case
1756 * the area we are able to modify is limited to the size of
43c32782 1757 * the original argv[0]. (See below for 'contiguous', though.)
3cb9023d 1758 * --jhi */
e1ec3a88 1759 const char *s = NULL;
b7249aaf 1760 const UV mask = ~(UV)(PTRSIZE-1);
43c32782 1761 /* Do the mask check only if the args seem like aligned. */
1b6737cc 1762 const UV aligned =
43c32782
JH
1763 (mask < ~(UV)0) && ((PTR2UV(argv[0]) & mask) == PTR2UV(argv[0]));
1764
1765 /* See if all the arguments are contiguous in memory. Note
1766 * that 'contiguous' is a loose term because some platforms
1767 * align the argv[] and the envp[]. If the arguments look
1768 * like non-aligned, assume that they are 'strictly' or
1769 * 'traditionally' contiguous. If the arguments look like
1770 * aligned, we just check that they are within aligned
1771 * PTRSIZE bytes. As long as no system has something bizarre
1772 * like the argv[] interleaved with some other data, we are
1773 * fine. (Did I just evoke Murphy's Law?) --jhi */
c8941eeb 1774 if (PL_origargv && PL_origargc >= 1 && (s = PL_origargv[0])) {
19742f39 1775 int i;
c8941eeb
JH
1776 while (*s) s++;
1777 for (i = 1; i < PL_origargc; i++) {
1778 if ((PL_origargv[i] == s + 1
43c32782 1779#ifdef OS2
c8941eeb 1780 || PL_origargv[i] == s + 2
43c32782 1781#endif
c8941eeb
JH
1782 )
1783 ||
1784 (aligned &&
1785 (PL_origargv[i] > s &&
1786 PL_origargv[i] <=
1787 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1788 )
1789 {
1790 s = PL_origargv[i];
1791 while (*s) s++;
1792 }
1793 else
1794 break;
54bfe034 1795 }
54bfe034 1796 }
a4a109c2
JD
1797
1798#ifndef PERL_USE_SAFE_PUTENV
3cb9023d 1799 /* Can we grab env area too to be used as the area for $0? */
a4a109c2 1800 if (s && PL_origenviron && !PL_use_safe_putenv) {
9d419b5f 1801 if ((PL_origenviron[0] == s + 1)
43c32782
JH
1802 ||
1803 (aligned &&
1804 (PL_origenviron[0] > s &&
1805 PL_origenviron[0] <=
1806 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1807 )
1808 {
19742f39 1809 int i;
9d419b5f 1810#ifndef OS2 /* ENVIRON is read by the kernel too. */
43c32782
JH
1811 s = PL_origenviron[0];
1812 while (*s) s++;
1813#endif
bd61b366 1814 my_setenv("NoNe SuCh", NULL);
43c32782
JH
1815 /* Force copy of environment. */
1816 for (i = 1; PL_origenviron[i]; i++) {
1817 if (PL_origenviron[i] == s + 1
1818 ||
1819 (aligned &&
1820 (PL_origenviron[i] > s &&
1821 PL_origenviron[i] <=
1822 INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1823 )
1824 {
1825 s = PL_origenviron[i];
1826 while (*s) s++;
1827 }
1828 else
1829 break;
54bfe034 1830 }
43c32782 1831 }
54bfe034 1832 }
a4a109c2
JD
1833#endif /* !defined(PERL_USE_SAFE_PUTENV) */
1834
2d2af554 1835 PL_origalen = s ? s - PL_origargv[0] + 1 : 0;
54bfe034
JH
1836 }
1837
3280af22 1838 if (PL_do_undump) {
a0d0e21e
LW
1839
1840 /* Come here if running an undumped a.out. */
1841
3280af22
NIS
1842 PL_origfilename = savepv(argv[0]);
1843 PL_do_undump = FALSE;
a0d0e21e 1844 cxstack_ix = -1; /* start label stack again */
748a9306 1845 init_ids();
284167a5 1846 assert (!TAINT_get);
b7975bdd 1847 TAINT;
e2051532 1848 set_caret_X();
b7975bdd 1849 TAINT_NOT;
a0d0e21e
LW
1850 init_postdump_symbols(argc,argv,env);
1851 return 0;
1852 }
1853
3280af22 1854 if (PL_main_root) {
3280af22 1855 op_free(PL_main_root);
5f66b61c 1856 PL_main_root = NULL;
ff0cee69 1857 }
5f66b61c 1858 PL_main_start = NULL;
3280af22 1859 SvREFCNT_dec(PL_main_cv);
601f1833 1860 PL_main_cv = NULL;
79072805 1861
3280af22
NIS
1862 time(&PL_basetime);
1863 oldscope = PL_scopestack_ix;
599cee73 1864 PL_dowarn = G_WARN_OFF;
f86702cc 1865
14dd3ad8 1866 JMPENV_PUSH(ret);
6224f72b 1867 switch (ret) {
312caa8e 1868 case 0:
14dd3ad8 1869 parse_body(env,xsinit);
9ebf26ad 1870 if (PL_unitcheckav) {
3c10abe3 1871 call_list(oldscope, PL_unitcheckav);
9ebf26ad
FR
1872 }
1873 if (PL_checkav) {
ca7b837b 1874 PERL_SET_PHASE(PERL_PHASE_CHECK);
7d30b5c4 1875 call_list(oldscope, PL_checkav);
9ebf26ad 1876 }
14dd3ad8
GS
1877 ret = 0;
1878 break;
6224f72b
GS
1879 case 1:
1880 STATUS_ALL_FAILURE;
924ba076 1881 /* FALLTHROUGH */
6224f72b
GS
1882 case 2:
1883 /* my_exit() was called */
3280af22 1884 while (PL_scopestack_ix > oldscope)
6224f72b
GS
1885 LEAVE;
1886 FREETMPS;
03d9f026 1887 SET_CURSTASH(PL_defstash);
9ebf26ad 1888 if (PL_unitcheckav) {
3c10abe3 1889 call_list(oldscope, PL_unitcheckav);
9ebf26ad
FR
1890 }
1891 if (PL_checkav) {
ca7b837b 1892 PERL_SET_PHASE(PERL_PHASE_CHECK);
7d30b5c4 1893 call_list(oldscope, PL_checkav);
9ebf26ad 1894 }
37038d91 1895 ret = STATUS_EXIT;
625e8b0b
TC
1896 if (ret == 0) {
1897 /*
1898 * At this point we should do
1899 * ret = 0x100;
1900 * to avoid [perl #2754], but that bugfix has been postponed
1901 * because of the Module::Install breakage it causes
1902 * [perl #132577].
1903 */
1904 }
14dd3ad8 1905 break;
6224f72b 1906 case 3:
bf49b057 1907 PerlIO_printf(Perl_error_log, "panic: top_env\n");
14dd3ad8
GS
1908 ret = 1;
1909 break;
6224f72b 1910 }
14dd3ad8
GS
1911 JMPENV_POP;
1912 return ret;
1913}
1914
4a5df386
NC
1915/* This needs to stay in perl.c, as perl.c is compiled with different flags for
1916 miniperl, and we need to see those flags reflected in the values here. */
1917
1918/* What this returns is subject to change. Use the public interface in Config.
1919 */
1920static void
1921S_Internals_V(pTHX_ CV *cv)
1922{
1923 dXSARGS;
1924#ifdef LOCAL_PATCH_COUNT
1925 const int local_patch_count = LOCAL_PATCH_COUNT;
1926#else
1927 const int local_patch_count = 0;
1928#endif
2dc296d2 1929 const int entries = 3 + local_patch_count;
4a5df386 1930 int i;
fe1c5936 1931 static const char non_bincompat_options[] =
4a5df386
NC
1932# ifdef DEBUGGING
1933 " DEBUGGING"
1934# endif
1935# ifdef NO_MATHOMS
0d311fbe 1936 " NO_MATHOMS"
4a5df386 1937# endif
59b86f4b
DM
1938# ifdef NO_HASH_SEED
1939 " NO_HASH_SEED"
1940# endif
3b0e4ee2
MB
1941# ifdef NO_TAINT_SUPPORT
1942 " NO_TAINT_SUPPORT"
1943# endif
cb26ef7a
MB
1944# ifdef PERL_BOOL_AS_CHAR
1945 " PERL_BOOL_AS_CHAR"
1946# endif
93c10d60
FC
1947# ifdef PERL_COPY_ON_WRITE
1948 " PERL_COPY_ON_WRITE"
1949# endif
4a5df386
NC
1950# ifdef PERL_DISABLE_PMC
1951 " PERL_DISABLE_PMC"
1952# endif
1953# ifdef PERL_DONT_CREATE_GVSV
1954 " PERL_DONT_CREATE_GVSV"
1955# endif
9a044a43
NC
1956# ifdef PERL_EXTERNAL_GLOB
1957 " PERL_EXTERNAL_GLOB"
1958# endif
59b86f4b
DM
1959# ifdef PERL_HASH_FUNC_SIPHASH
1960 " PERL_HASH_FUNC_SIPHASH"
1961# endif
1962# ifdef PERL_HASH_FUNC_SDBM
1963 " PERL_HASH_FUNC_SDBM"
1964# endif
1965# ifdef PERL_HASH_FUNC_DJB2
1966 " PERL_HASH_FUNC_DJB2"
1967# endif
1968# ifdef PERL_HASH_FUNC_SUPERFAST
1969 " PERL_HASH_FUNC_SUPERFAST"
1970# endif
1971# ifdef PERL_HASH_FUNC_MURMUR3
1972 " PERL_HASH_FUNC_MURMUR3"
1973# endif
1974# ifdef PERL_HASH_FUNC_ONE_AT_A_TIME
1975 " PERL_HASH_FUNC_ONE_AT_A_TIME"
1976# endif
1977# ifdef PERL_HASH_FUNC_ONE_AT_A_TIME_HARD
1978 " PERL_HASH_FUNC_ONE_AT_A_TIME_HARD"
1979# endif
1980# ifdef PERL_HASH_FUNC_ONE_AT_A_TIME_OLD
1981 " PERL_HASH_FUNC_ONE_AT_A_TIME_OLD"
1982# endif
4a5df386
NC
1983# ifdef PERL_IS_MINIPERL
1984 " PERL_IS_MINIPERL"
1985# endif
1986# ifdef PERL_MALLOC_WRAP
1987 " PERL_MALLOC_WRAP"
1988# endif
1989# ifdef PERL_MEM_LOG
1990 " PERL_MEM_LOG"
1991# endif
1992# ifdef PERL_MEM_LOG_NOIMPL
1993 " PERL_MEM_LOG_NOIMPL"
1994# endif
4e499636
DM
1995# ifdef PERL_OP_PARENT
1996 " PERL_OP_PARENT"
1997# endif
59b86f4b
DM
1998# ifdef PERL_PERTURB_KEYS_DETERMINISTIC
1999 " PERL_PERTURB_KEYS_DETERMINISTIC"
2000# endif
2001# ifdef PERL_PERTURB_KEYS_DISABLED
2002 " PERL_PERTURB_KEYS_DISABLED"
2003# endif
2004# ifdef PERL_PERTURB_KEYS_RANDOM
2005 " PERL_PERTURB_KEYS_RANDOM"
2006# endif
c3cf41ec
NC
2007# ifdef PERL_PRESERVE_IVUV
2008 " PERL_PRESERVE_IVUV"
2009# endif
c051e30b
NC
2010# ifdef PERL_RELOCATABLE_INCPUSH
2011 " PERL_RELOCATABLE_INCPUSH"
2012# endif
4a5df386
NC
2013# ifdef PERL_USE_DEVEL
2014 " PERL_USE_DEVEL"
2015# endif
2016# ifdef PERL_USE_SAFE_PUTENV
2017 " PERL_USE_SAFE_PUTENV"
2018# endif
102b7877 2019# ifdef SILENT_NO_TAINT_SUPPORT
81f816b3 2020 " SILENT_NO_TAINT_SUPPORT"
102b7877 2021# endif
a3749cf3
NC
2022# ifdef UNLINK_ALL_VERSIONS
2023 " UNLINK_ALL_VERSIONS"
2024# endif
de618ee4
NC
2025# ifdef USE_ATTRIBUTES_FOR_PERLIO
2026 " USE_ATTRIBUTES_FOR_PERLIO"
2027# endif
4a5df386
NC
2028# ifdef USE_FAST_STDIO
2029 " USE_FAST_STDIO"
2030# endif
98548bdf
NC
2031# ifdef USE_LOCALE
2032 " USE_LOCALE"
2033# endif
98548bdf
NC
2034# ifdef USE_LOCALE_CTYPE
2035 " USE_LOCALE_CTYPE"
2036# endif
6937817d
DD
2037# ifdef WIN32_NO_REGISTRY
2038 " USE_NO_REGISTRY"
2039# endif
5a8d8935
NC
2040# ifdef USE_PERL_ATOF
2041 " USE_PERL_ATOF"
2042# endif
0d311fbe
NC
2043# ifdef USE_SITECUSTOMIZE
2044 " USE_SITECUSTOMIZE"
2045# endif
25a72d73
KW
2046# ifdef USE_THREAD_SAFE_LOCALE
2047 " USE_THREAD_SAFE_LOCALE"
2048# endif
4a5df386
NC
2049 ;
2050 PERL_UNUSED_ARG(cv);
d3db1514 2051 PERL_UNUSED_VAR(items);
4a5df386
NC
2052
2053 EXTEND(SP, entries);
2054
2055 PUSHs(sv_2mortal(newSVpv(PL_bincompat_options, 0)));
2056 PUSHs(Perl_newSVpvn_flags(aTHX_ non_bincompat_options,
2057 sizeof(non_bincompat_options) - 1, SVs_TEMP));
2058
6baa8dbd
NT
2059#ifndef PERL_BUILD_DATE
2060# ifdef __DATE__
2061# ifdef __TIME__
2062# define PERL_BUILD_DATE __DATE__ " " __TIME__
2063# else
2064# define PERL_BUILD_DATE __DATE__
2065# endif
2066# endif
2067#endif
2068
2069#ifdef PERL_BUILD_DATE
4a5df386 2070 PUSHs(Perl_newSVpvn_flags(aTHX_
6baa8dbd 2071 STR_WITH_LEN("Compiled at " PERL_BUILD_DATE),
4a5df386 2072 SVs_TEMP));
4a5df386
NC
2073#else
2074 PUSHs(&PL_sv_undef);
2075#endif
2076
4a5df386
NC
2077 for (i = 1; i <= local_patch_count; i++) {
2078 /* This will be an undef, if PL_localpatches[i] is NULL. */
2079 PUSHs(sv_2mortal(newSVpv(PL_localpatches[i], 0)));
2080 }
2081
2082 XSRETURN(entries);
2083}
2084
be71fc8f
NC
2085#define INCPUSH_UNSHIFT 0x01
2086#define INCPUSH_ADD_OLD_VERS 0x02
2087#define INCPUSH_ADD_VERSIONED_SUB_DIRS 0x04
2088#define INCPUSH_ADD_ARCHONLY_SUB_DIRS 0x08
2089#define INCPUSH_NOT_BASEDIR 0x10
2090#define INCPUSH_CAN_RELOCATE 0x20
1e3208d8
NC
2091#define INCPUSH_ADD_SUB_DIRS \
2092 (INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_ADD_ARCHONLY_SUB_DIRS)
e28f3139 2093
312caa8e 2094STATIC void *
14dd3ad8 2095S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
312caa8e 2096{
27da23d5 2097 dVAR;
2f9285f8 2098 PerlIO *rsfp;
312caa8e 2099 int argc = PL_origargc;
8f42b153 2100 char **argv = PL_origargv;
e1ec3a88 2101 const char *scriptname = NULL;
402582ca 2102 bool dosearch = FALSE;
eb578fdb 2103 char c;
737c24fc 2104 bool doextract = FALSE;
bd61b366 2105 const char *cddir = NULL;
ab019eaa 2106#ifdef USE_SITECUSTOMIZE
20ef40cf 2107 bool minus_f = FALSE;
ab019eaa 2108#endif
95670bde 2109 SV *linestr_sv = NULL;
5486870f 2110 bool add_read_e_script = FALSE;
87606032 2111 U32 lex_start_flags = 0;
009d90df 2112
ca7b837b 2113 PERL_SET_PHASE(PERL_PHASE_START);
9ebf26ad 2114
6224f72b 2115 init_main_stash();
54310121 2116
c7030b81
NC
2117 {
2118 const char *s;
6224f72b
GS
2119 for (argc--,argv++; argc > 0; argc--,argv++) {
2120 if (argv[0][0] != '-' || !argv[0][1])
2121 break;
6224f72b
GS
2122 s = argv[0]+1;
2123 reswitch:
47f56822 2124 switch ((c = *s)) {
729a02f2 2125 case 'C':
1d5472a9
GS
2126#ifndef PERL_STRICT_CR
2127 case '\r':
2128#endif
6224f72b
GS
2129 case ' ':
2130 case '0':
2131 case 'F':
2132 case 'a':
2133 case 'c':
2134 case 'd':
2135 case 'D':
2136 case 'h':
2137 case 'i':
2138 case 'l':
2139 case 'M':
2140 case 'm':
2141 case 'n':
2142 case 'p':
2143 case 's':
2144 case 'u':
2145 case 'U':
2146 case 'v':
599cee73
PM
2147 case 'W':
2148 case 'X':
6224f72b 2149 case 'w':
97bd5664 2150 if ((s = moreswitches(s)))
6224f72b
GS
2151 goto reswitch;
2152 break;
33b78306 2153
1dbad523 2154 case 't':
dc6d7f5c 2155#if defined(SILENT_NO_TAINT_SUPPORT)
284167a5 2156 /* silently ignore */
dc6d7f5c 2157#elif defined(NO_TAINT_SUPPORT)
3231f579 2158 Perl_croak_nocontext("This perl was compiled without taint support. "
284167a5
S
2159 "Cowardly refusing to run with -t or -T flags");
2160#else
22f7c9c9 2161 CHECK_MALLOC_TOO_LATE_FOR('t');
284167a5
S
2162 if( !TAINTING_get ) {
2163 TAINT_WARN_set(TRUE);
2164 TAINTING_set(TRUE);
317ea90d 2165 }
284167a5 2166#endif
317ea90d
MS
2167 s++;
2168 goto reswitch;
6224f72b 2169 case 'T':
dc6d7f5c 2170#if defined(SILENT_NO_TAINT_SUPPORT)
284167a5 2171 /* silently ignore */
dc6d7f5c 2172#elif defined(NO_TAINT_SUPPORT)
3231f579 2173 Perl_croak_nocontext("This perl was compiled without taint support. "
284167a5
S
2174 "Cowardly refusing to run with -t or -T flags");
2175#else
22f7c9c9 2176 CHECK_MALLOC_TOO_LATE_FOR('T');
284167a5
S
2177 TAINTING_set(TRUE);
2178 TAINT_WARN_set(FALSE);
2179#endif
6224f72b
GS
2180 s++;
2181 goto reswitch;
f86702cc 2182
bc9b29db
RH
2183 case 'E':
2184 PL_minus_E = TRUE;
924ba076 2185 /* FALLTHROUGH */
6224f72b 2186 case 'e':
f20b2998 2187 forbid_setid('e', FALSE);
3280af22 2188 if (!PL_e_script) {
396482e1 2189 PL_e_script = newSVpvs("");
5486870f 2190 add_read_e_script = TRUE;
6224f72b
GS
2191 }
2192 if (*++s)
3280af22 2193 sv_catpv(PL_e_script, s);
6224f72b 2194 else if (argv[1]) {
3280af22 2195 sv_catpv(PL_e_script, argv[1]);
6224f72b
GS
2196 argc--,argv++;
2197 }
2198 else
47f56822 2199 Perl_croak(aTHX_ "No code specified for -%c", c);
396482e1 2200 sv_catpvs(PL_e_script, "\n");
6224f72b 2201 break;
afe37c7d 2202
20ef40cf 2203 case 'f':
f5542d3a 2204#ifdef USE_SITECUSTOMIZE
20ef40cf 2205 minus_f = TRUE;
f5542d3a 2206#endif
20ef40cf
GA
2207 s++;
2208 goto reswitch;
2209
6224f72b 2210 case 'I': /* -I handled both here and in moreswitches() */
f20b2998 2211 forbid_setid('I', FALSE);
bd61b366 2212 if (!*++s && (s=argv[1]) != NULL) {
6224f72b
GS
2213 argc--,argv++;
2214 }
6224f72b 2215 if (s && *s) {
0df16ed7 2216 STRLEN len = strlen(s);
55b4bc1c 2217 incpush(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS);
0df16ed7
GS
2218 }
2219 else
a67e862a 2220 Perl_croak(aTHX_ "No directory specified for -I");
6224f72b 2221 break;
6224f72b 2222 case 'S':
f20b2998 2223 forbid_setid('S', FALSE);
6224f72b
GS
2224 dosearch = TRUE;
2225 s++;
2226 goto reswitch;
2227 case 'V':
7edfd0ef
NC
2228 {
2229 SV *opts_prog;
2230
7edfd0ef 2231 if (*++s != ':') {
37ca4a5b 2232 opts_prog = newSVpvs("use Config; Config::_V()");
7edfd0ef
NC
2233 }
2234 else {
2235 ++s;
2236 opts_prog = Perl_newSVpvf(aTHX_
37ca4a5b 2237 "use Config; Config::config_vars(qw%c%s%c)",
7edfd0ef
NC
2238 0, s, 0);
2239 s += strlen(s);
2240 }
37ca4a5b 2241 Perl_av_create_and_push(aTHX_ &PL_preambleav, opts_prog);
7edfd0ef
NC
2242 /* don't look for script or read stdin */
2243 scriptname = BIT_BUCKET;
2244 goto reswitch;
6224f72b 2245 }
6224f72b 2246 case 'x':
737c24fc 2247 doextract = TRUE;
6224f72b 2248 s++;
304334da 2249 if (*s)
f4c556ac 2250 cddir = s;
6224f72b
GS
2251 break;
2252 case 0:
2253 break;
2254 case '-':
2255 if (!*++s || isSPACE(*s)) {
2256 argc--,argv++;
2257 goto switch_end;
2258 }
ee8bc8b7
NC
2259 /* catch use of gnu style long options.
2260 Both of these exit immediately. */
2261 if (strEQ(s, "version"))
2262 minus_v();
2263 if (strEQ(s, "help"))
2264 usage();
6224f72b 2265 s--;
924ba076 2266 /* FALLTHROUGH */
6224f72b 2267 default:
cea2e8a9 2268 Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s);
8d063cd8
LW
2269 }
2270 }
c7030b81
NC
2271 }
2272
6224f72b 2273 switch_end:
54310121 2274
c7030b81
NC
2275 {
2276 char *s;
2277
f675dbe5
CB
2278 if (
2279#ifndef SECURE_INTERNAL_GETENV
284167a5 2280 !TAINTING_get &&
f675dbe5 2281#endif
cf756827 2282 (s = PerlEnv_getenv("PERL5OPT")))
0df16ed7 2283 {
74288ac8
GS
2284 while (isSPACE(*s))
2285 s++;
317ea90d 2286 if (*s == '-' && *(s+1) == 'T') {
dc6d7f5c 2287#if defined(SILENT_NO_TAINT_SUPPORT)
284167a5 2288 /* silently ignore */
dc6d7f5c 2289#elif defined(NO_TAINT_SUPPORT)
3231f579 2290 Perl_croak_nocontext("This perl was compiled without taint support. "
284167a5
S
2291 "Cowardly refusing to run with -t or -T flags");
2292#else
22f7c9c9 2293 CHECK_MALLOC_TOO_LATE_FOR('T');
284167a5
S
2294 TAINTING_set(TRUE);
2295 TAINT_WARN_set(FALSE);
2296#endif
317ea90d 2297 }
74288ac8 2298 else {
bd61b366 2299 char *popt_copy = NULL;
74288ac8 2300 while (s && *s) {
54913509 2301 const char *d;
74288ac8
GS
2302 while (isSPACE(*s))
2303 s++;
2304 if (*s == '-') {
2305 s++;
2306 if (isSPACE(*s))
2307 continue;
2308 }
4ea8f8fb 2309 d = s;
74288ac8
GS
2310 if (!*s)
2311 break;
4aada8b9 2312 if (!memCHRs("CDIMUdmtwW", *s))
cea2e8a9 2313 Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
4ea8f8fb
MS
2314 while (++s && *s) {
2315 if (isSPACE(*s)) {
cf756827 2316 if (!popt_copy) {
bfa6c418
NC
2317 popt_copy = SvPVX(sv_2mortal(newSVpv(d,0)));
2318 s = popt_copy + (s - d);
2319 d = popt_copy;
cf756827 2320 }
4ea8f8fb
MS
2321 *s++ = '\0';
2322 break;
2323 }
2324 }
1c4db469 2325 if (*d == 't') {
dc6d7f5c 2326#if defined(SILENT_NO_TAINT_SUPPORT)
284167a5 2327 /* silently ignore */
dc6d7f5c 2328#elif defined(NO_TAINT_SUPPORT)
3231f579 2329 Perl_croak_nocontext("This perl was compiled without taint support. "
284167a5
S
2330 "Cowardly refusing to run with -t or -T flags");
2331#else
2332 if( !TAINTING_get) {
2333 TAINT_WARN_set(TRUE);
2334 TAINTING_set(TRUE);
317ea90d 2335 }
284167a5 2336#endif
1c4db469 2337 } else {
97bd5664 2338 moreswitches(d);
1c4db469 2339 }
6224f72b 2340 }
6224f72b
GS
2341 }
2342 }
c7030b81 2343 }
a0d0e21e 2344
d6295071
TC
2345#ifndef NO_PERL_INTERNAL_RAND_SEED
2346 /* If we're not set[ug]id, we might have honored
2347 PERL_INTERNAL_RAND_SEED in perl_construct().
2348 At this point command-line options have been parsed, so if
2349 we're now tainting and not set[ug]id re-seed.
2350 This could possibly be wasteful if PERL_INTERNAL_RAND_SEED is invalid,
2351 but avoids duplicating the logic from perl_construct().
2352 */
3337f21a 2353 if (TAINT_get &&
d6295071
TC
2354 PerlProc_getuid() == PerlProc_geteuid() &&
2355 PerlProc_getgid() == PerlProc_getegid()) {
2356 Perl_drand48_init_r(&PL_internal_random_state, seed());
2357 }
2358#endif
2359
c29067d7
CH
2360 /* Set $^X early so that it can be used for relocatable paths in @INC */
2361 /* and for SITELIB_EXP in USE_SITECUSTOMIZE */
284167a5 2362 assert (!TAINT_get);
c29067d7 2363 TAINT;
e2051532 2364 set_caret_X();
c29067d7
CH
2365 TAINT_NOT;
2366
43c0c913 2367#if defined(USE_SITECUSTOMIZE)
20ef40cf 2368 if (!minus_f) {
43c0c913 2369 /* The games with local $! are to avoid setting errno if there is no
fc81b718
NC
2370 sitecustomize script. "q%c...%c", 0, ..., 0 becomes "q\0...\0",
2371 ie a q() operator with a NUL byte as a the delimiter. This avoids
2372 problems with pathnames containing (say) ' */
43c0c913
NC
2373# ifdef PERL_IS_MINIPERL
2374 AV *const inc = GvAV(PL_incgv);
2375 SV **const inc0 = inc ? av_fetch(inc, 0, FALSE) : NULL;
2376
2377 if (inc0) {
15870c5c
NC
2378 /* if lib/buildcustomize.pl exists, it should not fail. If it does,
2379 it should be reported immediately as a build failure. */
43c0c913
NC
2380 (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav,
2381 Perl_newSVpvf(aTHX_
147e3846 2382 "BEGIN { my $f = q%c%s%" SVf "/buildcustomize.pl%c; "
af26e4f2
FC
2383 "do {local $!; -f $f }"
2384 " and do $f || die $@ || qq '$f: $!' }",
5de87db5 2385 0, (TAINTING_get ? "./" : ""), SVfARG(*inc0), 0));
43c0c913
NC
2386 }
2387# else
2388 /* SITELIB_EXP is a function call on Win32. */
c29067d7 2389 const char *const raw_sitelib = SITELIB_EXP;
bac5c4fc
JD
2390 if (raw_sitelib) {
2391 /* process .../.. if PERL_RELOCATABLE_INC is defined */
2392 SV *sitelib_sv = mayberelocate(raw_sitelib, strlen(raw_sitelib),
2393 INCPUSH_CAN_RELOCATE);
2394 const char *const sitelib = SvPVX(sitelib_sv);
2395 (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav,
2396 Perl_newSVpvf(aTHX_
2397 "BEGIN { do {local $!; -f q%c%s/sitecustomize.pl%c} && do q%c%s/sitecustomize.pl%c }",
c1f6cd39
BF
2398 0, SVfARG(sitelib), 0,
2399 0, SVfARG(sitelib), 0));
bac5c4fc
JD
2400 assert (SvREFCNT(sitelib_sv) == 1);
2401 SvREFCNT_dec(sitelib_sv);
2402 }
43c0c913 2403# endif
20ef40cf
GA
2404 }
2405#endif
2406
6224f72b
GS
2407 if (!scriptname)
2408 scriptname = argv[0];
3280af22 2409 if (PL_e_script) {
6224f72b
GS
2410 argc++,argv--;
2411 scriptname = BIT_BUCKET; /* don't look for script or read stdin */
2412 }
bd61b366 2413 else if (scriptname == NULL) {
6224f72b
GS
2414#ifdef MSDOS
2415 if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
97bd5664 2416 moreswitches("h");
6224f72b
GS
2417#endif
2418 scriptname = "-";
2419 }
2420
284167a5 2421 assert (!TAINT_get);
2cace6ac 2422 init_perllib();
6224f72b 2423
a52eba0e 2424 {
f20b2998 2425 bool suidscript = FALSE;
829372d3 2426
8d113837 2427 rsfp = open_script(scriptname, dosearch, &suidscript);
c0b3891a
NC
2428 if (!rsfp) {
2429 rsfp = PerlIO_stdin();
87606032 2430 lex_start_flags = LEX_DONT_CLOSE_RSFP;
c0b3891a 2431 }
6224f72b 2432
b24bc095 2433 validate_suid(rsfp);
6224f72b 2434
64ca3a65 2435#ifndef PERL_MICRO
a52eba0e
NC
2436# if defined(SIGCHLD) || defined(SIGCLD)
2437 {
2438# ifndef SIGCHLD
2439# define SIGCHLD SIGCLD
2440# endif
2441 Sighandler_t sigstate = rsignal_state(SIGCHLD);
2442 if (sigstate == (Sighandler_t) SIG_IGN) {
a2a5de95
NC
2443 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
2444 "Can't ignore signal CHLD, forcing to default");
a52eba0e
NC
2445 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
2446 }
0b5b802d 2447 }
a52eba0e 2448# endif
64ca3a65 2449#endif
0b5b802d 2450
737c24fc 2451 if (doextract) {
faef540c 2452
f20b2998 2453 /* This will croak if suidscript is true, as -x cannot be used with
faef540c
NC
2454 setuid scripts. */
2455 forbid_setid('x', suidscript);
f20b2998 2456 /* Hence you can't get here if suidscript is true */
faef540c 2457
95670bde
NC
2458 linestr_sv = newSV_type(SVt_PV);
2459 lex_start_flags |= LEX_START_COPIED;
2f9285f8 2460 find_beginning(linestr_sv, rsfp);
a52eba0e
NC
2461 if (cddir && PerlDir_chdir( (char *)cddir ) < 0)
2462 Perl_croak(aTHX_ "Can't chdir to %s",cddir);
2463 }
f4c556ac 2464 }
6224f72b 2465
ea726b52 2466 PL_main_cv = PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
3280af22
NIS
2467 CvUNIQUE_on(PL_compcv);
2468
eacbb379 2469 CvPADLIST_set(PL_compcv, pad_new(0));
6224f72b 2470
dd69841b
BB
2471 PL_isarev = newHV();
2472
0c4f7ff0 2473 boot_core_PerlIO();
6224f72b 2474 boot_core_UNIVERSAL();
e1a479c5 2475 boot_core_mro();
4a5df386 2476 newXS("Internals::V", S_Internals_V, __FILE__);
6224f72b
GS
2477
2478 if (xsinit)
acfe0abc 2479 (*xsinit)(aTHX); /* in case linked C routines want magical variables */
64ca3a65 2480#ifndef PERL_MICRO
739a0b84 2481#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(SYMBIAN)
c5be433b 2482 init_os_extras();
6224f72b 2483#endif
64ca3a65 2484#endif
6224f72b 2485
29209bc5 2486#ifdef USE_SOCKS
1b9c9cf5
DH
2487# ifdef HAS_SOCKS5_INIT
2488 socks5_init(argv[0]);
2489# else
29209bc5 2490 SOCKSinit(argv[0]);
1b9c9cf5 2491# endif
ac27b0f5 2492#endif
29209bc5 2493
6224f72b
GS
2494 init_predump_symbols();
2495 /* init_postdump_symbols not currently designed to be called */
2496 /* more than once (ENV isn't cleared first, for example) */
2497 /* But running with -u leaves %ENV & @ARGV undefined! XXX */
3280af22 2498 if (!PL_do_undump)
6224f72b
GS
2499 init_postdump_symbols(argc,argv,env);
2500
27da23d5
JH
2501 /* PL_unicode is turned on by -C, or by $ENV{PERL_UNICODE},
2502 * or explicitly in some platforms.
73e1bd1a 2503 * PL_utf8locale is conditionally turned on by
085a54d9 2504 * locale.c:Perl_init_i18nl10n() if the environment
a05d7ebb 2505 * look like the user wants to use UTF-8. */
a0fd4948 2506#if defined(__SYMBIAN32__)
27da23d5
JH
2507 PL_unicode = PERL_UNICODE_STD_FLAG; /* See PERL_SYMBIAN_CONSOLE_UTF8. */
2508#endif
e27b5b51 2509# ifndef PERL_IS_MINIPERL
06e66572
JH
2510 if (PL_unicode) {
2511 /* Requires init_predump_symbols(). */
a05d7ebb 2512 if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) {
06e66572
JH
2513 IO* io;
2514 PerlIO* fp;
2515 SV* sv;
2516
a05d7ebb 2517 /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR
06e66572 2518 * and the default open disciplines. */
a05d7ebb
JH
2519 if ((PL_unicode & PERL_UNICODE_STDIN_FLAG) &&
2520 PL_stdingv && (io = GvIO(PL_stdingv)) &&
2521 (fp = IoIFP(io)))
2522 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2523 if ((PL_unicode & PERL_UNICODE_STDOUT_FLAG) &&
2524 PL_defoutgv && (io = GvIO(PL_defoutgv)) &&
2525 (fp = IoOFP(io)))
2526 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2527 if ((PL_unicode & PERL_UNICODE_STDERR_FLAG) &&
2528 PL_stderrgv && (io = GvIO(PL_stderrgv)) &&
2529 (fp = IoOFP(io)))
2530 PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2531 if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) &&
fafc274c
NC
2532 (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD|GV_NOTQUAL,
2533 SVt_PV)))) {
a05d7ebb
JH
2534 U32 in = PL_unicode & PERL_UNICODE_IN_FLAG;
2535 U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG;
2536 if (in) {
2537 if (out)
76f68e9b 2538 sv_setpvs(sv, ":utf8\0:utf8");
a05d7ebb 2539 else
76f68e9b 2540 sv_setpvs(sv, ":utf8\0");
a05d7ebb
JH
2541 }
2542 else if (out)
76f68e9b 2543 sv_setpvs(sv, "\0:utf8");
a05d7ebb
JH
2544 SvSETMAGIC(sv);
2545 }
b310b053
JH
2546 }
2547 }
e27b5b51 2548#endif
b310b053 2549
c7030b81
NC
2550 {
2551 const char *s;
4ffa73a3
JH
2552 if ((s = PerlEnv_getenv("PERL_SIGNALS"))) {
2553 if (strEQ(s, "unsafe"))
2554 PL_signals |= PERL_SIGNALS_UNSAFE_FLAG;
2555 else if (strEQ(s, "safe"))
2556 PL_signals &= ~PERL_SIGNALS_UNSAFE_FLAG;
2557 else
2558 Perl_croak(aTHX_ "PERL_SIGNALS illegal: \"%s\"", s);
2559 }
c7030b81 2560 }
4ffa73a3 2561
81d86705 2562
87606032 2563 lex_start(linestr_sv, rsfp, lex_start_flags);
d2687c98 2564 SvREFCNT_dec(linestr_sv);
95670bde 2565
219f7226 2566 PL_subname = newSVpvs("main");
6224f72b 2567
5486870f
DM
2568 if (add_read_e_script)
2569 filter_add(read_e_script, NULL);
2570
6224f72b
GS
2571 /* now parse the script */
2572
93189314 2573 SETERRNO(0,SS_NORMAL);
28ac2b49 2574 if (yyparse(GRAMPROG) || PL_parser->error_count) {
c77da5ff 2575 abort_execution("", PL_origfilename);
6224f72b 2576 }
57843af0 2577 CopLINE_set(PL_curcop, 0);
03d9f026 2578 SET_CURSTASH(PL_defstash);
3280af22
NIS
2579 if (PL_e_script) {
2580 SvREFCNT_dec(PL_e_script);
a0714e2c 2581 PL_e_script = NULL;
6224f72b
GS
2582 }
2583
3280af22 2584 if (PL_do_undump)
6224f72b
GS
2585 my_unexec();
2586
57843af0
GS
2587 if (isWARN_ONCE) {
2588 SAVECOPFILE(PL_curcop);
2589 SAVECOPLINE(PL_curcop);
3280af22 2590 gv_check(PL_defstash);
57843af0 2591 }
6224f72b
GS
2592
2593 LEAVE;
2594 FREETMPS;
2595
2596#ifdef MYMALLOC
f6a607bc
RGS
2597 {
2598 const char *s;
22ff3130
HS
2599 UV uv;
2600 s = PerlEnv_getenv("PERL_DEBUG_MSTATS");
2601 if (s && grok_atoUV(s, &uv, NULL) && uv >= 2)
96e440d2 2602 dump_mstats("after compilation:");
f6a607bc 2603 }
6224f72b
GS
2604#endif
2605
2606 ENTER;
febb3a6d 2607 PL_restartjmpenv = NULL;
3280af22 2608 PL_restartop = 0;
312caa8e 2609 return NULL;
6224f72b
GS
2610}
2611
954c1994 2612/*
44170c9a 2613=for apidoc perl_run
0301e899
Z
2614
2615Tells a Perl interpreter to run its main program. See L<perlembed>
2616for a tutorial.
2617
2618C<my_perl> points to the Perl interpreter. It must have been previously
2619created through the use of L</perl_alloc> and L</perl_construct>, and
2620initialised through L</perl_parse>. This function should not be called
2621if L</perl_parse> returned a non-zero value, indicating a failure in
2622initialisation or compilation.
2623
2624This function executes code in C<INIT> blocks, and then executes the
2625main program. The code to be executed is that established by the prior
2626call to L</perl_parse>. If the interpreter's C<PL_exit_flags> word
2627does not have the C<PERL_EXIT_DESTRUCT_END> flag set, then this function
2628will also execute code in C<END> blocks. If it is desired to make any
2629further use of the interpreter after calling this function, then C<END>
2630blocks should be postponed to L</perl_destruct> time by setting that flag.
2631
2632Returns an integer of slightly tricky interpretation. The correct use
2633of the return value is as a truth value indicating whether the program
2634terminated non-locally. If zero is returned, this indicates that
2635the program ran to completion, and it is safe to make other use of the
2636interpreter (provided that the C<PERL_EXIT_DESTRUCT_END> flag was set as
2637described above). If a non-zero value is returned, this indicates that
2638the interpreter wants to terminate early. The interpreter should not be
2639just abandoned because of this desire to terminate; the caller should
2640proceed to shut the interpreter down cleanly with L</perl_destruct>
2641and free it with L</perl_free>.
2642
2643For historical reasons, the non-zero return value also attempts to
2644be a suitable value to pass to the C library function C<exit> (or to
2645return from C<main>), to serve as an exit code indicating the nature of
2646the way the program terminated. However, this isn't portable, due to
2647differing exit code conventions. An attempt is made to return an exit
2648code of the type required by the host operating system, but because
2649it is constrained to be non-zero, it is not necessarily possible to
2650indicate every type of exit. It is only reliable on Unix, where a zero
2651exit code can be augmented with a set bit that will be ignored. In any
2652case, this function is not the correct place to acquire an exit code:
2653one should get that from L</perl_destruct>.
954c1994
GS
2654
2655=cut
2656*/
2657
6224f72b 2658int
0cb96387 2659perl_run(pTHXx)
6224f72b 2660{
6224f72b 2661 I32 oldscope;
9f960638 2662 int ret = 0;
db36c5a1 2663 dJMPENV;
6224f72b 2664
7918f24d
NC
2665 PERL_ARGS_ASSERT_PERL_RUN;
2666#ifndef MULTIPLICITY
ed6c66dd 2667 PERL_UNUSED_ARG(my_perl);
7918f24d 2668#endif
9d4ba2ae 2669
3280af22 2670 oldscope = PL_scopestack_ix;
96e176bf
CL
2671#ifdef VMS
2672 VMSISH_HUSHED = 0;
2673#endif
6224f72b 2674
14dd3ad8 2675 JMPENV_PUSH(ret);
6224f72b
GS
2676 switch (ret) {
2677 case 1:
2678 cxstack_ix = -1; /* start context stack again */
312caa8e 2679 goto redo_body;
14dd3ad8 2680 case 0: /* normal completion */
14dd3ad8
GS
2681 redo_body:
2682 run_body(oldscope);
9f960638 2683 /* FALLTHROUGH */
14dd3ad8 2684 case 2: /* my_exit() */
3280af22 2685 while (PL_scopestack_ix > oldscope)
6224f72b
GS
2686 LEAVE;
2687 FREETMPS;
03d9f026 2688 SET_CURSTASH(PL_defstash);
3a1ee7e8 2689 if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) &&
9ebf26ad 2690 PL_endav && !PL_minus_c) {
ca7b837b 2691 PERL_SET_PHASE(PERL_PHASE_END);
31d77e54 2692 call_list(oldscope, PL_endav);
9ebf26ad 2693 }
6224f72b
GS
2694#ifdef MYMALLOC
2695 if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
2696 dump_mstats("after execution: ");
2697#endif
9f960638 2698 ret = STATUS_EXIT;
14dd3ad8 2699 break;
6224f72b 2700 case 3:
312caa8e
CS
2701 if (PL_restartop) {
2702 POPSTACK_TO(PL_mainstack);
2703 goto redo_body;
6224f72b 2704 }
5637ef5b 2705 PerlIO_printf(Perl_error_log, "panic: restartop in perl_run\n");
312caa8e 2706 FREETMPS;
14dd3ad8
GS
2707 ret = 1;
2708 break;
6224f72b
GS
2709 }
2710
14dd3ad8
GS
2711 JMPENV_POP;
2712 return ret;
312caa8e
CS
2713}
2714
dd374669 2715STATIC void
14dd3ad8
GS
2716S_run_body(pTHX_ I32 oldscope)
2717{
d3b97530
DM
2718 DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support (0x%x).\n",
2719 PL_sawampersand ? "Enabling" : "Omitting",
2720 (unsigned int)(PL_sawampersand)));
6224f72b 2721
3280af22 2722 if (!PL_restartop) {
cf2782cd 2723#ifdef DEBUGGING
f0e3f042
CS
2724 if (DEBUG_x_TEST || DEBUG_B_TEST)
2725 dump_all_perl(!DEBUG_B_TEST);
ecae49c0
NC
2726 if (!DEBUG_q_TEST)
2727 PERL_DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
cf2782cd 2728#endif
6224f72b 2729
3280af22 2730 if (PL_minus_c) {
bf49b057 2731 PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
6224f72b
GS
2732 my_exit(0);
2733 }
3280af22 2734 if (PERLDB_SINGLE && PL_DBsingle)
a6d69523 2735 PL_DBsingle_iv = 1;
9ebf26ad 2736 if (PL_initav) {
ca7b837b 2737 PERL_SET_PHASE(PERL_PHASE_INIT);
3280af22 2738 call_list(oldscope, PL_initav);
9ebf26ad 2739 }
f1fac472 2740#ifdef PERL_DEBUG_READONLY_OPS
3107b51f
FC
2741 if (PL_main_root && PL_main_root->op_slabbed)
2742 Slab_to_ro(OpSLAB(PL_main_root));
f1fac472 2743#endif
6224f72b
GS
2744 }
2745
2746 /* do it */
2747
ca7b837b 2748 PERL_SET_PHASE(PERL_PHASE_RUN);
9ebf26ad 2749
3280af22 2750 if (PL_restartop) {
febb3a6d 2751 PL_restartjmpenv = NULL;
533c011a 2752 PL_op = PL_restartop;
3280af22 2753 PL_restartop = 0;
cea2e8a9 2754 CALLRUNOPS(aTHX);
6224f72b 2755 }
3280af22
NIS
2756 else if (PL_main_start) {
2757 CvDEPTH(PL_main_cv) = 1;
533c011a 2758 PL_op = PL_main_start;
cea2e8a9 2759 CALLRUNOPS(aTHX);
6224f72b 2760 }
f6b3007c 2761 my_exit(0);
e5964223 2762 NOT_REACHED; /* NOTREACHED */
6224f72b
GS
2763}
2764
954c1994 2765/*
ccfc67b7
JH
2766=head1 SV Manipulation Functions
2767
44170c9a 2768=for apidoc get_sv
954c1994 2769
64ace3f8 2770Returns the SV of the specified Perl scalar. C<flags> are passed to
72d33970 2771C<gv_fetchpv>. If C<GV_ADD> is set and the
64ace3f8
NC
2772Perl variable does not exist then it will be created. If C<flags> is zero
2773and the variable does not exist then NULL is returned.
954c1994
GS
2774
2775=cut
2776*/
2777
6224f72b 2778SV*
64ace3f8 2779Perl_get_sv(pTHX_ const char *name, I32 flags)
6224f72b
GS
2780{
2781 GV *gv;
7918f24d
NC
2782
2783 PERL_ARGS_ASSERT_GET_SV;
2784
64ace3f8 2785 gv = gv_fetchpv(name, flags, SVt_PV);
6224f72b
GS
2786 if (gv)
2787 return GvSV(gv);
a0714e2c 2788 return NULL;
6224f72b
GS
2789}
2790
954c1994 2791/*
ccfc67b7
JH
2792=head1 Array Manipulation Functions
2793
44170c9a 2794=for apidoc get_av
954c1994 2795
f0b90de1
SF
2796Returns the AV of the specified Perl global or package array with the given
2797name (so it won't work on lexical variables). C<flags> are passed
72d33970 2798to C<gv_fetchpv>. If C<GV_ADD> is set and the
cbfd0a87
NC
2799Perl variable does not exist then it will be created. If C<flags> is zero
2800and the variable does not exist then NULL is returned.
954c1994 2801
f0b90de1
SF
2802Perl equivalent: C<@{"$name"}>.
2803
954c1994
GS
2804=cut
2805*/
2806
6224f72b 2807AV*
cbfd0a87 2808Perl_get_av(pTHX_ const char *name, I32 flags)
6224f72b 2809{
cbfd0a87 2810 GV* const gv = gv_fetchpv(name, flags, SVt_PVAV);
7918f24d
NC
2811
2812 PERL_ARGS_ASSERT_GET_AV;
2813
cbfd0a87 2814 if (flags)
6224f72b
GS
2815 return GvAVn(gv);
2816 if (gv)
2817 return GvAV(gv);
7d49f689 2818 return NULL;
6224f72b
GS
2819}
2820
954c1994 2821/*
ccfc67b7
JH
2822=head1 Hash Manipulation Functions
2823
44170c9a 2824=for apidoc get_hv
954c1994 2825
6673a63c 2826Returns the HV of the specified Perl hash. C<flags> are passed to
72d33970 2827C<gv_fetchpv>. If C<GV_ADD> is set and the
6673a63c 2828Perl variable does not exist then it will be created. If C<flags> is zero
796b6530 2829and the variable does not exist then C<NULL> is returned.
954c1994
GS
2830
2831=cut
2832*/
2833
6224f72b 2834HV*
6673a63c 2835Perl_get_hv(pTHX_ const char *name, I32 flags)
6224f72b 2836{
6673a63c 2837 GV* const gv = gv_fetchpv(name, flags, SVt_PVHV);
7918f24d
NC
2838
2839 PERL_ARGS_ASSERT_GET_HV;
2840
6673a63c 2841 if (flags)
a0d0e21e
LW
2842 return GvHVn(gv);
2843 if (gv)
2844 return GvHV(gv);
5c284bb0 2845 return NULL;
a0d0e21e
LW
2846}
2847
954c1994 2848/*
ccfc67b7
JH
2849=head1 CV Manipulation Functions
2850
44170c9a 2851=for apidoc get_cvn_flags
780a5241
NC
2852
2853Returns the CV of the specified Perl subroutine. C<flags> are passed to
72d33970 2854C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not
780a5241
NC
2855exist then it will be declared (which has the same effect as saying
2856C<sub name;>). If C<GV_ADD> is not set and the subroutine does not exist
2857then NULL is returned.
2858
44170c9a 2859=for apidoc get_cv
954c1994 2860
780a5241 2861Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
954c1994
GS
2862
2863=cut
2864*/
2865
a0d0e21e 2866CV*
780a5241 2867Perl_get_cvn_flags(pTHX_ const char *name, STRLEN len, I32 flags)
a0d0e21e 2868{
780a5241 2869 GV* const gv = gv_fetchpvn_flags(name, len, flags, SVt_PVCV);
7918f24d
NC
2870
2871 PERL_ARGS_ASSERT_GET_CVN_FLAGS;
2872
a385812b 2873 if (gv && UNLIKELY(SvROK(gv)) && SvTYPE(SvRV((SV *)gv)) == SVt_PVCV)
e05a85b2 2874 return (CV*)SvRV((SV *)gv);
a385812b 2875
334dda80
FC
2876 /* XXX this is probably not what they think they're getting.
2877 * It has the same effect as "sub name;", i.e. just a forward
2878 * declaration! */
780a5241 2879 if ((flags & ~GV_NOADD_MASK) && !GvCVu(gv)) {
186a5ba8 2880 return newSTUB(gv,0);
780a5241 2881 }
a0d0e21e 2882 if (gv)
8ebc5c01 2883 return GvCVu(gv);
601f1833 2884 return NULL;
a0d0e21e
LW
2885}
2886
2c67934f
NC
2887/* Nothing in core calls this now, but we can't replace it with a macro and
2888 move it to mathoms.c as a macro would evaluate name twice. */
780a5241
NC
2889CV*
2890Perl_get_cv(pTHX_ const char *name, I32 flags)
2891{
7918f24d
NC
2892 PERL_ARGS_ASSERT_GET_CV;
2893
780a5241
NC
2894 return get_cvn_flags(name, strlen(name), flags);
2895}
2896
79072805
LW
2897/* Be sure to refetch the stack pointer after calling these routines. */
2898
954c1994 2899/*
ccfc67b7
JH
2900
2901=head1 Callback Functions
2902
44170c9a 2903=for apidoc call_argv
954c1994 2904
f0b90de1 2905Performs a callback to the specified named and package-scoped Perl subroutine
796b6530 2906with C<argv> (a C<NULL>-terminated array of strings) as arguments. See
72d33970 2907L<perlcall>.
f0b90de1
SF
2908
2909Approximate Perl equivalent: C<&{"$sub_name"}(@$argv)>.
954c1994
GS
2910
2911=cut
2912*/
2913
a0d0e21e 2914I32
5aaab254 2915Perl_call_argv(pTHX_ const char *sub_name, I32 flags, char **argv)
ac27b0f5 2916
8ac85365
NIS
2917 /* See G_* flags in cop.h */
2918 /* null terminated arg list */
8990e307 2919{
a0d0e21e 2920 dSP;
8990e307 2921
7918f24d
NC
2922 PERL_ARGS_ASSERT_CALL_ARGV;
2923
924508f0 2924 PUSHMARK(SP);
3dc78631
DM
2925 while (*argv) {
2926 mXPUSHs(newSVpv(*argv,0));
2927 argv++;
8990e307 2928 }
3dc78631 2929 PUTBACK;
864dbfa3 2930 return call_pv(sub_name, flags);
8990e307
LW
2931}
2932
954c1994 2933/*
44170c9a 2934=for apidoc call_pv
954c1994
GS
2935
2936Performs a callback to the specified Perl sub. See L<perlcall>.
2937
2938=cut
2939*/
2940
a0d0e21e 2941I32
864dbfa3 2942Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
8ac85365
NIS
2943 /* name of the subroutine */
2944 /* See G_* flags in cop.h */
a0d0e21e 2945{
7918f24d
NC
2946 PERL_ARGS_ASSERT_CALL_PV;
2947
0da0e728 2948 return call_sv(MUTABLE_SV(get_cv(sub_name, GV_ADD)), flags);
a0d0e21e
LW
2949}
2950
954c1994 2951/*
44170c9a 2952=for apidoc call_method
954c1994
GS
2953
2954Performs a callback to the specified Perl method. The blessed object must
2955be on the stack. See L<perlcall>.
2956
2957=cut
2958*/
2959
a0d0e21e 2960I32
864dbfa3 2961Perl_call_method(pTHX_ const char *methname, I32 flags)
8ac85365
NIS
2962 /* name of the subroutine */
2963 /* See G_* flags in cop.h */
a0d0e21e 2964{
46ca9bac 2965 STRLEN len;
c106c2be 2966 SV* sv;
7918f24d
NC
2967 PERL_ARGS_ASSERT_CALL_METHOD;
2968
46ca9bac 2969 len = strlen(methname);
c106c2be
RZ
2970 sv = flags & G_METHOD_NAMED
2971 ? sv_2mortal(newSVpvn_share(methname, len,0))
2972 : newSVpvn_flags(methname, len, SVs_TEMP);
46ca9bac 2973
c106c2be 2974 return call_sv(sv, flags | G_METHOD);
a0d0e21e
LW
2975}
2976
2977/* May be called with any of a CV, a GV, or an SV containing the name. */
954c1994 2978/*
44170c9a 2979=for apidoc call_sv
954c1994 2980
078e2213
TC
2981Performs a callback to the Perl sub specified by the SV.
2982
7c0c544c 2983If neither the C<G_METHOD> nor C<G_METHOD_NAMED> flag is supplied, the
078e2213
TC
2984SV may be any of a CV, a GV, a reference to a CV, a reference to a GV
2985or C<SvPV(sv)> will be used as the name of the sub to call.
2986
2987If the C<G_METHOD> flag is supplied, the SV may be a reference to a CV or
2988C<SvPV(sv)> will be used as the name of the method to call.
2989
2990If the C<G_METHOD_NAMED> flag is supplied, C<SvPV(sv)> will be used as
2991the name of the method to call.
2992
2993Some other values are treated specially for internal use and should
2994not be depended on.
2995
2996See L<perlcall>.
954c1994 2997
11939230
KW
2998=for apidoc Amnh||G_METHOD
2999=for apidoc Amnh||G_METHOD_NAMED
3000
954c1994
GS
3001=cut
3002*/
3003
a0d0e21e 3004I32
8162b70e 3005Perl_call_sv(pTHX_ SV *sv, volatile I32 flags)
8ac85365 3006 /* See G_* flags in cop.h */
a0d0e21e 3007{
5b434c73 3008 dVAR;
a0d0e21e 3009 LOGOP myop; /* fake syntax tree node */
b46e009d 3010 METHOP method_op;
aa689395 3011 I32 oldmark;
8162b70e 3012 volatile I32 retval = 0;
54310121 3013 bool oldcatch = CATCH_GET;
6224f72b 3014 int ret;
c4420975 3015 OP* const oldop = PL_op;
db36c5a1 3016 dJMPENV;
1e422769 3017
7918f24d
NC
3018 PERL_ARGS_ASSERT_CALL_SV;
3019
a0d0e21e
LW
3020 if (flags & G_DISCARD) {
3021 ENTER;
3022 SAVETMPS;
3023 }
2f8edad0
NC
3024 if (!(flags & G_WANT)) {
3025 /* Backwards compatibility - as G_SCALAR was 0, it could be omitted.
3026 */
3027 flags |= G_SCALAR;
3028 }
a0d0e21e 3029
aa689395 3030 Zero(&myop, 1, LOGOP);
f51d4af5 3031 if (!(flags & G_NOARGS))
aa689395 3032 myop.op_flags |= OPf_STACKED;
4f911530 3033 myop.op_flags |= OP_GIMME_REVERSE(flags);
462e5cf6 3034 SAVEOP();
533c011a 3035 PL_op = (OP*)&myop;
aa689395 3036
8c9009ad 3037 if (!(flags & G_METHOD_NAMED)) {
5b434c73
DD
3038 dSP;
3039 EXTEND(SP, 1);
8c9009ad
DD
3040 PUSHs(sv);
3041 PUTBACK;
5b434c73 3042 }
aa689395 3043 oldmark = TOPMARK;
a0d0e21e 3044
3280af22 3045 if (PERLDB_SUB && PL_curstash != PL_debstash
36477c24 3046 /* Handle first BEGIN of -d. */
3280af22 3047 && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
36477c24 3048 /* Try harder, since this may have been a sighandler, thus
3049 * curstash may be meaningless. */
ea726b52 3050 && (SvTYPE(sv) != SVt_PVCV || CvSTASH((const CV *)sv) != PL_debstash)
491527d0 3051 && !(flags & G_NODEBUG))
5ff48db8 3052 myop.op_private |= OPpENTERSUB_DB;
a0d0e21e 3053
c106c2be 3054 if (flags & (G_METHOD|G_METHOD_NAMED)) {
b46e009d 3055 Zero(&method_op, 1, METHOP);
3056 method_op.op_next = (OP*)&myop;
3057 PL_op = (OP*)&method_op;
c106c2be 3058 if ( flags & G_METHOD_NAMED ) {
b46e009d 3059 method_op.op_ppaddr = PL_ppaddr[OP_METHOD_NAMED];
3060 method_op.op_type = OP_METHOD_NAMED;
3061 method_op.op_u.op_meth_sv = sv;
c106c2be 3062 } else {
b46e009d 3063 method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
3064 method_op.op_type = OP_METHOD;
c106c2be
RZ
3065 }
3066 myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
3067 myop.op_type = OP_ENTERSUB;
968b3946
GS
3068 }
3069
312caa8e 3070 if (!(flags & G_EVAL)) {
0cdb2077 3071 CATCH_SET(TRUE);
d6f07c05 3072 CALL_BODY_SUB((OP*)&myop);
312caa8e 3073 retval = PL_stack_sp - (PL_stack_base + oldmark);
0253cb41 3074 CATCH_SET(oldcatch);
312caa8e
CS
3075 }
3076 else {
8e90e786 3077 I32 old_cxix;
d78bda3d 3078 myop.op_other = (OP*)&myop;
101d6365 3079 (void)POPMARK;
8e90e786 3080 old_cxix = cxstack_ix;
274ed8ae 3081 create_eval_scope(NULL, flags|G_FAKINGEVAL);
c318a6ee 3082 INCMARK;
a0d0e21e 3083
14dd3ad8 3084 JMPENV_PUSH(ret);
edb2152a 3085
6224f72b
GS
3086 switch (ret) {
3087 case 0:
14dd3ad8 3088 redo_body:
d6f07c05 3089 CALL_BODY_SUB((OP*)&myop);
312caa8e 3090 retval = PL_stack_sp - (PL_stack_base + oldmark);
8433848b 3091 if (!(flags & G_KEEPERR)) {
ab69dbc2 3092 CLEAR_ERRSV();
8433848b 3093 }
a0d0e21e 3094 break;
6224f72b 3095 case 1:
f86702cc 3096 STATUS_ALL_FAILURE;
924ba076 3097 /* FALLTHROUGH */
6224f72b 3098 case 2:
a0d0e21e 3099 /* my_exit() was called */
03d9f026 3100 SET_CURSTASH(PL_defstash);
a0d0e21e 3101 FREETMPS;
14dd3ad8 3102 JMPENV_POP;
f86702cc 3103 my_exit_jump();
e5964223 3104 NOT_REACHED; /* NOTREACHED */
6224f72b 3105 case 3:
3280af22 3106 if (PL_restartop) {
febb3a6d 3107 PL_restartjmpenv = NULL;
533c011a 3108 PL_op = PL_restartop;
3280af22 3109 PL_restartop = 0;
312caa8e 3110 goto redo_body;
a0d0e21e 3111 }
3280af22 3112 PL_stack_sp = PL_stack_base + oldmark;
51ce5529 3113 if ((flags & G_WANT) == G_ARRAY)
a0d0e21e
LW
3114 retval = 0;
3115 else {
3116 retval = 1;
3280af22 3117 *++PL_stack_sp = &PL_sv_undef;
a0d0e21e 3118 }
312caa8e 3119 break;
a0d0e21e 3120 }
a0d0e21e 3121
8e90e786
DM
3122 /* if we croaked, depending on how we croaked the eval scope
3123 * may or may not have already been popped */
3124 if (cxstack_ix > old_cxix) {
3125 assert(cxstack_ix == old_cxix + 1);
4ebe6e95 3126 assert(CxTYPE(CX_CUR()) == CXt_EVAL);
edb2152a 3127 delete_eval_scope();
8e90e786 3128 }
14dd3ad8 3129 JMPENV_POP;
a0d0e21e 3130 }
1e422769 3131
a0d0e21e 3132 if (flags & G_DISCARD) {
3280af22 3133 PL_stack_sp = PL_stack_base + oldmark;
a0d0e21e
LW
3134 retval = 0;
3135 FREETMPS;
3136 LEAVE;
3137 }
533c011a 3138 PL_op = oldop;
a0d0e21e
LW
3139 return retval;
3140}
3141
6e72f9df 3142/* Eval a string. The G_EVAL flag is always assumed. */
8990e307 3143
954c1994 3144/*
44170c9a 3145=for apidoc eval_sv
954c1994 3146
72d33970 3147Tells Perl to C<eval> the string in the SV. It supports the same flags
796b6530 3148as C<call_sv>, with the obvious exception of C<G_EVAL>. See L<perlcall>.
954c1994 3149
fb81daf0
TC
3150The C<G_RETHROW> flag can be used if you only need eval_sv() to
3151execute code specified by a string, but not catch any errors.
3152
bd87019b 3153=for apidoc Amnh||G_RETHROW
954c1994
GS
3154=cut
3155*/
3156
a0d0e21e 3157I32
864dbfa3 3158Perl_eval_sv(pTHX_ SV *sv, I32 flags)
ac27b0f5 3159
8ac85365 3160 /* See G_* flags in cop.h */
a0d0e21e 3161{
97aff369 3162 dVAR;
a0d0e21e 3163 UNOP myop; /* fake syntax tree node */
8162b70e
AC
3164 volatile I32 oldmark;
3165 volatile I32 retval = 0;
6224f72b 3166 int ret;
c4420975 3167 OP* const oldop = PL_op;
db36c5a1 3168 dJMPENV;
84902520 3169
7918f24d
NC
3170 PERL_ARGS_ASSERT_EVAL_SV;
3171
4633a7c4
LW
3172 if (flags & G_DISCARD) {
3173 ENTER;
3174 SAVETMPS;
3175 }
3176
462e5cf6 3177 SAVEOP();
533c011a 3178 PL_op = (OP*)&myop;
5ff48db8 3179 Zero(&myop, 1, UNOP);
5b434c73
DD
3180 {
3181 dSP;
3182 oldmark = SP - PL_stack_base;
3183 EXTEND(SP, 1);
3184 PUSHs(sv);
3185 PUTBACK;
3186 }
79072805 3187
4633a7c4
LW
3188 if (!(flags & G_NOARGS))
3189 myop.op_flags = OPf_STACKED;
6e72f9df 3190 myop.op_type = OP_ENTEREVAL;
4f911530 3191 myop.op_flags |= OP_GIMME_REVERSE(flags);
6e72f9df 3192 if (flags & G_KEEPERR)
3193 myop.op_flags |= OPf_SPECIAL;
a1941760
DM
3194
3195 if (flags & G_RE_REPARSING)
3196 myop.op_private = (OPpEVAL_COPHH | OPpEVAL_RE_REPARSING);
4633a7c4 3197
dedbcade 3198 /* fail now; otherwise we could fail after the JMPENV_PUSH but
13febba5 3199 * before a cx_pusheval(), which corrupts the stack after a croak */
dedbcade
DM
3200 TAINT_PROPER("eval_sv()");
3201
14dd3ad8 3202 JMPENV_PUSH(ret);
6224f72b
GS
3203 switch (ret) {
3204 case 0:
14dd3ad8 3205 redo_body:
2ba65d5f
DM
3206 if (PL_op == (OP*)(&myop)) {
3207 PL_op = PL_ppaddr[OP_ENTEREVAL](aTHX);
3208 if (!PL_op)
3209 goto fail; /* failed in compilation */
3210 }
4aca2f62 3211 CALLRUNOPS(aTHX);
312caa8e 3212 retval = PL_stack_sp - (PL_stack_base + oldmark);
8433848b 3213 if (!(flags & G_KEEPERR)) {
ab69dbc2 3214 CLEAR_ERRSV();
8433848b 3215 }
4633a7c4 3216 break;
6224f72b 3217 case 1:
f86702cc 3218 STATUS_ALL_FAILURE;
924ba076 3219 /* FALLTHROUGH */
6224f72b 3220 case 2:
4633a7c4 3221 /* my_exit() was called */
03d9f026 3222 SET_CURSTASH(PL_defstash);
4633a7c4 3223 FREETMPS;
14dd3ad8 3224 JMPENV_POP;
f86702cc 3225 my_exit_jump();
e5964223 3226 NOT_REACHED; /* NOTREACHED */
6224f72b 3227 case 3:
3280af22 3228 if (PL_restartop) {
febb3a6d 3229 PL_restartjmpenv = NULL;
533c011a 3230 PL_op = PL_restartop;
3280af22 3231 PL_restartop = 0;
312caa8e 3232 goto redo_body;
4633a7c4 3233 }
4aca2f62 3234 fail:
fb81daf0
TC
3235 if (flags & G_RETHROW) {
3236 JMPENV_POP;
3237 croak_sv(ERRSV);
3238 }
3239
3280af22 3240 PL_stack_sp = PL_stack_base + oldmark;
51ce5529 3241 if ((flags & G_WANT) == G_ARRAY)
4633a7c4
LW
3242 retval = 0;
3243 else {
3244 retval = 1;
3280af22 3245 *++PL_stack_sp = &PL_sv_undef;
4633a7c4 3246 }
312caa8e 3247 break;
4633a7c4
LW
3248 }
3249
14dd3ad8 3250 JMPENV_POP;
4633a7c4 3251 if (flags & G_DISCARD) {
3280af22 3252 PL_stack_sp = PL_stack_base + oldmark;
4633a7c4
LW
3253 retval = 0;
3254 FREETMPS;
3255 LEAVE;
3256 }
533c011a 3257 PL_op = oldop;
4633a7c4
LW
3258 return retval;
3259}
3260
954c1994 3261/*
44170c9a 3262=for apidoc eval_pv
954c1994 3263
422791e4 3264Tells Perl to C<eval> the given string in scalar context and return an SV* result.
954c1994
GS
3265
3266=cut
3267*/
3268
137443ea 3269SV*
864dbfa3 3270Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
137443ea 3271{
137443ea 3272 SV* sv = newSVpv(p, 0);
3273
7918f24d
NC
3274 PERL_ARGS_ASSERT_EVAL_PV;
3275
fb81daf0
TC
3276 if (croak_on_error) {
3277 sv_2mortal(sv);
3278 eval_sv(sv, G_SCALAR | G_RETHROW);
3279 }
3280 else {
3281 eval_sv(sv, G_SCALAR);
3282 SvREFCNT_dec(sv);
3283 }
137443ea 3284
ed1786ad
DD
3285 {
3286 dSP;
3287 sv = POPs;
3288 PUTBACK;
3289 }
137443ea 3290
137443ea 3291 return sv;
3292}
3293
4633a7c4
LW
3294/* Require a module. */
3295
954c1994 3296/*
ccfc67b7
JH
3297=head1 Embedding Functions
3298
44170c9a 3299=for apidoc require_pv
954c1994 3300
7d3fb230
BS
3301Tells Perl to C<require> the file named by the string argument. It is
3302analogous to the Perl code C<eval "require '$file'">. It's even
2307c6d0 3303implemented that way; consider using load_module instead.
954c1994 3304
7d3fb230 3305=cut */
954c1994 3306
4633a7c4 3307void
864dbfa3 3308Perl_require_pv(pTHX_ const char *pv)
4633a7c4 3309{
d3acc0f7 3310 dSP;
97aff369 3311 SV* sv;
7918f24d
NC
3312
3313 PERL_ARGS_ASSERT_REQUIRE_PV;
3314
e788e7d3 3315 PUSHSTACKi(PERLSI_REQUIRE);
be41e5d9
NC
3316 sv = Perl_newSVpvf(aTHX_ "require q%c%s%c", 0, pv, 0);
3317 eval_sv(sv_2mortal(sv), G_DISCARD);
d3acc0f7 3318 POPSTACK;
79072805
LW
3319}
3320
76e3520e 3321STATIC void
b6f82619 3322S_usage(pTHX) /* XXX move this out into a module ? */
4633a7c4 3323{
ab821d7f 3324 /* This message really ought to be max 23 lines.
75c72d73 3325 * Removed -h because the user already knows that option. Others? */
fb73857a 3326
1566c39d
NC
3327 /* Grouped as 6 lines per C string literal, to keep under the ANSI C 89
3328 minimum of 509 character string literals. */
27da23d5 3329 static const char * const usage_msg[] = {
1566c39d
NC
3330" -0[octal] specify record separator (\\0, if no argument)\n"
3331" -a autosplit mode with -n or -p (splits $_ into @F)\n"
3332" -C[number/list] enables the listed Unicode features\n"
3333" -c check syntax only (runs BEGIN and CHECK blocks)\n"
3334" -d[:debugger] run program under debugger\n"
3335" -D[number/list] set debugging flags (argument is a bit mask or alphabets)\n",
3336" -e program one line of program (several -e's allowed, omit programfile)\n"
3337" -E program like -e, but enables all optional features\n"
3338" -f don't do $sitelib/sitecustomize.pl at startup\n"
3339" -F/pattern/ split() pattern for -a switch (//'s are optional)\n"
3340" -i[extension] edit <> files in place (makes backup if extension supplied)\n"
3341" -Idirectory specify @INC/#include directory (several -I's allowed)\n",
3342" -l[octal] enable line ending processing, specifies line terminator\n"
3343" -[mM][-]module execute \"use/no module...\" before executing program\n"
3344" -n assume \"while (<>) { ... }\" loop around program\n"
3345" -p assume loop like -n but print line also, like sed\n"
3346" -s enable rudimentary parsing for switches after programfile\n"
3347" -S look for programfile using PATH environment variable\n",
3348" -t enable tainting warnings\n"
3349" -T enable tainting checks\n"
3350" -u dump core after parsing program\n"
3351" -U allow unsafe operations\n"
3352" -v print version, patchlevel and license\n"
3353" -V[:variable] print configuration summary (or a single Config.pm variable)\n",
60eaec42 3354" -w enable many useful warnings\n"
1566c39d
NC
3355" -W enable all warnings\n"
3356" -x[directory] ignore text before #!perl line (optionally cd to directory)\n"
3357" -X disable all warnings\n"
3358" \n"
3359"Run 'perldoc perl' for more help with Perl.\n\n",
fb73857a 3360NULL
3361};
27da23d5 3362 const char * const *p = usage_msg;
1566c39d 3363 PerlIO *out = PerlIO_stdout();
fb73857a 3364
1566c39d
NC
3365 PerlIO_printf(out,
3366 "\nUsage: %s [switches] [--] [programfile] [arguments]\n",
b6f82619 3367 PL_origargv[0]);
fb73857a 3368 while (*p)
1566c39d 3369 PerlIO_puts(out, *p++);
b6f82619 3370 my_exit(0);
4633a7c4
LW
3371}
3372
b4ab917c
DM
3373/* convert a string of -D options (or digits) into an int.
3374 * sets *s to point to the char after the options */
3375
3376#ifdef DEBUGGING
3377int
e1ec3a88 3378Perl_get_debug_opts(pTHX_ const char **s, bool givehelp)
b4ab917c 3379{
27da23d5 3380 static const char * const usage_msgd[] = {
651b8f1a
NC
3381 " Debugging flag values: (see also -d)\n"
3382 " p Tokenizing and parsing (with v, displays parse stack)\n"
3383 " s Stack snapshots (with v, displays all stacks)\n"
3384 " l Context (loop) stack processing\n"
3385 " t Trace execution\n"
3386 " o Method and overloading resolution\n",
3387 " c String/numeric conversions\n"
3388 " P Print profiling info, source file input state\n"
3389 " m Memory and SV allocation\n"
3390 " f Format processing\n"
3391 " r Regular expression parsing and execution\n"
3392 " x Syntax tree dump\n",
3393 " u Tainting checks\n"
3394 " H Hash dump -- usurps values()\n"
3395 " X Scratchpad allocation\n"
3396 " D Cleaning up\n"
56967202 3397 " S Op slab allocation\n"
651b8f1a
NC
3398 " T Tokenising\n"
3399 " R Include reference counts of dumped variables (eg when using -Ds)\n",
3400 " J Do not s,t,P-debug (Jump over) opcodes within package DB\n"
3401 " v Verbose: use in conjunction with other flags\n"
3402 " C Copy On Write\n"
3403 " A Consistency checks on internal structures\n"
3404 " q quiet - currently only suppresses the 'EXECUTING' message\n"
3405 " M trace smart match resolution\n"
3406 " B dump suBroutine definitions, including special Blocks like BEGIN\n",
69014004 3407 " L trace some locale setting information--for Perl core development\n",
e17bc05a 3408 " i trace PerlIO layer processing\n",
5d7580af 3409 " y trace y///, tr/// compilation and execution\n",
e6e64d9b
JC
3410 NULL
3411 };
22ff3130 3412 UV uv = 0;
7918f24d
NC
3413
3414 PERL_ARGS_ASSERT_GET_DEBUG_OPTS;
3415
b4ab917c
DM
3416 if (isALPHA(**s)) {
3417 /* if adding extra options, remember to update DEBUG_MASK */
5d7580af 3418 static const char debopts[] = "psltocPmfrxuUHXDSTRJvCAqMBLiy";
b4ab917c 3419
0eb30aeb 3420 for (; isWORDCHAR(**s); (*s)++) {
c4420975 3421 const char * const d = strchr(debopts,**s);
b4ab917c 3422 if (d)
22ff3130 3423 uv |= 1 << (d - debopts);
b4ab917c 3424 else if (ckWARN_d(WARN_DEBUGGING))
e6e64d9b
JC
3425 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
3426 "invalid option -D%c, use -D'' to see choices\n", **s);
b4ab917c
DM
3427 }
3428 }
e6e64d9b 3429 else if (isDIGIT(**s)) {
5d4a52b5 3430 const char* e = *s + strlen(*s);
22ff3130 3431 if (grok_atoUV(*s, &uv, &e))
96e440d2 3432 *s = e;
0eb30aeb 3433 for (; isWORDCHAR(**s); (*s)++) ;
b4ab917c 3434 }
ddcf8bc1 3435 else if (givehelp) {
06e869a4 3436 const char *const *p = usage_msgd;
651b8f1a 3437 while (*p) PerlIO_puts(PerlIO_stdout(), *p++);
e6e64d9b 3438 }
22ff3130 3439 return (int)uv; /* ignore any UV->int conversion loss */
b4ab917c
DM
3440}
3441#endif
3442
79072805
LW
3443/* This routine handles any switches that can be given during run */
3444
c7030b81
NC
3445const char *
3446Perl_moreswitches(pTHX_ const char *s)
79072805 3447{
27da23d5 3448 dVAR;
84c133a0 3449 UV rschar;
0544e6df 3450 const char option = *s; /* used to remember option in -m/-M code */
79072805 3451
7918f24d
NC
3452 PERL_ARGS_ASSERT_MORESWITCHES;
3453
79072805
LW
3454 switch (*s) {
3455 case '0':
a863c7d1 3456 {
f2095865 3457 I32 flags = 0;
a3b680e6 3458 STRLEN numlen;
f2095865
JH
3459
3460 SvREFCNT_dec(PL_rs);
3461 if (s[1] == 'x' && s[2]) {
a3b680e6 3462 const char *e = s+=2;
f2095865
JH
3463 U8 *tmps;
3464
a3b680e6
AL
3465 while (*e)
3466 e++;
f2095865
JH
3467 numlen = e - s;
3468 flags = PERL_SCAN_SILENT_ILLDIGIT;
3469 rschar = (U32)grok_hex(s, &numlen, &flags, NULL);
3470 if (s + numlen < e) {
3471 rschar = 0; /* Grandfather -0xFOO as -0 -xFOO. */
3472 numlen = 0;
3473 s--;
3474 }
396482e1 3475 PL_rs = newSVpvs("");
10656159 3476 tmps = (U8*) SvGROW(PL_rs, (STRLEN)(UVCHR_SKIP(rschar) + 1));
f2095865 3477 uvchr_to_utf8(tmps, rschar);
5f560d8a 3478 SvCUR_set(PL_rs, UVCHR_SKIP(rschar));
f2095865
JH
3479 SvUTF8_on(PL_rs);
3480 }
3481 else {
3482 numlen = 4;
3483 rschar = (U32)grok_oct(s, &numlen, &flags, NULL);
3484 if (rschar & ~((U8)~0))
3485 PL_rs = &PL_sv_undef;
3486 else if (!rschar && numlen >= 2)
396482e1 3487 PL_rs = newSVpvs("");
f2095865
JH
3488 else {
3489 char ch = (char)rschar;
3490 PL_rs = newSVpvn(&ch, 1);
3491 }
3492 }
64ace3f8 3493 sv_setsv(get_sv("/", GV_ADD), PL_rs);
f2095865 3494 return s + numlen;
a863c7d1 3495 }
46487f74 3496 case 'C':
a05d7ebb 3497 s++;
dd374669 3498 PL_unicode = parse_unicode_opts( (const char **)&s );
5a22a2bb
NC
3499 if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG)
3500 PL_utf8cache = -1;
46487f74 3501 return s;
2304df62 3502 case 'F':
5fc691f1 3503 PL_minus_a = TRUE;
3280af22 3504 PL_minus_F = TRUE;
24ffa309 3505 PL_minus_n = TRUE;
ebce5377
RGS
3506 PL_splitstr = ++s;
3507 while (*s && !isSPACE(*s)) ++s;
e49e380e 3508 PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr);
2304df62 3509 return s;
79072805 3510 case 'a':
3280af22 3511 PL_minus_a = TRUE;
24ffa309 3512 PL_minus_n = TRUE;
79072805
LW
3513 s++;
3514 return s;
3515 case 'c':
3280af22 3516 PL_minus_c = TRUE;
79072805
LW
3517 s++;
3518 return s;
3519 case 'd':
f20b2998 3520 forbid_setid('d', FALSE);
4633a7c4 3521 s++;
2cbb2ee1
RGS
3522
3523 /* -dt indicates to the debugger that threads will be used */
0eb30aeb 3524 if (*s == 't' && !isWORDCHAR(s[1])) {
2cbb2ee1
RGS
3525 ++s;
3526 my_setenv("PERL5DB_THREADED", "1");
3527 }
3528
70c94a19
RR
3529 /* The following permits -d:Mod to accepts arguments following an =
3530 in the fashion that -MSome::Mod does. */
3531 if (*s == ':' || *s == '=') {
b19934fb
NC
3532 const char *start;
3533 const char *end;
3534 SV *sv;
3535
3536 if (*++s == '-') {
3537 ++s;
3538 sv = newSVpvs("no Devel::");
3539 } else {
3540 sv = newSVpvs("use Devel::");
3541 }
3542
3543 start = s;
3544 end = s + strlen(s);
f85893a1 3545
b19934fb 3546 /* We now allow -d:Module=Foo,Bar and -d:-Module */
0eb30aeb 3547 while(isWORDCHAR(*s) || *s==':') ++s;
70c94a19 3548 if (*s != '=')
f85893a1 3549 sv_catpvn(sv, start, end - start);
70c94a19
RR
3550 else {
3551 sv_catpvn(sv, start, s-start);
95a2b409
RGS
3552 /* Don't use NUL as q// delimiter here, this string goes in the
3553 * environment. */
3554 Perl_sv_catpvf(aTHX_ sv, " split(/,/,q{%s});", ++s);
70c94a19 3555 }
f85893a1 3556 s = end;
184f32ec 3557 my_setenv("PERL5DB", SvPV_nolen_const(sv));
c4db126b 3558 SvREFCNT_dec(sv);
4633a7c4 3559 }
ed094faf 3560 if (!PL_perldb) {
3280af22 3561 PL_perldb = PERLDB_ALL;
a0d0e21e 3562 init_debugger();
ed094faf 3563 }
79072805
LW
3564 return s;
3565 case 'D':
0453d815 3566 {
79072805 3567#ifdef DEBUGGING
f20b2998 3568 forbid_setid('D', FALSE);
b4ab917c 3569 s++;
dd374669 3570 PL_debug = get_debug_opts( (const char **)&s, 1) | DEBUG_TOP_FLAG;
12a43e32 3571#else /* !DEBUGGING */
0453d815 3572 if (ckWARN_d(WARN_DEBUGGING))
9014280d 3573 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
e6e64d9b 3574 "Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)\n");
0eb30aeb 3575 for (s++; isWORDCHAR(*s); s++) ;
79072805 3576#endif
79072805 3577 return s;
2b5060ae 3578 NOT_REACHED; /* NOTREACHED */
0453d815 3579 }
4633a7c4 3580 case 'h':
b6f82619 3581 usage();
2b5060ae
DM
3582 NOT_REACHED; /* NOTREACHED */
3583
79072805 3584 case 'i':
43c5f42d 3585 Safefree(PL_inplace);
5ef5d758 3586 {
d4c19fe8 3587 const char * const start = ++s;
5ef5d758
NC
3588 while (*s && !isSPACE(*s))
3589 ++s;
3590
3591 PL_inplace = savepvn(start, s - start);
3592 }
fb73857a 3593 return s;
4e49a025 3594 case 'I': /* -I handled both here and in parse_body() */
f20b2998 3595 forbid_setid('I', FALSE);
fb73857a 3596 ++s;
3597 while (*s && isSPACE(*s))
3598 ++s;
3599 if (*s) {
c7030b81 3600 const char *e, *p;
0df16ed7
GS
3601 p = s;
3602 /* ignore trailing spaces (possibly followed by other switches) */
3603 do {
3604 for (e = p; *e && !isSPACE(*e); e++) ;
3605 p = e;
3606 while (isSPACE(*p))
3607 p++;
3608 } while (*p && *p != '-');
55b4bc1c 3609 incpush(s, e-s,
e28f3139 3610 INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS|INCPUSH_UNSHIFT);
0df16ed7
GS
3611 s = p;
3612 if (*s == '-')
3613 s++;
79072805
LW
3614 }
3615 else
a67e862a 3616 Perl_croak(aTHX_ "No directory specified for -I");
fb73857a 3617 return s;
79072805 3618 case 'l':
3280af22 3619 PL_minus_l = TRUE;
79072805 3620 s++;
7889fe52
NIS
3621 if (PL_ors_sv) {
3622 SvREFCNT_dec(PL_ors_sv);
a0714e2c 3623 PL_ors_sv = NULL;
7889fe52 3624 }
79072805 3625 if (isDIGIT(*s)) {
53305cf1 3626 I32 flags = 0;
a3b680e6 3627 STRLEN numlen;
396482e1 3628 PL_ors_sv = newSVpvs("\n");
53305cf1
NC
3629 numlen = 3 + (*s == '0');
3630 *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL);
79072805
LW
3631 s += numlen;
3632 }
3633 else {
8bfdd7d9 3634 if (RsPARA(PL_rs)) {
396482e1 3635 PL_ors_sv = newSVpvs("\n\n");
7889fe52
NIS
3636 }
3637 else {
8bfdd7d9 3638 PL_ors_sv = newSVsv(PL_rs);
c07a80fd 3639 }
79072805
LW
3640 }
3641 return s;
1a30305b 3642 case 'M':
f20b2998 3643 forbid_setid('M', FALSE); /* XXX ? */
924ba076 3644 /* FALLTHROUGH */
1a30305b 3645 case 'm':
f20b2998 3646 forbid_setid('m', FALSE); /* XXX ? */
1a30305b 3647 if (*++s) {
c7030b81 3648 const char *start;
b64cb68c 3649 const char *end;
11343788 3650 SV *sv;
e1ec3a88 3651 const char *use = "use ";
0544e6df 3652 bool colon = FALSE;
a5f75d66 3653 /* -M-foo == 'no foo' */
d0043bd1
NC
3654 /* Leading space on " no " is deliberate, to make both
3655 possibilities the same length. */
3656 if (*s == '-') { use = " no "; ++s; }
3657 sv = newSVpvn(use,4);
a5f75d66 3658 start = s;
1a30305b 3659 /* We allow -M'Module qw(Foo Bar)' */
0eb30aeb 3660 while(isWORDCHAR(*s) || *s==':') {
0544e6df
RB
3661 if( *s++ == ':' ) {
3662 if( *s == ':' )
3663 s++;
3664 else
3665 colon = TRUE;
3666 }
3667 }
3668 if (s == start)
3669 Perl_croak(aTHX_ "Module name required with -%c option",
3670 option);
3671 if (colon)
3672 Perl_croak(aTHX_ "Invalid module name %.*s with -%c option: "
3673 "contains single ':'",
63da6837 3674 (int)(s - start), start, option);
b64cb68c 3675 end = s + strlen(s);
c07a80fd 3676 if (*s != '=') {
b64cb68c 3677 sv_catpvn(sv, start, end - start);
0544e6df 3678 if (option == 'm') {
c07a80fd 3679 if (*s != '\0')
cea2e8a9 3680 Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
396482e1 3681 sv_catpvs( sv, " ()");
c07a80fd 3682 }
3683 } else {
11343788 3684 sv_catpvn(sv, start, s-start);
b64cb68c
NC
3685 /* Use NUL as q''-delimiter. */
3686 sv_catpvs(sv, " split(/,/,q\0");
3687 ++s;
3688 sv_catpvn(sv, s, end - s);
396482e1 3689 sv_catpvs(sv, "\0)");
c07a80fd 3690 }
b64cb68c 3691 s = end;
29a861e7 3692 Perl_av_create_and_push(aTHX_ &PL_preambleav, sv);
1a30305b 3693 }
3694 else
0544e6df 3695 Perl_croak(aTHX_ "Missing argument to -%c", option);
1a30305b 3696 return s;
79072805 3697 case 'n':
3280af22 3698 PL_minus_n = TRUE;
79072805
LW
3699 s++;
3700 return s;
3701 case 'p':
3280af22 3702 PL_minus_p = TRUE;
79072805
LW
3703 s++;
3704 return s;
3705 case 's':
f20b2998 3706 forbid_setid('s', FALSE);
3280af22 3707 PL_doswitches = TRUE;
79072805
LW
3708 s++;
3709 return s;
6537fe72 3710 case 't':
27a6968b 3711 case 'T':
dc6d7f5c 3712#if defined(SILENT_NO_TAINT_SUPPORT)
284167a5 3713 /* silently ignore */
dc6d7f5c 3714#elif defined(NO_TAINT_SUPPORT)
3231f579 3715 Perl_croak_nocontext("This perl was compiled without taint support. "
284167a5
S
3716 "Cowardly refusing to run with -t or -T flags");
3717#else
3718 if (!TAINTING_get)
27a6968b 3719 TOO_LATE_FOR(*s);
284167a5 3720#endif
6537fe72 3721 s++;
463ee0b2 3722 return s;
79072805 3723 case 'u':
3280af22 3724 PL_do_undump = TRUE;
79072805
LW
3725 s++;
3726 return s;
3727 case 'U':
3280af22 3728 PL_unsafe = TRUE;
79072805
LW
3729 s++;
3730 return s;
3731 case 'v':
c4bc78d9
NC
3732 minus_v();
3733 case 'w':
3734 if (! (PL_dowarn & G_WARN_ALL_MASK)) {
3735 PL_dowarn |= G_WARN_ON;
3736 }
3737 s++;
3738 return s;
3739 case 'W':
3740 PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
1943af61 3741 free_and_set_cop_warnings(&PL_compiling, pWARN_ALL);
c4bc78d9
NC
3742 s++;
3743 return s;
3744 case 'X':
3745 PL_dowarn = G_WARN_ALL_OFF;
1943af61 3746 free_and_set_cop_warnings(&PL_compiling, pWARN_NONE);
c4bc78d9
NC
3747 s++;
3748 return s;
3749 case '*':
3750 case ' ':
3751 while( *s == ' ' )
3752 ++s;
3753 if (s[0] == '-') /* Additional switches on #! line. */
3754 return s+1;
3755 break;
3756 case '-':
3757 case 0:
3758#if defined(WIN32) || !defined(PERL_STRICT_CR)
3759 case '\r':
3760#endif
3761 case '\n':
3762 case '\t':
3763 break;
3764#ifdef ALTERNATE_SHEBANG
3765 case 'S': /* OS/2 needs -S on "extproc" line. */
3766 break;
3767#endif
4bb78d63
CB
3768 case 'e': case 'f': case 'x': case 'E':
3769#ifndef ALTERNATE_SHEBANG
3770 case 'S':
3771#endif
3772 case 'V':
c4bc78d9 3773 Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
b7e077d0
FC
3774 default:
3775 Perl_croak(aTHX_
3776 "Unrecognized switch: -%.1s (-h will show valid options)",s
3777 );
c4bc78d9
NC
3778 }
3779 return NULL;
3780}
3781
3782
3783STATIC void
3784S_minus_v(pTHX)
3785{
fc3381af 3786 PerlIO * PIO_stdout;
46807d8e 3787 {
709aee94
DD
3788 const char * const level_str = "v" PERL_VERSION_STRING;
3789 const STRLEN level_len = sizeof("v" PERL_VERSION_STRING)-1;
46807d8e 3790#ifdef PERL_PATCHNUM
709aee94 3791 SV* level;
23d483e2 3792# ifdef PERL_GIT_UNCOMMITTED_CHANGES
709aee94 3793 static const char num [] = PERL_PATCHNUM "*";
23d483e2 3794# else
709aee94 3795 static const char num [] = PERL_PATCHNUM;
23d483e2 3796# endif
fc3381af 3797 {
709aee94
DD
3798 const STRLEN num_len = sizeof(num)-1;
3799 /* A very advanced compiler would fold away the strnEQ
3800 and this whole conditional, but most (all?) won't do it.
3801 SV level could also be replaced by with preprocessor
3802 catenation.
3803 */
3804 if (num_len >= level_len && strnEQ(num,level_str,level_len)) {
3805 /* per 46807d8e80, PERL_PATCHNUM is outside of the control
3806 of the interp so it might contain format characters
3807 */
3808 level = newSVpvn(num, num_len);
fc3381af 3809 } else {
709aee94 3810 level = Perl_newSVpvf_nocontext("%s (%s)", level_str, num);
fc3381af 3811 }
46807d8e 3812 }
709aee94
DD
3813#else
3814 SV* level = newSVpvn(level_str, level_len);
3815#endif /* #ifdef PERL_PATCHNUM */
fc3381af
DD
3816 PIO_stdout = PerlIO_stdout();
3817 PerlIO_printf(PIO_stdout,
ded326e4
DG
3818 "\nThis is perl " STRINGIFY(PERL_REVISION)
3819 ", version " STRINGIFY(PERL_VERSION)
3820 ", subversion " STRINGIFY(PERL_SUBVERSION)
147e3846 3821 " (%" SVf ") built for " ARCHNAME, SVfARG(level)
ded326e4 3822 );
709aee94 3823 SvREFCNT_dec_NN(level);
46807d8e 3824 }
fb73857a 3825#if defined(LOCAL_PATCH_COUNT)
3826 if (LOCAL_PATCH_COUNT > 0)
fc3381af 3827 PerlIO_printf(PIO_stdout,
b0e47665
GS
3828 "\n(with %d registered patch%s, "
3829 "see perl -V for more detail)",
bb7a0f54 3830 LOCAL_PATCH_COUNT,
b0e47665 3831 (LOCAL_PATCH_COUNT!=1) ? "es" : "");
a5f75d66 3832#endif
1a30305b 3833
fc3381af 3834 PerlIO_printf(PIO_stdout,
b28d5df5 3835 "\n\nCopyright 1987-2020, Larry Wall\n");
79072805 3836#ifdef MSDOS
fc3381af 3837 PerlIO_printf(PIO_stdout,
b0e47665 3838 "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
55497cff 3839#endif
3840#ifdef DJGPP
fc3381af 3841 PerlIO_printf(PIO_stdout,
b0e47665
GS
3842 "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
3843 "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
4633a7c4 3844#endif
79072805 3845#ifdef OS2
fc3381af 3846 PerlIO_printf(PIO_stdout,
b0e47665 3847 "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
be3c0a43 3848 "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n");
79072805 3849#endif
9d116dd7 3850#ifdef OEMVS
fc3381af 3851 PerlIO_printf(PIO_stdout,
b0e47665 3852 "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
9d116dd7 3853#endif
495c5fdc 3854#ifdef __VOS__
fc3381af 3855 PerlIO_printf(PIO_stdout,
c0fcb8c5 3856 "Stratus OpenVOS port by Paul.Green@stratus.com, 1997-2013\n");
495c5fdc 3857#endif
a1a0e61e 3858#ifdef POSIX_BC
fc3381af 3859 PerlIO_printf(PIO_stdout,
b0e47665 3860 "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
a1a0e61e 3861#endif
a0fd4948 3862#ifdef __SYMBIAN32__
fc3381af 3863 PerlIO_printf(PIO_stdout,
27da23d5
JH
3864 "Symbian port by Nokia, 2004-2005\n");
3865#endif
baed7233
DL
3866#ifdef BINARY_BUILD_NOTICE
3867 BINARY_BUILD_NOTICE;
3868#endif
fc3381af 3869 PerlIO_printf(PIO_stdout,
b0e47665 3870 "\n\
79072805 3871Perl may be copied only under the terms of either the Artistic License or the\n\
3d6f292d 3872GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
95103687 3873Complete documentation for Perl, including FAQ lists, should be found on\n\
a0288114 3874this system using \"man perl\" or \"perldoc perl\". If you have access to the\n\
c9e30dd8 3875Internet, point your browser at http://www.perl.org/, the Perl Home Page.\n\n");
7ca617d0 3876 my_exit(0);
79072805
LW
3877}
3878
3879/* compliments of Tom Christiansen */
3880
3881/* unexec() can be found in the Gnu emacs distribution */
ee580363 3882/* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
79072805 3883
25bbd826
CB
3884#ifdef VMS
3885#include <lib$routines.h>
3886#endif
3887
79072805 3888void
864dbfa3 3889Perl_my_unexec(pTHX)
79072805
LW
3890{
3891#ifdef UNEXEC
b37c2d43
AL
3892 SV * prog = newSVpv(BIN_EXP, 0);
3893 SV * file = newSVpv(PL_origfilename, 0);
ee580363 3894 int status = 1;
79072805
LW
3895 extern int etext;
3896
396482e1 3897 sv_catpvs(prog, "/perl");
396482e1 3898 sv_catpvs(file, ".perldump");
79072805 3899
ee580363
GS
3900 unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
3901 /* unexec prints msg to stderr in case of failure */
6ad3d225 3902 PerlProc_exit(status);
79072805 3903#else
ddeaf645 3904 PERL_UNUSED_CONTEXT;
a5f75d66 3905# ifdef VMS
a5f75d66 3906 lib$signal(SS$_DEBUG); /* ssdef.h #included from vmsish.h */
84d78eb7 3907# elif defined(WIN32) || defined(__CYGWIN__)
ddeaf645 3908 Perl_croak_nocontext("dump is not supported");
aa689395 3909# else
79072805 3910 ABORT(); /* for use with undump */
aa689395 3911# endif
a5f75d66 3912#endif
79072805
LW
3913}
3914
cb68f92d
GS
3915/* initialize curinterp */
3916STATIC void
cea2e8a9 3917S_init_interp(pTHX)
cb68f92d 3918{
acfe0abc 3919#ifdef MULTIPLICITY
115ff745
NC
3920# define PERLVAR(prefix,var,type)
3921# define PERLVARA(prefix,var,n,type)
acfe0abc 3922# if defined(PERL_IMPLICIT_CONTEXT)
115ff745
NC
3923# define PERLVARI(prefix,var,type,init) aTHX->prefix##var = init;
3924# define PERLVARIC(prefix,var,type,init) aTHX->prefix##var = init;
3967c732 3925# else
115ff745
NC
3926# define PERLVARI(prefix,var,type,init) PERL_GET_INTERP->var = init;
3927# define PERLVARIC(prefix,var,type,init) PERL_GET_INTERP->var = init;
066ef5b5 3928# endif
acfe0abc 3929# include "intrpvar.h"
acfe0abc
GS
3930# undef PERLVAR
3931# undef PERLVARA
3932# undef PERLVARI
3933# undef PERLVARIC
3934#else
115ff745
NC
3935# define PERLVAR(prefix,var,type)
3936# define PERLVARA(prefix,var,n,type)
3937# define PERLVARI(prefix,var,type,init) PL_##var = init;
3938# define PERLVARIC(prefix,var,type,init) PL_##var = init;
acfe0abc 3939# include "intrpvar.h"
acfe0abc
GS
3940# undef PERLVAR
3941# undef PERLVARA
3942# undef PERLVARI
3943# undef PERLVARIC
cb68f92d
GS
3944#endif
3945
cb68f92d
GS
3946}
3947
76e3520e 3948STATIC void
cea2e8a9 3949S_init_main_stash(pTHX)
79072805 3950{
463ee0b2 3951 GV *gv;
9842f1a0 3952 HV *hv = newHV();
6e72f9df 3953
9842f1a0 3954 PL_curstash = PL_defstash = (HV *)SvREFCNT_inc_simple_NN(hv);
23579a14
NC
3955 /* We know that the string "main" will be in the global shared string
3956 table, so it's a small saving to use it rather than allocate another
3957 8 bytes. */
18916d0d 3958 PL_curstname = newSVpvs_share("main");
fafc274c 3959 gv = gv_fetchpvs("main::", GV_ADD|GV_NOTQUAL, SVt_PVHV);
23579a14
NC
3960 /* If we hadn't caused another reference to "main" to be in the shared
3961 string table above, then it would be worth reordering these two,
3962 because otherwise all we do is delete "main" from it as a consequence
3963 of the SvREFCNT_dec, only to add it again with hv_name_set */
adbc6bb1 3964 SvREFCNT_dec(GvHV(gv));
854da30f 3965 hv_name_sets(PL_defstash, "main", 0);
85fbaab2 3966 GvHV(gv) = MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash));
463ee0b2 3967 SvREADONLY_on(gv);
fafc274c
NC
3968 PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpvs("INC", GV_ADD|GV_NOTQUAL,
3969 SVt_PVAV)));
5a5094bd 3970 SvREFCNT_inc_simple_void(PL_incgv); /* Don't allow it to be freed */
3280af22 3971 GvMULTI_on(PL_incgv);
fafc274c 3972 PL_hintgv = gv_fetchpvs("\010", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^H */
4639d557 3973 SvREFCNT_inc_simple_void(PL_hintgv);
3280af22 3974 GvMULTI_on(PL_hintgv);
fafc274c 3975 PL_defgv = gv_fetchpvs("_", GV_ADD|GV_NOTQUAL, SVt_PVAV);
5a5094bd 3976 SvREFCNT_inc_simple_void(PL_defgv);
d456e3f4 3977 PL_errgv = gv_fetchpvs("@", GV_ADD|GV_NOTQUAL, SVt_PV);
5a5094bd 3978 SvREFCNT_inc_simple_void(PL_errgv);
3280af22 3979 GvMULTI_on(PL_errgv);
fafc274c 3980 PL_replgv = gv_fetchpvs("\022", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^R */
475b1e90 3981 SvREFCNT_inc_simple_void(PL_replgv);
3280af22 3982 GvMULTI_on(PL_replgv);
cea2e8a9 3983 (void)Perl_form(aTHX_ "%240s",""); /* Preallocate temp - for immediate signals. */
c69033f2 3984#ifdef PERL_DONT_CREATE_GVSV
689fbe18 3985 (void)gv_SVadd(PL_errgv);
c69033f2 3986#endif
38a03e6e 3987 sv_grow(ERRSV, 240); /* Preallocate - for immediate signals. */
ab69dbc2 3988 CLEAR_ERRSV();
11faa288 3989 CopSTASH_set(&PL_compiling, PL_defstash);
5c1737d1
NC
3990 PL_debstash = GvHV(gv_fetchpvs("DB::", GV_ADDMULTI, SVt_PVHV));
3991 PL_globalstash = GvHV(gv_fetchpvs("CORE::GLOBAL::", GV_ADDMULTI,
3992 SVt_PVHV));
4633a7c4 3993 /* We must init $/ before switches are processed. */
64ace3f8 3994 sv_setpvs(get_sv("/", GV_ADD), "\n");
79072805
LW
3995}
3996
8d113837
NC
3997STATIC PerlIO *
3998S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript)
79072805 3999{
fdf5d70d 4000 int fdscript = -1;
8d113837 4001 PerlIO *rsfp = NULL;
1dfef69b 4002 Stat_t tmpstatbuf;
375ed12a 4003 int fd;
1b24ed4b 4004
7918f24d
NC
4005 PERL_ARGS_ASSERT_OPEN_SCRIPT;
4006
3280af22 4007 if (PL_e_script) {
8afc33d6 4008 PL_origfilename = savepvs("-e");
96436eeb 4009 }
6c4ab083 4010 else {
22ff3130
HS
4011 const char *s;
4012 UV uv;
6c4ab083 4013 /* if find_script() returns, it returns a malloc()-ed value */
dd374669 4014 scriptname = PL_origfilename = find_script(scriptname, dosearch, NULL, 1);
5d4a52b5 4015 s = scriptname + strlen(scriptname);
6c4ab083 4016
c8b388b0 4017 if (strBEGINs(scriptname, "/dev/fd/")
22ff3130
HS
4018 && isDIGIT(scriptname[8])
4019 && grok_atoUV(scriptname + 8, &uv, &s)
4020 && uv <= PERL_INT_MAX
4021 ) {
4022 fdscript = (int)uv;
6c4ab083 4023 if (*s) {
ae3f3efd
PS
4024 /* PSz 18 Feb 04
4025 * Tell apart "normal" usage of fdscript, e.g.
4026 * with bash on FreeBSD:
4027 * perl <( echo '#!perl -DA'; echo 'print "$0\n"')
4028 * from usage in suidperl.
4029 * Does any "normal" usage leave garbage after the number???
4030 * Is it a mistake to use a similar /dev/fd/ construct for
4031 * suidperl?
4032 */
f20b2998 4033 *suidscript = TRUE;
ae3f3efd
PS
4034 /* PSz 20 Feb 04
4035 * Be supersafe and do some sanity-checks.
4036 * Still, can we be sure we got the right thing?
4037 */
4038 if (*s != '/') {
4039 Perl_croak(aTHX_ "Wrong syntax (suid) fd script name \"%s\"\n", s);
4040 }
4041 if (! *(s+1)) {
4042 Perl_croak(aTHX_ "Missing (suid) fd script name\n");
4043 }
6c4ab083 4044 scriptname = savepv(s + 1);
3280af22 4045 Safefree(PL_origfilename);
dd374669 4046 PL_origfilename = (char *)scriptname;
6c4ab083
GS
4047 }
4048 }
4049 }
4050
05ec9bb3 4051 CopFILE_free(PL_curcop);
57843af0 4052 CopFILE_set(PL_curcop, PL_origfilename);
770526c1 4053 if (*PL_origfilename == '-' && PL_origfilename[1] == '\0')
dd374669 4054 scriptname = (char *)"";
fdf5d70d 4055 if (fdscript >= 0) {
8d113837 4056 rsfp = PerlIO_fdopen(fdscript,PERL_SCRIPT_MODE);
96436eeb 4057 }
79072805 4058 else if (!*scriptname) {
cdd8118e 4059 forbid_setid(0, *suidscript);
c0b3891a 4060 return NULL;
79072805 4061 }
96436eeb 4062 else {
9c12f1e5
RGS
4063#ifdef FAKE_BIT_BUCKET
4064 /* This hack allows one not to have /dev/null (or BIT_BUCKET as it
4065 * is called) and still have the "-e" work. (Believe it or not,
4066 * a /dev/null is required for the "-e" to work because source
4067 * filter magic is used to implement it. ) This is *not* a general
4068 * replacement for a /dev/null. What we do here is create a temp
4069 * file (an empty file), open up that as the script, and then
4070 * immediately close and unlink it. Close enough for jazz. */
4071#define FAKE_BIT_BUCKET_PREFIX "/tmp/perlnull-"
4072#define FAKE_BIT_BUCKET_SUFFIX "XXXXXXXX"
4073#define FAKE_BIT_BUCKET_TEMPLATE FAKE_BIT_BUCKET_PREFIX FAKE_BIT_BUCKET_SUFFIX
4074 char tmpname[sizeof(FAKE_BIT_BUCKET_TEMPLATE)] = {
4075 FAKE_BIT_BUCKET_TEMPLATE
4076 };
4077 const char * const err = "Failed to create a fake bit bucket";
4078 if (strEQ(scriptname, BIT_BUCKET)) {
d681a35f 4079 int tmpfd = Perl_my_mkstemp_cloexec(tmpname);
9c12f1e5
RGS
4080 if (tmpfd > -1) {
4081 scriptname = tmpname;
4082 close(tmpfd);
4083 } else
4084 Perl_croak(aTHX_ err);
9c12f1e5
RGS
4085 }
4086#endif
8d113837 4087 rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
9c12f1e5 4088#ifdef FAKE_BIT_BUCKET
f55ac4a4
KW
4089 if ( strBEGINs(scriptname, FAKE_BIT_BUCKET_PREFIX)
4090 && strlen(scriptname) == sizeof(tmpname) - 1)
4091 {
9c12f1e5
RGS
4092 unlink(scriptname);
4093 }
4094 scriptname = BIT_BUCKET;
4095#endif
96436eeb 4096 }
8d113837 4097 if (!rsfp) {
447218f8 4098 /* PSz 16 Sep 03 Keep neat error message */
b1681ed3 4099 if (PL_e_script)
147e3846 4100 Perl_croak(aTHX_ "Can't open " BIT_BUCKET ": %s\n", Strerror(errno));
b1681ed3
RGS
4101 else
4102 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
4103 CopFILE(PL_curcop), Strerror(errno));
13281fa4 4104 }
375ed12a 4105 fd = PerlIO_fileno(rsfp);
1dfef69b 4106
375ed12a
JH
4107 if (fd < 0 ||
4108 (PerlLIO_fstat(fd, &tmpstatbuf) >= 0
4109 && S_ISDIR(tmpstatbuf.st_mode)))
1dfef69b
RS
4110 Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
4111 CopFILE(PL_curcop),
0c0d42ff 4112 Strerror(EISDIR));
1dfef69b 4113
8d113837 4114 return rsfp;
79072805 4115}
8d063cd8 4116
83a320f0
AC
4117/* In the days of suidperl, we refused to execute a setuid script stored on
4118 * a filesystem mounted nosuid and/or noexec. This meant that we probed for the
4119 * existence of the appropriate filesystem-statting function, and behaved
4120 * accordingly. But even though suidperl is long gone, we must still include
4121 * those probes for the benefit of modules like Filesys::Df, which expect the
4122 * results of those probes to be stored in %Config; see RT#126368. So mention
4123 * the relevant cpp symbols here, to ensure that metaconfig will include their
4124 * probes in the generated Configure:
4125 *
ea442100
JH
4126 * I_SYSSTATVFS HAS_FSTATVFS
4127 * I_SYSMOUNT
4128 * I_STATFS HAS_FSTATFS HAS_GETFSSTAT
4129 * I_MNTENT HAS_GETMNTENT HAS_HASMNTOPT
83a320f0 4130 */
ea442100
JH
4131
4132
cc69b689 4133#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
ec2019ad 4134/* Don't even need this function. */
cc69b689 4135#else
ec2019ad
NC
4136STATIC void
4137S_validate_suid(pTHX_ PerlIO *rsfp)
4138{
dfff4baf
BF
4139 const Uid_t my_uid = PerlProc_getuid();
4140 const Uid_t my_euid = PerlProc_geteuid();
4141 const Gid_t my_gid = PerlProc_getgid();
4142 const Gid_t my_egid = PerlProc_getegid();
985213f2 4143
ac076a5c
NC
4144 PERL_ARGS_ASSERT_VALIDATE_SUID;
4145
985213f2 4146 if (my_euid != my_uid || my_egid != my_gid) { /* (suidperl doesn't exist, in fact) */
a2e578da 4147 dVAR;
375ed12a 4148 int fd = PerlIO_fileno(rsfp);
45a23732
DD
4149 Stat_t statbuf;
4150 if (fd < 0 || PerlLIO_fstat(fd, &statbuf) < 0) { /* may be either wrapped or real suid */
4151 Perl_croak_nocontext( "Illegal suidscript");
375ed12a 4152 }
45a23732 4153 if ((my_euid != my_uid && my_euid == statbuf.st_uid && statbuf.st_mode & S_ISUID)
375ed12a 4154 ||
45a23732 4155 (my_egid != my_gid && my_egid == statbuf.st_gid && statbuf.st_mode & S_ISGID)
375ed12a 4156 )
b28d0864 4157 if (!PL_do_undump)
cea2e8a9 4158 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
a687059c 4159FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
a687059c 4160 /* not set-id, must be wrapped */
a687059c 4161 }
79072805 4162}
cc69b689 4163#endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
13281fa4 4164
76e3520e 4165STATIC void
2f9285f8 4166S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp)
79072805 4167{
c7030b81 4168 const char *s;
eb578fdb 4169 const char *s2;
33b78306 4170
7918f24d
NC
4171 PERL_ARGS_ASSERT_FIND_BEGINNING;
4172
33b78306
LW
4173 /* skip forward in input to the real script? */
4174
737c24fc 4175 do {
2f9285f8 4176 if ((s = sv_gets(linestr_sv, rsfp, 0)) == NULL)
cea2e8a9 4177 Perl_croak(aTHX_ "No Perl script found in input\n");
4f0c37ba 4178 s2 = s;
737c24fc
Z
4179 } while (!(*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL")))));
4180 PerlIO_ungetc(rsfp, '\n'); /* to keep line count right */
4181 while (*s && !(isSPACE (*s) || *s == '#')) s++;
4182 s2 = s;
4183 while (*s == ' ' || *s == '\t') s++;
4184 if (*s++ == '-') {
4185 while (isDIGIT(s2[-1]) || s2[-1] == '-' || s2[-1] == '.'
4186 || s2[-1] == '_') s2--;
c8b388b0 4187 if (strBEGINs(s2-4,"perl"))
737c24fc
Z
4188 while ((s = moreswitches(s)))
4189 ;
83025b21
LW
4190 }
4191}
4192
afe37c7d 4193
76e3520e 4194STATIC void
cea2e8a9 4195S_init_ids(pTHX)
352d5a3a 4196{
284167a5
S
4197 /* no need to do anything here any more if we don't
4198 * do tainting. */
dc6d7f5c 4199#ifndef NO_TAINT_SUPPORT
dfff4baf
BF
4200 const Uid_t my_uid = PerlProc_getuid();
4201 const Uid_t my_euid = PerlProc_geteuid();
4202 const Gid_t my_gid = PerlProc_getgid();
4203 const Gid_t my_egid = PerlProc_getegid();
985213f2 4204
20b7effb
JH
4205 PERL_UNUSED_CONTEXT;
4206
22f7c9c9 4207 /* Should not happen: */
985213f2 4208 CHECK_MALLOC_TAINT(my_uid && (my_euid != my_uid || my_egid != my_gid));
284167a5
S
4209 TAINTING_set( TAINTING_get | (my_uid && (my_euid != my_uid || my_egid != my_gid)) );
4210#endif
ae3f3efd
PS
4211 /* BUG */
4212 /* PSz 27 Feb 04
4213 * Should go by suidscript, not uid!=euid: why disallow
4214 * system("ls") in scripts run from setuid things?
4215 * Or, is this run before we check arguments and set suidscript?
4216 * What about SETUID_SCRIPTS_ARE_SECURE_NOW: could we use fdscript then?
4217 * (We never have suidscript, can we be sure to have fdscript?)
4218 * Or must then go by UID checks? See comments in forbid_setid also.
4219 */
748a9306 4220}
79072805 4221
a0643315
JH
4222/* This is used very early in the lifetime of the program,
4223 * before even the options are parsed, so PL_tainting has
b0891165 4224 * not been initialized properly. */
af419de7 4225bool
8f42b153 4226Perl_doing_taint(int argc, char *argv[], char *envp[])
22f7c9c9 4227{
c3446a78
JH
4228#ifndef PERL_IMPLICIT_SYS
4229 /* If we have PERL_IMPLICIT_SYS we can't call getuid() et alia
4230 * before we have an interpreter-- and the whole point of this
4231 * function is to be called at such an early stage. If you are on
4232 * a system with PERL_IMPLICIT_SYS but you do have a concept of
4233 * "tainted because running with altered effective ids', you'll
4234 * have to add your own checks somewhere in here. The two most
4235 * known samples of 'implicitness' are Win32 and NetWare, neither
4236 * of which has much of concept of 'uids'. */
dfff4baf
BF
4237 Uid_t uid = PerlProc_getuid();
4238 Uid_t euid = PerlProc_geteuid();
4239 Gid_t gid = PerlProc_getgid();
4240 Gid_t egid = PerlProc_getegid();
6867be6d 4241 (void)envp;
22f7c9c9
JH
4242
4243#ifdef VMS
af419de7 4244 uid |= gid << 16;
22f7c9c9
JH
4245 euid |= egid << 16;
4246#endif
4247 if (uid && (euid != uid || egid != gid))
4248 return 1;
c3446a78 4249#endif /* !PERL_IMPLICIT_SYS */
af419de7
JH
4250 /* This is a really primitive check; environment gets ignored only
4251 * if -T are the first chars together; otherwise one gets
4252 * "Too late" message. */
22f7c9c9 4253 if ( argc > 1 && argv[1][0] == '-'
305b8651 4254 && isALPHA_FOLD_EQ(argv[1][1], 't'))
22f7c9c9
JH
4255 return 1;
4256 return 0;
4257}
22f7c9c9 4258
d0bafe7e
NC
4259/* Passing the flag as a single char rather than a string is a slight space
4260 optimisation. The only message that isn't /^-.$/ is
4261 "program input from stdin", which is substituted in place of '\0', which
4262 could never be a command line flag. */
76e3520e 4263STATIC void
f20b2998 4264S_forbid_setid(pTHX_ const char flag, const bool suidscript) /* g */
bbce6d69 4265{
d0bafe7e
NC
4266 char string[3] = "-x";
4267 const char *message = "program input from stdin";
4268
20b7effb 4269 PERL_UNUSED_CONTEXT;
d0bafe7e
NC
4270 if (flag) {
4271 string[1] = flag;
4272 message = string;
4273 }
4274
ae3f3efd 4275#ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
985213f2 4276 if (PerlProc_getuid() != PerlProc_geteuid())
d0bafe7e 4277 Perl_croak(aTHX_ "No %s allowed while running setuid", message);
985213f2 4278 if (PerlProc_getgid() != PerlProc_getegid())
d0bafe7e 4279 Perl_croak(aTHX_ "No %s allowed while running setgid", message);
ae3f3efd 4280#endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
f20b2998 4281 if (suidscript)
d0bafe7e 4282 Perl_croak(aTHX_ "No %s allowed with (suid) fdscript", message);
bbce6d69 4283}
4284
1ee4443e 4285void
5b235299
NC
4286Perl_init_dbargs(pTHX)
4287{
4288 AV *const args = PL_dbargs = GvAV(gv_AVadd((gv_fetchpvs("DB::args",
4289 GV_ADDMULTI,
4290 SVt_PVAV))));
4291
4292 if (AvREAL(args)) {
4293 /* Someone has already created it.
4294 It might have entries, and if we just turn off AvREAL(), they will
4295 "leak" until global destruction. */
4296 av_clear(args);
3df49e2a 4297 if (SvTIED_mg((const SV *)args, PERL_MAGIC_tied))
7355df7e 4298 Perl_croak(aTHX_ "Cannot set tied @DB::args");
5b235299 4299 }
af80dd86 4300 AvREIFY_only(PL_dbargs);
5b235299
NC
4301}
4302
4303void
1ee4443e 4304Perl_init_debugger(pTHX)
748a9306 4305{
c4420975 4306 HV * const ostash = PL_curstash;
a6d69523 4307 MAGIC *mg;
1ee4443e 4308
03d9f026 4309 PL_curstash = (HV *)SvREFCNT_inc_simple(PL_debstash);
5b235299
NC
4310
4311 Perl_init_dbargs(aTHX);
8cece913
FC
4312 PL_DBgv = MUTABLE_GV(
4313 SvREFCNT_inc(gv_fetchpvs("DB::DB", GV_ADDMULTI, SVt_PVGV))
4314 );
4315 PL_DBline = MUTABLE_GV(
4316 SvREFCNT_inc(gv_fetchpvs("DB::dbline", GV_ADDMULTI, SVt_PVAV))
4317 );
4318 PL_DBsub = MUTABLE_GV(SvREFCNT_inc(
4319 gv_HVadd(gv_fetchpvs("DB::sub", GV_ADDMULTI, SVt_PVHV))
4320 ));
5c1737d1 4321 PL_DBsingle = GvSV((gv_fetchpvs("DB::single", GV_ADDMULTI, SVt_PV)));
4c0f30d6
NC
4322 if (!SvIOK(PL_DBsingle))
4323 sv_setiv(PL_DBsingle, 0);
a6d69523
TC
4324 mg = sv_magicext(PL_DBsingle, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0);
4325 mg->mg_private = DBVARMG_SINGLE;
4326 SvSETMAGIC(PL_DBsingle);
4327
5c1737d1 4328 PL_DBtrace = GvSV((gv_fetchpvs("DB::trace", GV_ADDMULTI, SVt_PV)));
4c0f30d6
NC
4329 if (!SvIOK(PL_DBtrace))
4330 sv_setiv(PL_DBtrace, 0);
a6d69523
TC
4331 mg = sv_magicext(PL_DBtrace, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0);
4332 mg->mg_private = DBVARMG_TRACE;
4333 SvSETMAGIC(PL_DBtrace);
4334
5c1737d1 4335 PL_DBsignal = GvSV((gv_fetchpvs("DB::signal", GV_ADDMULTI, SVt_PV)));
4c0f30d6
NC
4336 if (!SvIOK(PL_DBsignal))
4337 sv_setiv(PL_DBsignal, 0);
a6d69523
TC
4338 mg = sv_magicext(PL_DBsignal, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0);
4339 mg->mg_private = DBVARMG_SIGNAL;
4340 SvSETMAGIC(PL_DBsignal);
4341
03d9f026 4342 SvREFCNT_dec(PL_curstash);
1ee4443e 4343 PL_curstash = ostash;
352d5a3a
LW
4344}
4345
2ce36478
SM
4346#ifndef STRESS_REALLOC
4347#define REASONABLE(size) (size)
0ff72558 4348#define REASONABLE_but_at_least(size,min) (size)
2ce36478
SM
4349#else
4350#define REASONABLE(size) (1) /* unreasonable */
0ff72558 4351#define REASONABLE_but_at_least(size,min) (min)
2ce36478
SM
4352#endif
4353
11343788 4354void
cea2e8a9 4355Perl_init_stacks(pTHX)
79072805 4356{
3caf0269
DM
4357 SSize_t size;
4358
e336de0d 4359 /* start with 128-item stack and 8K cxstack */
3280af22 4360 PL_curstackinfo = new_stackinfo(REASONABLE(128),
e336de0d 4361 REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
3280af22 4362 PL_curstackinfo->si_type = PERLSI_MAIN;
d5910a3d
DM
4363#if defined DEBUGGING && !defined DEBUGGING_RE_ONLY
4364 PL_curstackinfo->si_stack_hwm = 0;
4365#endif
3280af22
NIS
4366 PL_curstack = PL_curstackinfo->si_stack;
4367 PL_mainstack = PL_curstack; /* remember in case we switch stacks */
79072805 4368
3280af22
NIS
4369 PL_stack_base = AvARRAY(PL_curstack);
4370 PL_stack_sp = PL_stack_base;
4371 PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
8990e307 4372
a02a5408 4373 Newx(PL_tmps_stack,REASONABLE(128),SV*);
3280af22
NIS
4374 PL_tmps_floor = -1;
4375 PL_tmps_ix = -1;
4376 PL_tmps_max = REASONABLE(128);
8990e307 4377
a02a5408 4378 Newx(PL_markstack,REASONABLE(32),I32);
3280af22
NIS
4379 PL_markstack_ptr = PL_markstack;
4380 PL_markstack_max = PL_markstack + REASONABLE(32);
79072805 4381
ce2f7c3b 4382 SET_MARK_OFFSET;
e336de0d 4383
a02a5408 4384 Newx(PL_scopestack,REASONABLE(32),I32);
d343c3ef
GG
4385#ifdef DEBUGGING
4386 Newx(PL_scopestack_name,REASONABLE(32),const char*);
4387#endif
3280af22
NIS
4388 PL_scopestack_ix = 0;
4389 PL_scopestack_max = REASONABLE(32);
79072805 4390
3caf0269
DM
4391 size = REASONABLE_but_at_least(128,SS_MAXPUSH);
4392 Newx(PL_savestack, size, ANY);
3280af22 4393 PL_savestack_ix = 0;
3caf0269
DM
4394 /*PL_savestack_max lies: it always has SS_MAXPUSH more than it claims */
4395 PL_savestack_max = size - SS_MAXPUSH;
378cc40b 4396}
33b78306 4397
2ce36478
SM
4398#undef REASONABLE
4399
76e3520e 4400STATIC void
cea2e8a9 4401S_nuke_stacks(pTHX)
6e72f9df 4402{
3280af22
NIS
4403 while (PL_curstackinfo->si_next)
4404 PL_curstackinfo = PL_curstackinfo->si_next;
4405 while (PL_curstackinfo) {
4406 PERL_SI *p = PL_curstackinfo->si_prev;
bac4b2ad 4407 /* curstackinfo->si_stack got nuked by sv_free_arenas() */
3280af22
NIS
4408 Safefree(PL_curstackinfo->si_cxstack);
4409 Safefree(PL_curstackinfo);
4410 PL_curstackinfo = p;
e336de0d 4411 }
3280af22
NIS
4412 Safefree(PL_tmps_stack);
4413 Safefree(PL_markstack);
4414 Safefree(PL_scopestack);
58780814
GG
4415#ifdef DEBUGGING
4416 Safefree(PL_scopestack_name);
4417#endif
3280af22 4418 Safefree(PL_savestack);
378cc40b 4419}
33b78306 4420
74e8ce34
NC
4421void
4422Perl_populate_isa(pTHX_ const char *name, STRLEN len, ...)
4423{
4424 GV *const gv = gv_fetchpvn(name, len, GV_ADD | GV_ADDMULTI, SVt_PVAV);
4425 AV *const isa = GvAVn(gv);
4426 va_list args;
4427
4428 PERL_ARGS_ASSERT_POPULATE_ISA;
4429
4430 if(AvFILLp(isa) != -1)
4431 return;
4432
4433 /* NOTE: No support for tied ISA */
4434
4435 va_start(args, len);
4436 do {
4437 const char *const parent = va_arg(args, const char*);
4438 size_t parent_len;
4439
4440 if (!parent)
4441 break;
4442 parent_len = va_arg(args, size_t);
4443
4444 /* Arguments are supplied with a trailing :: */
4445 assert(parent_len > 2);
4446 assert(parent[parent_len - 1] == ':');
4447 assert(parent[parent_len - 2] == ':');
4448 av_push(isa, newSVpvn(parent, parent_len - 2));
4449 (void) gv_fetchpvn(parent, parent_len, GV_ADD, SVt_PVGV);
4450 } while (1);
4451 va_end(args);
4452}
4453
8990e307 4454
76e3520e 4455STATIC void
cea2e8a9 4456S_init_predump_symbols(pTHX)
45d8adaa 4457{
93a17b20 4458 GV *tmpgv;
af8c498a 4459 IO *io;
79072805 4460
64ace3f8 4461 sv_setpvs(get_sv("\"", GV_ADD), " ");
e23d9e2f
CS
4462 PL_ofsgv = (GV*)SvREFCNT_inc(gv_fetchpvs(",", GV_ADD|GV_NOTQUAL, SVt_PV));
4463
d963bf01
NC
4464
4465 /* Historically, PVIOs were blessed into IO::Handle, unless
4466 FileHandle was loaded, in which case they were blessed into
4467 that. Action at a distance.
4468 However, if we simply bless into IO::Handle, we break code
4469 that assumes that PVIOs will have (among others) a seek
4470 method. IO::File inherits from IO::Handle and IO::Seekable,
4471 and provides the needed methods. But if we simply bless into
4472 it, then we break code that assumed that by loading
4473 IO::Handle, *it* would work.
4474 So a compromise is to set up the correct @IO::File::ISA,
4475 so that code that does C<use IO::Handle>; will still work.
4476 */
4477
74e8ce34
NC
4478 Perl_populate_isa(aTHX_ STR_WITH_LEN("IO::File::ISA"),
4479 STR_WITH_LEN("IO::Handle::"),
4480 STR_WITH_LEN("IO::Seekable::"),
4481 STR_WITH_LEN("Exporter::"),
4482 NULL);
d963bf01 4483
fafc274c 4484 PL_stdingv = gv_fetchpvs("STDIN", GV_ADD|GV_NOTQUAL, SVt_PVIO);
3280af22 4485 GvMULTI_on(PL_stdingv);
af8c498a 4486 io = GvIOp(PL_stdingv);
a04651f4 4487 IoTYPE(io) = IoTYPE_RDONLY;
af8c498a 4488 IoIFP(io) = PerlIO_stdin();
fafc274c 4489 tmpgv = gv_fetchpvs("stdin", GV_ADD|GV_NOTQUAL, SVt_PV);
a5f75d66 4490 GvMULTI_on(tmpgv);
a45c7426 4491 GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io));
79072805 4492
fafc274c 4493 tmpgv = gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO);
a5f75d66 4494 GvMULTI_on(tmpgv);
af8c498a 4495 io = GvIOp(tmpgv);
a04651f4 4496 IoTYPE(io) = IoTYPE_WRONLY;
af8c498a 4497 IoOFP(io) = IoIFP(io) = PerlIO_stdout();
4633a7c4 4498 setdefout(tmpgv);
fafc274c 4499 tmpgv = gv_fetchpvs("stdout", GV_ADD|GV_NOTQUAL, SVt_PV);
a5f75d66 4500 GvMULTI_on(tmpgv);
a45c7426 4501 GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io));
79072805 4502
fafc274c 4503 PL_stderrgv = gv_fetchpvs("STDERR", GV_ADD|GV_NOTQUAL, SVt_PVIO);
bf49b057
GS
4504 GvMULTI_on(PL_stderrgv);
4505 io = GvIOp(PL_stderrgv);
a04651f4 4506 IoTYPE(io) = IoTYPE_WRONLY;
af8c498a 4507 IoOFP(io) = IoIFP(io) = PerlIO_stderr();
fafc274c 4508 tmpgv = gv_fetchpvs("stderr", GV_ADD|GV_NOTQUAL, SVt_PV);
a5f75d66 4509 GvMULTI_on(tmpgv);
a45c7426 4510 GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io));
79072805 4511
de61bf2a 4512 PL_statname = newSVpvs(""); /* last filename we did stat on */
79072805 4513}
33b78306 4514
a11ec5a9 4515void
5aaab254 4516Perl_init_argv_symbols(pTHX_ int argc, char **argv)
33b78306 4517{
7918f24d
NC
4518 PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS;
4519
79072805 4520 argc--,argv++; /* skip name of script */
3280af22 4521 if (PL_doswitches) {
79072805 4522 for (; argc > 0 && **argv == '-'; argc--,argv++) {
aec46f14 4523 char *s;
79072805
LW
4524 if (!argv[0][1])
4525 break;
379d538a 4526 if (argv[0][1] == '-' && !argv[0][2]) {
79072805
LW
4527 argc--,argv++;
4528 break;
4529 }
155aba94 4530 if ((s = strchr(argv[0], '='))) {
b3d904f3
NC
4531 const char *const start_name = argv[0] + 1;
4532 sv_setpv(GvSV(gv_fetchpvn_flags(start_name, s - start_name,
4533 TRUE, SVt_PV)), s + 1);
79072805
LW
4534 }
4535 else
71315bf2 4536 sv_setiv(GvSV(gv_fetchpv(argv[0]+1, GV_ADD, SVt_PV)),1);
fe14fcc3 4537 }
79072805 4538 }
fafc274c 4539 if ((PL_argvgv = gv_fetchpvs("ARGV", GV_ADD|GV_NOTQUAL, SVt_PVAV))) {
722fa0e9 4540 SvREFCNT_inc_simple_void_NN(PL_argvgv);
a11ec5a9 4541 GvMULTI_on(PL_argvgv);
a11ec5a9
RGS
4542 av_clear(GvAVn(PL_argvgv));
4543 for (; argc > 0; argc--,argv++) {
aec46f14 4544 SV * const sv = newSVpv(argv[0],0);
b188953e 4545 av_push(GvAV(PL_argvgv),sv);
ce81ff12
JH
4546 if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) {
4547 if (PL_unicode & PERL_UNICODE_ARGV_FLAG)
4548 SvUTF8_on(sv);
4549 }
a05d7ebb
JH
4550 if (PL_unicode & PERL_UNICODE_WIDESYSCALLS_FLAG) /* Sarathy? */
4551 (void)sv_utf8_decode(sv);
a11ec5a9
RGS
4552 }
4553 }
82f96200
JL
4554
4555 if (PL_inplace && (!PL_argvgv || AvFILL(GvAV(PL_argvgv)) == -1))
4556 Perl_ck_warner_d(aTHX_ packWARN(WARN_INPLACE),
4557 "-i used with no filenames on the command line, "
4558 "reading from STDIN");
a11ec5a9
RGS
4559}
4560
4561STATIC void
5aaab254 4562S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env)
a11ec5a9 4563{
20b7effb 4564#ifdef USE_ITHREADS
27da23d5 4565 dVAR;
20b7effb 4566#endif
a11ec5a9 4567 GV* tmpgv;
a11ec5a9 4568
7918f24d
NC
4569 PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS;
4570
f2da823f 4571 PL_toptarget = newSV_type(SVt_PVIV);
854da30f 4572 SvPVCLEAR(PL_toptarget);
f2da823f 4573 PL_bodytarget = newSV_type(SVt_PVIV);
854da30f 4574 SvPVCLEAR(PL_bodytarget);
3280af22 4575 PL_formtarget = PL_bodytarget;
79072805 4576
bbce6d69 4577 TAINT;
a11ec5a9
RGS
4578
4579 init_argv_symbols(argc,argv);
4580
fafc274c 4581 if ((tmpgv = gv_fetchpvs("0", GV_ADD|GV_NOTQUAL, SVt_PV))) {
3280af22 4582 sv_setpv(GvSV(tmpgv),PL_origfilename);
79072805 4583 }
fafc274c 4584 if ((PL_envgv = gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV))) {
79072805 4585 HV *hv;
e17132c1 4586 bool env_is_not_environ;
cf93a474 4587 SvREFCNT_inc_simple_void_NN(PL_envgv);
3280af22
NIS
4588 GvMULTI_on(PL_envgv);
4589 hv = GvHVn(PL_envgv);
a0714e2c 4590 hv_magic(hv, NULL, PERL_MAGIC_env);
2f42fcb0 4591#ifndef PERL_MICRO
fa6a1c44 4592#ifdef USE_ENVIRON_ARRAY
4633a7c4
LW
4593 /* Note that if the supplied env parameter is actually a copy
4594 of the global environ then it may now point to free'd memory
4595 if the environment has been modified since. To avoid this
4596 problem we treat env==NULL as meaning 'use the default'
4597 */
4598 if (!env)
4599 env = environ;
e17132c1
JD
4600 env_is_not_environ = env != environ;
4601 if (env_is_not_environ
4efc5df6
GS
4602# ifdef USE_ITHREADS
4603 && PL_curinterp == aTHX
4604# endif
4605 )
4606 {
bd61b366 4607 environ[0] = NULL;
4efc5df6 4608 }
9b4eeda5 4609 if (env) {
9d27dca9 4610 char *s, *old_var;
ae37b791 4611 STRLEN nlen;
27da23d5 4612 SV *sv;
ae37b791
TC
4613 HV *dups = newHV();
4614
764df951 4615 for (; *env; env++) {
9d27dca9
MT
4616 old_var = *env;
4617
4618 if (!(s = strchr(old_var,'=')) || s == old_var)
79072805 4619 continue;
ae37b791 4620 nlen = s - old_var;
9d27dca9 4621
7da0e383 4622#if defined(MSDOS) && !defined(DJGPP)
61968511 4623 *s = '\0';
9d27dca9 4624 (void)strupr(old_var);
61968511 4625 *s = '=';
137443ea 4626#endif
ae37b791
TC
4627 if (hv_exists(hv, old_var, nlen)) {
4628 const char *name = savepvn(old_var, nlen);
4629
4630 /* make sure we use the same value as getenv(), otherwise code that
4631 uses getenv() (like setlocale()) might see a different value to %ENV
4632 */
4633 sv = newSVpv(PerlEnv_getenv(name), 0);
4634
4635 /* keep a count of the dups of this name so we can de-dup environ later */
4636 if (hv_exists(dups, name, nlen))
4637 ++SvIVX(*hv_fetch(dups, name, nlen, 0));
4638 else
4639 (void)hv_store(dups, name, nlen, newSViv(1), 0);
4640
4641 Safefree(name);
4642 }
4643 else {
4644 sv = newSVpv(s+1, 0);
4645 }
4646 (void)hv_store(hv, old_var, nlen, sv, 0);
e17132c1 4647 if (env_is_not_environ)
61968511 4648 mg_set(sv);
764df951 4649 }
ae37b791
TC
4650 if (HvKEYS(dups)) {
4651 /* environ has some duplicate definitions, remove them */
4652 HE *entry;
4653 hv_iterinit(dups);
4654 while ((entry = hv_iternext_flags(dups, 0))) {
4655 STRLEN nlen;
4656 const char *name = HePV(entry, nlen);
4657 IV count = SvIV(HeVAL(entry));
4658 IV i;
4659 SV **valp = hv_fetch(hv, name, nlen, 0);
4660
4661 assert(valp);
4662
4663 /* try to remove any duplicate names, depending on the
4664 * implementation used in my_setenv() the iteration might
4665 * not be necessary, but let's be safe.
4666 */
4667 for (i = 0; i < count; ++i)
4668 my_setenv(name, 0);
4669
4670 /* and set it back to the value we set $ENV{name} to */
4671 my_setenv(name, SvPV_nolen(*valp));
4672 }
4673 }
4674 SvREFCNT_dec_NN(dups);
9b4eeda5 4675 }
103a7189 4676#endif /* USE_ENVIRON_ARRAY */
2f42fcb0 4677#endif /* !PERL_MICRO */
79072805 4678 }
bbce6d69 4679 TAINT_NOT;
2710853f
MJD
4680
4681 /* touch @F array to prevent spurious warnings 20020415 MJD */
4682 if (PL_minus_a) {
cbfd0a87 4683 (void) get_av("main::F", GV_ADD | GV_ADDMULTI);
2710853f 4684 }
33b78306 4685}
34de22dd 4686
76e3520e 4687STATIC void
2cace6ac 4688S_init_perllib(pTHX)
34de22dd 4689{
32910c7a 4690#ifndef VMS
929e5b34 4691 const char *perl5lib = NULL;
32910c7a 4692#endif
35ba5ce9 4693 const char *s;
a7560424 4694#if defined(WIN32) && !defined(PERL_IS_MINIPERL)
e6a0bbf8
NC
4695 STRLEN len;
4696#endif
4697
284167a5 4698 if (!TAINTING_get) {
552a7a9b 4699#ifndef VMS
32910c7a 4700 perl5lib = PerlEnv_getenv("PERL5LIB");
88f5bc07
AB
4701/*
4702 * It isn't possible to delete an environment variable with
42a3dd3a
RGS
4703 * PERL_USE_SAFE_PUTENV set unless unsetenv() is also available, so in that
4704 * case we treat PERL5LIB as undefined if it has a zero-length value.
88f5bc07
AB
4705 */
4706#if defined(PERL_USE_SAFE_PUTENV) && ! defined(HAS_UNSETENV)
32910c7a 4707 if (perl5lib && *perl5lib != '\0')
88f5bc07 4708#else
32910c7a 4709 if (perl5lib)
88f5bc07 4710#endif
32910c7a 4711 incpush_use_sep(perl5lib, 0, INCPUSH_ADD_SUB_DIRS);
2cace6ac 4712 else {
4705144d
NC
4713 s = PerlEnv_getenv("PERLLIB");
4714 if (s)
50d61629 4715 incpush_use_sep(s, 0, 0);
4705144d 4716 }
552a7a9b 4717#else /* VMS */
4718 /* Treat PERL5?LIB as a possible search list logical name -- the
4719 * "natural" VMS idiom for a Unix path string. We allow each
4720 * element to be a set of |-separated directories for compatibility.
4721 */
4722 char buf[256];
4723 int idx = 0;
88467a4b 4724 if (vmstrnenv("PERL5LIB",buf,0,NULL,0))
e28f3139 4725 do {
2cace6ac 4726 incpush_use_sep(buf, 0, INCPUSH_ADD_SUB_DIRS);
88467a4b 4727 } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0));
f05b5874 4728 else {
88467a4b 4729 while (vmstrnenv("PERLLIB",buf,idx++,NULL,0))
50d61629 4730 incpush_use_sep(buf, 0, 0);
f05b5874 4731 }
552a7a9b 4732#endif /* VMS */
85e6fe83 4733 }
34de22dd 4734
b0e687f7
NC
4735#ifndef PERL_IS_MINIPERL
4736 /* miniperl gets just -I..., the split of $ENV{PERL5LIB}, and "." in @INC
4737 (and not the architecture specific directories from $ENV{PERL5LIB}) */
4738
7d00a340 4739#include "perl_inc_macro.h"
c90c0ff4 4740/* Use the ~-expanded versions of APPLLIB (undocumented),
826e305c 4741 SITEARCH, SITELIB, VENDORARCH, VENDORLIB, ARCHLIB and PRIVLIB
df5cef82 4742*/
7d00a340
N
4743 INCPUSH_APPLLIB_EXP
4744 INCPUSH_SITEARCH_EXP
4745 INCPUSH_SITELIB_EXP
4746 INCPUSH_PERL_VENDORARCH_EXP
4747 INCPUSH_PERL_VENDORLIB_EXP
4748 INCPUSH_ARCHLIB_EXP
4749 INCPUSH_PRIVLIB_EXP
4750 INCPUSH_PERL_OTHERLIBDIRS
4751 INCPUSH_PERL5LIB
4752 INCPUSH_APPLLIB_OLD_EXP
4753 INCPUSH_SITELIB_STEM
4754 INCPUSH_PERL_VENDORLIB_STEM
4755 INCPUSH_PERL_OTHERLIBDIRS_ARCHONLY
65f19062 4756
b0e687f7 4757#endif /* !PERL_IS_MINIPERL */
3b777bb4 4758
0e0a64d7
MB
4759 if (!TAINTING_get) {
4760#if !defined(PERL_IS_MINIPERL) && defined(DEFAULT_INC_EXCLUDES_DOT)
4761 const char * const unsafe = PerlEnv_getenv("PERL_USE_UNSAFE_INC");
4762 if (unsafe && strEQ(unsafe, "1"))
4763#endif
4764 S_incpush(aTHX_ STR_WITH_LEN("."), 0);
4765 }
774d564b 4766}
4767
739a0b84 4768#if defined(DOSISH) || defined(__SYMBIAN32__)
774d564b 4769# define PERLLIB_SEP ';'
39bb759e 4770#elif defined(__VMS)
483efd0a 4771# define PERLLIB_SEP PL_perllib_sep
39bb759e 4772#else
e37778c2 4773# define PERLLIB_SEP ':'
774d564b 4774#endif
4775#ifndef PERLLIB_MANGLE
4776# define PERLLIB_MANGLE(s,n) (s)
ac27b0f5 4777#endif
774d564b 4778
59d6f6a4 4779#ifndef PERL_IS_MINIPERL
ad17a1ae
NC
4780/* Push a directory onto @INC if it exists.
4781 Generate a new SV if we do this, to save needing to copy the SV we push
4782 onto @INC */
4783STATIC SV *
7ffdaae6 4784S_incpush_if_exists(pTHX_ AV *const av, SV *dir, SV *const stem)
ad17a1ae
NC
4785{
4786 Stat_t tmpstatbuf;
7918f24d
NC
4787
4788 PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS;
4789
848ef955 4790 if (PerlLIO_stat(SvPVX_const(dir), &tmpstatbuf) >= 0 &&
ad17a1ae 4791 S_ISDIR(tmpstatbuf.st_mode)) {
3a9a9ba7 4792 av_push(av, dir);
7ffdaae6
NC
4793 dir = newSVsv(stem);
4794 } else {
4795 /* Truncate dir back to stem. */
4796 SvCUR_set(dir, SvCUR(stem));
ad17a1ae
NC
4797 }
4798 return dir;
4799}
59d6f6a4 4800#endif
ad17a1ae 4801
c29067d7
CH
4802STATIC SV *
4803S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags)
774d564b 4804{
6434436b 4805 const U8 canrelocate = (U8)flags & INCPUSH_CAN_RELOCATE;
c29067d7 4806 SV *libdir;
774d564b 4807
c29067d7 4808 PERL_ARGS_ASSERT_MAYBERELOCATE;
08d0d8ab 4809 assert(len > 0);
3a9a9ba7 4810
d2898d73
EB
4811 /* I am not convinced that this is valid when PERLLIB_MANGLE is
4812 defined to so something (in os2/os2.c), but the code has been
4813 this way, ignoring any possible changed of length, since
4814 760ac839baf413929cd31cc32ffd6dba6b781a81 (5.003_02) so I'll leave
4815 it be. */
4816 libdir = newSVpvn(PERLLIB_MANGLE(dir, len), len);
774d564b 4817
81600524 4818#ifdef VMS
db12e2d3 4819 {
81600524 4820 char *unix;
81600524
CB
4821
4822 if ((unix = tounixspec_ts(SvPV(libdir,len),NULL)) != NULL) {
4823 len = strlen(unix);
f420cce1 4824 while (len > 1 && unix[len-1] == '/') len--; /* Cosmetic */
81600524
CB
4825 sv_usepvn(libdir,unix,len);
4826 }
4827 else
4828 PerlIO_printf(Perl_error_log,
4829 "Failed to unixify @INC element \"%s\"\n",
9dfa9235 4830 SvPV_nolen_const(libdir));
db12e2d3 4831 }
81600524
CB
4832#endif
4833
dd374669
AL
4834 /* Do the if() outside the #ifdef to avoid warnings about an unused
4835 parameter. */
4836 if (canrelocate) {
88fe16b2
NC
4837#ifdef PERL_RELOCATABLE_INC
4838 /*
4839 * Relocatable include entries are marked with a leading .../
4840 *
4841 * The algorithm is
4842 * 0: Remove that leading ".../"
4843 * 1: Remove trailing executable name (anything after the last '/')
4844 * from the perl path to give a perl prefix
4845 * Then
4846 * While the @INC element starts "../" and the prefix ends with a real
4847 * directory (ie not . or ..) chop that real directory off the prefix
4848 * and the leading "../" from the @INC element. ie a logical "../"
4849 * cleanup
4850 * Finally concatenate the prefix and the remainder of the @INC element
4851 * The intent is that /usr/local/bin/perl and .../../lib/perl5
4852 * generates /usr/local/lib/perl5
4853 */
890ce7af 4854 const char *libpath = SvPVX(libdir);
88fe16b2 4855 STRLEN libpath_len = SvCUR(libdir);
61e2287f 4856 if (memBEGINs(libpath, libpath_len, ".../")) {
88fe16b2 4857 /* Game on! */
890ce7af 4858 SV * const caret_X = get_sv("\030", 0);
88fe16b2
NC
4859 /* Going to use the SV just as a scratch buffer holding a C
4860 string: */
4861 SV *prefix_sv;
4862 char *prefix;
4863 char *lastslash;
4864
4865 /* $^X is *the* source of taint if tainting is on, hence
4866 SvPOK() won't be true. */
4867 assert(caret_X);
4868 assert(SvPOKp(caret_X));
a663657d
NC
4869 prefix_sv = newSVpvn_flags(SvPVX(caret_X), SvCUR(caret_X),
4870 SvUTF8(caret_X));
88fe16b2
NC
4871 /* Firstly take off the leading .../
4872 If all else fail we'll do the paths relative to the current
4873 directory. */
4874 sv_chop(libdir, libpath + 4);
4875 /* Don't use SvPV as we're intentionally bypassing taining,
4876 mortal copies that the mg_get of tainting creates, and
4877 corruption that seems to come via the save stack.
4878 I guess that the save stack isn't correctly set up yet. */
4879 libpath = SvPVX(libdir);
4880 libpath_len = SvCUR(libdir);
4881
88fe16b2 4882 prefix = SvPVX(prefix_sv);
6dba01e2
KW
4883 lastslash = (char *) my_memrchr(prefix, '/',
4884 SvEND(prefix_sv) - prefix);
88fe16b2
NC
4885
4886 /* First time in with the *lastslash = '\0' we just wipe off
4887 the trailing /perl from (say) /usr/foo/bin/perl
4888 */
4889 if (lastslash) {
4890 SV *tempsv;
4891 while ((*lastslash = '\0'), /* Do that, come what may. */
61e2287f 4892 ( memBEGINs(libpath, libpath_len, "../")
6dba01e2
KW
4893 && (lastslash =
4894 (char *) my_memrchr(prefix, '/',
4895 SvEND(prefix_sv) - prefix))))
4896 {
88fe16b2
NC
4897 if (lastslash[1] == '\0'
4898 || (lastslash[1] == '.'
4899 && (lastslash[2] == '/' /* ends "/." */
4900 || (lastslash[2] == '/'
4901 && lastslash[3] == '/' /* or "/.." */
4902 )))) {
4903 /* Prefix ends "/" or "/." or "/..", any of which
4904 are fishy, so don't do any more logical cleanup.
4905 */
4906 break;
4907 }
4908 /* Remove leading "../" from path */
4909 libpath += 3;
4910 libpath_len -= 3;
4911 /* Next iteration round the loop removes the last
4912 directory name from prefix by writing a '\0' in
4913 the while clause. */
4914 }
4915 /* prefix has been terminated with a '\0' to the correct
4916 length. libpath points somewhere into the libdir SV.
4917 We need to join the 2 with '/' and drop the result into
4918 libdir. */
4919 tempsv = Perl_newSVpvf(aTHX_ "%s/%s", prefix, libpath);
4920 SvREFCNT_dec(libdir);
4921 /* And this is the new libdir. */
4922 libdir = tempsv;
284167a5 4923 if (TAINTING_get &&
985213f2
AB
4924 (PerlProc_getuid() != PerlProc_geteuid() ||
4925 PerlProc_getgid() != PerlProc_getegid())) {
486ec47a 4926 /* Need to taint relocated paths if running set ID */
88fe16b2
NC
4927 SvTAINTED_on(libdir);
4928 }
4929 }
4930 SvREFCNT_dec(prefix_sv);
4931 }
88fe16b2 4932#endif
dd374669 4933 }
c29067d7 4934 return libdir;
c29067d7
CH
4935}
4936
4937STATIC void
4938S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags)
4939{
c29067d7
CH
4940#ifndef PERL_IS_MINIPERL
4941 const U8 using_sub_dirs
4942 = (U8)flags & (INCPUSH_ADD_VERSIONED_SUB_DIRS
4943 |INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_ADD_OLD_VERS);
4944 const U8 add_versioned_sub_dirs
4945 = (U8)flags & INCPUSH_ADD_VERSIONED_SUB_DIRS;
4946 const U8 add_archonly_sub_dirs
4947 = (U8)flags & INCPUSH_ADD_ARCHONLY_SUB_DIRS;
4948#ifdef PERL_INC_VERSION_LIST
4949 const U8 addoldvers = (U8)flags & INCPUSH_ADD_OLD_VERS;
4950#endif
4951#endif
4952 const U8 unshift = (U8)flags & INCPUSH_UNSHIFT;
4953 const U8 push_basedir = (flags & INCPUSH_NOT_BASEDIR) ? 0 : 1;
4954 AV *const inc = GvAVn(PL_incgv);
4955
4956 PERL_ARGS_ASSERT_INCPUSH;
4957 assert(len > 0);
4958
4959 /* Could remove this vestigial extra block, if we don't mind a lot of
4960 re-indenting diff noise. */
4961 {
5a702b9a 4962 SV *const libdir = mayberelocate(dir, len, flags);
c29067d7
CH
4963 /* Change 20189146be79a0596543441fa369c6bf7f85103f, to fix RT#6665,
4964 arranged to unshift #! line -I onto the front of @INC. However,
4965 -I can add version and architecture specific libraries, and they
4966 need to go first. The old code assumed that it was always
4967 pushing. Hence to make it work, need to push the architecture
4968 (etc) libraries onto a temporary array, then "unshift" that onto
4969 the front of @INC. */
4970#ifndef PERL_IS_MINIPERL
4971 AV *const av = (using_sub_dirs) ? (unshift ? newAV() : inc) : NULL;
c29067d7 4972
774d564b 4973 /*
4974 * BEFORE pushing libdir onto @INC we may first push version- and
4975 * archname-specific sub-directories.
4976 */
ee80e7be 4977 if (using_sub_dirs) {
5a702b9a 4978 SV *subdir = newSVsv(libdir);
29d82f8d 4979#ifdef PERL_INC_VERSION_LIST
8353b874 4980 /* Configure terminates PERL_INC_VERSION_LIST with a NULL */
c4420975
AL
4981 const char * const incverlist[] = { PERL_INC_VERSION_LIST };
4982 const char * const *incver;
29d82f8d 4983#endif
7ffdaae6 4984
1e3208d8 4985 if (add_versioned_sub_dirs) {
9c8a64f0 4986 /* .../version/archname if -d .../version/archname */
e51b748d 4987 sv_catpvs(subdir, "/" PERL_FS_VERSION "/" ARCHNAME);
7ffdaae6 4988 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
4b03c463 4989
9c8a64f0 4990 /* .../version if -d .../version */
e51b748d 4991 sv_catpvs(subdir, "/" PERL_FS_VERSION);
7ffdaae6 4992 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
29d82f8d 4993 }
9c8a64f0 4994
9c8a64f0 4995#ifdef PERL_INC_VERSION_LIST
ccc2aad8 4996 if (addoldvers) {
9c8a64f0
GS
4997 for (incver = incverlist; *incver; incver++) {
4998 /* .../xxx if -d .../xxx */
e51b748d 4999 Perl_sv_catpvf(aTHX_ subdir, "/%s", *incver);
7ffdaae6 5000 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
9c8a64f0
GS
5001 }
5002 }
29d82f8d 5003#endif
c992324b 5004
1e3208d8 5005 if (add_archonly_sub_dirs) {
c992324b 5006 /* .../archname if -d .../archname */
e51b748d 5007 sv_catpvs(subdir, "/" ARCHNAME);
7ffdaae6 5008 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
c992324b
NC
5009
5010 }
10cc20f6
NC
5011
5012 assert (SvREFCNT(subdir) == 1);
5013 SvREFCNT_dec(subdir);
774d564b 5014 }
59d6f6a4 5015#endif /* !PERL_IS_MINIPERL */
20189146
RGS
5016 /* finally add this lib directory at the end of @INC */
5017 if (unshift) {
76895e89 5018#ifdef PERL_IS_MINIPERL
c70927a6 5019 const Size_t extra = 0;
76895e89 5020#else
b9f2b683 5021 Size_t extra = av_tindex(av) + 1;
76895e89 5022#endif
a26c0e28
NC
5023 av_unshift(inc, extra + push_basedir);
5024 if (push_basedir)
5025 av_store(inc, extra, libdir);
76895e89 5026#ifndef PERL_IS_MINIPERL
3a9a9ba7
NC
5027 while (extra--) {
5028 /* av owns a reference, av_store() expects to be donated a
5029 reference, and av expects to be sane when it's cleared.
5030 If I wanted to be naughty and wrong, I could peek inside the
5031 implementation of av_clear(), realise that it uses
5032 SvREFCNT_dec() too, so av's array could be a run of NULLs,
5033 and so directly steal from it (with a memcpy() to inc, and
5034 then memset() to NULL them out. But people copy code from the
5035 core expecting it to be best practise, so let's use the API.
5036 Although studious readers will note that I'm not checking any
5037 return codes. */
5038 av_store(inc, extra, SvREFCNT_inc(*av_fetch(av, extra, FALSE)));
5039 }
5040 SvREFCNT_dec(av);
59d6f6a4 5041#endif
20189146 5042 }
a26c0e28 5043 else if (push_basedir) {
3a9a9ba7 5044 av_push(inc, libdir);
20189146 5045 }
a26c0e28
NC
5046
5047 if (!push_basedir) {
5048 assert (SvREFCNT(libdir) == 1);
5049 SvREFCNT_dec(libdir);
5050 }
774d564b 5051 }
34de22dd 5052}
93a17b20 5053
55b4bc1c 5054STATIC void
50d61629 5055S_incpush_use_sep(pTHX_ const char *p, STRLEN len, U32 flags)
55b4bc1c 5056{
50d61629
NC
5057 const char *s;
5058 const char *end;
55b4bc1c
NC
5059 /* This logic has been broken out from S_incpush(). It may be possible to
5060 simplify it. */
5061
4705144d
NC
5062 PERL_ARGS_ASSERT_INCPUSH_USE_SEP;
5063
f31c6eed
JD
5064 /* perl compiled with -DPERL_RELOCATABLE_INCPUSH will ignore the len
5065 * argument to incpush_use_sep. This allows creation of relocatable
5066 * Perl distributions that patch the binary at install time. Those
5067 * distributions will have to provide their own relocation tools; this
5068 * is not a feature otherwise supported by core Perl.
5069 */
5070#ifndef PERL_RELOCATABLE_INCPUSH
50d61629 5071 if (!len)
f31c6eed 5072#endif
50d61629
NC
5073 len = strlen(p);
5074
5075 end = p + len;
5076
55b4bc1c 5077 /* Break at all separators */
e42f52dd 5078 while ((s = (const char*)memchr(p, PERLLIB_SEP, end - p))) {
50d61629
NC
5079 if (s == p) {
5080 /* skip any consecutive separators */
55b4bc1c 5081
55b4bc1c 5082 /* Uncomment the next line for PATH semantics */
50d61629 5083 /* But you'll need to write tests */
55b4bc1c 5084 /* av_push(GvAVn(PL_incgv), newSVpvs(".")); */
50d61629 5085 } else {
55b4bc1c 5086 incpush(p, (STRLEN)(s - p), flags);
55b4bc1c 5087 }
50d61629 5088 p = s + 1;
55b4bc1c 5089 }
50d61629
NC
5090 if (p != end)
5091 incpush(p, (STRLEN)(end - p), flags);
5092
55b4bc1c 5093}
199100c8 5094
93a17b20 5095void
864dbfa3 5096Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
93a17b20 5097{
971a9dd3 5098 SV *atsv;
8162b70e 5099 volatile const line_t oldline = PL_curcop ? CopLINE(PL_curcop) : 0;
312caa8e 5100 CV *cv;
22921e25 5101 STRLEN len;
6224f72b 5102 int ret;
db36c5a1 5103 dJMPENV;
93a17b20 5104
7918f24d
NC
5105 PERL_ARGS_ASSERT_CALL_LIST;
5106
b9f2b683 5107 while (av_tindex(paramList) >= 0) {
ea726b52 5108 cv = MUTABLE_CV(av_shift(paramList));
ece599bd
RGS
5109 if (PL_savebegin) {
5110 if (paramList == PL_beginav) {
059a8bb7 5111 /* save PL_beginav for compiler */
ad64d0ec 5112 Perl_av_create_and_push(aTHX_ &PL_beginav_save, MUTABLE_SV(cv));
ece599bd
RGS
5113 }
5114 else if (paramList == PL_checkav) {
5115 /* save PL_checkav for compiler */
ad64d0ec 5116 Perl_av_create_and_push(aTHX_ &PL_checkav_save, MUTABLE_SV(cv));
ece599bd 5117 }
3c10abe3
AG
5118 else if (paramList == PL_unitcheckav) {
5119 /* save PL_unitcheckav for compiler */
ad64d0ec 5120 Perl_av_create_and_push(aTHX_ &PL_unitcheckav_save, MUTABLE_SV(cv));
3c10abe3 5121 }
059a8bb7 5122 } else {
b5bbe64a 5123 SAVEFREESV(cv);
059a8bb7 5124 }
14dd3ad8 5125 JMPENV_PUSH(ret);
6224f72b 5126 switch (ret) {
312caa8e 5127 case 0:
d6f07c05 5128 CALL_LIST_BODY(cv);
971a9dd3 5129 atsv = ERRSV;
10516c54 5130 (void)SvPV_const(atsv, len);
312caa8e
CS
5131 if (len) {
5132 PL_curcop = &PL_compiling;
57843af0 5133 CopLINE_set(PL_curcop, oldline);
312caa8e 5134 if (paramList == PL_beginav)
396482e1 5135 sv_catpvs(atsv, "BEGIN failed--compilation aborted");
312caa8e 5136 else
4f25aa18
GS
5137 Perl_sv_catpvf(aTHX_ atsv,
5138 "%s failed--call queue aborted",
7d30b5c4 5139 paramList == PL_checkav ? "CHECK"
4f25aa18 5140 : paramList == PL_initav ? "INIT"
3c10abe3 5141 : paramList == PL_unitcheckav ? "UNITCHECK"
4f25aa18 5142 : "END");
312caa8e
CS
5143 while (PL_scopestack_ix > oldscope)
5144 LEAVE;
14dd3ad8 5145 JMPENV_POP;
147e3846 5146 Perl_croak(aTHX_ "%" SVf, SVfARG(atsv));
a0d0e21e 5147 }
85e6fe83 5148 break;
6224f72b 5149 case 1:
f86702cc 5150 STATUS_ALL_FAILURE;
924ba076 5151 /* FALLTHROUGH */
6224f72b 5152 case 2:
85e6fe83 5153 /* my_exit() was called */
3280af22 5154 while (PL_scopestack_ix > oldscope)
2ae324a7 5155 LEAVE;
84902520 5156 FREETMPS;
03d9f026 5157 SET_CURSTASH(PL_defstash);
3280af22 5158 PL_curcop = &PL_compiling;
57843af0 5159 CopLINE_set(PL_curcop, oldline);
14dd3ad8 5160 JMPENV_POP;
f86702cc 5161 my_exit_jump();
e5964223 5162 NOT_REACHED; /* NOTREACHED */
6224f72b 5163 case 3:
312caa8e
CS
5164 if (PL_restartop) {
5165 PL_curcop = &PL_compiling;
57843af0 5166 CopLINE_set(PL_curcop, oldline);
312caa8e 5167 JMPENV_JUMP(3);
85e6fe83 5168 }
5637ef5b 5169 PerlIO_printf(Perl_error_log, "panic: restartop in call_list\n");
312caa8e
CS
5170 FREETMPS;
5171 break;
8990e307 5172 }
14dd3ad8 5173 JMPENV_POP;
93a17b20 5174 }
93a17b20 5175}
93a17b20 5176
72eff736
KW
5177/*
5178=for apidoc my_exit
5179
5180A wrapper for the C library L<exit(3)>, honoring what L<perlapi/PL_exit_flags>
5181say to do.
5182
5183=cut
5184*/
5185
f86702cc 5186void
864dbfa3 5187Perl_my_exit(pTHX_ U32 status)
f86702cc 5188{
6136213b
JGM
5189 if (PL_exit_flags & PERL_EXIT_ABORT) {
5190 abort();
5191 }
5192 if (PL_exit_flags & PERL_EXIT_WARN) {
5193 PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */
7b0eb0b8 5194 Perl_warn(aTHX_ "Unexpected exit %lu", (unsigned long)status);
6136213b
JGM
5195 PL_exit_flags &= ~PERL_EXIT_ABORT;
5196 }
f86702cc 5197 switch (status) {
5198 case 0:
5199 STATUS_ALL_SUCCESS;
5200 break;
5201 case 1:
5202 STATUS_ALL_FAILURE;
5203 break;
5204 default:
6ac6a52b 5205 STATUS_EXIT_SET(status);
f86702cc 5206 break;
5207 }
5208 my_exit_jump();
5209}
5210
5211void
864dbfa3 5212Perl_my_failure_exit(pTHX)
f86702cc 5213{
5214#ifdef VMS
fb38d079
JM
5215 /* We have been called to fall on our sword. The desired exit code
5216 * should be already set in STATUS_UNIX, but could be shifted over
0968cdad
JM
5217 * by 8 bits. STATUS_UNIX_EXIT_SET will handle the cases where a
5218 * that code is set.
fb38d079
JM
5219 *
5220 * If an error code has not been set, then force the issue.
5221 */
0968cdad
JM
5222 if (MY_POSIX_EXIT) {
5223
e08e1e1d
JM
5224 /* According to the die_exit.t tests, if errno is non-zero */
5225 /* It should be used for the error status. */
0968cdad 5226
e08e1e1d
JM
5227 if (errno == EVMSERR) {
5228 STATUS_NATIVE = vaxc$errno;
5229 } else {
0968cdad 5230
e08e1e1d
JM
5231 /* According to die_exit.t tests, if the child_exit code is */
5232 /* also zero, then we need to exit with a code of 255 */
5233 if ((errno != 0) && (errno < 256))
5234 STATUS_UNIX_EXIT_SET(errno);
5235 else if (STATUS_UNIX < 255) {
0968cdad 5236 STATUS_UNIX_EXIT_SET(255);
e08e1e1d
JM
5237 }
5238
0968cdad 5239 }
e08e1e1d
JM
5240
5241 /* The exit code could have been set by $? or vmsish which
5242 * means that it may not have fatal set. So convert
5243 * success/warning codes to fatal with out changing
5244 * the POSIX status code. The severity makes VMS native
5245 * status handling work, while UNIX mode programs use the
5246 * the POSIX exit codes.
5247 */
5248 if ((STATUS_NATIVE & (STS$K_SEVERE|STS$K_ERROR)) == 0) {
5249 STATUS_NATIVE &= STS$M_COND_ID;
5250 STATUS_NATIVE |= STS$K_ERROR | STS$M_INHIB_MSG;
5251 }
0968cdad
JM
5252 }
5253 else {
5254 /* Traditionally Perl on VMS always expects a Fatal Error. */
5255 if (vaxc$errno & 1) {
5256
5257 /* So force success status to failure */
5258 if (STATUS_NATIVE & 1)
5259 STATUS_ALL_FAILURE;
5260 }
5261 else {
5262 if (!vaxc$errno) {
5263 STATUS_UNIX = EINTR; /* In case something cares */
5264 STATUS_ALL_FAILURE;
5265 }
5266 else {
5267 int severity;
5268 STATUS_NATIVE = vaxc$errno; /* Should already be this */
5269
5270 /* Encode the severity code */
5271 severity = STATUS_NATIVE & STS$M_SEVERITY;
5272 STATUS_UNIX = (severity ? severity : 1) << 8;
5273
5274 /* Perl expects this to be a fatal error */
5275 if (severity != STS$K_SEVERE)
5276 STATUS_ALL_FAILURE;
5277 }
5278 }
5279 }
fb38d079 5280
f86702cc 5281#else
9b599b2a 5282 int exitstatus;
69374fe7
Z
5283 int eno = errno;
5284 if (eno & 255)
5285 STATUS_UNIX_SET(eno);
9b599b2a 5286 else {
e5218da5 5287 exitstatus = STATUS_UNIX >> 8;
9b599b2a 5288 if (exitstatus & 255)
e5218da5 5289 STATUS_UNIX_SET(exitstatus);
9b599b2a 5290 else
e5218da5 5291 STATUS_UNIX_SET(255);
9b599b2a 5292 }
f86702cc 5293#endif
6136213b
JGM
5294 if (PL_exit_flags & PERL_EXIT_ABORT) {
5295 abort();
5296 }
5297 if (PL_exit_flags & PERL_EXIT_WARN) {
5298 PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */
7b0eb0b8 5299 Perl_warn(aTHX_ "Unexpected exit failure %ld", (long)PL_statusvalue);
6136213b
JGM
5300 PL_exit_flags &= ~PERL_EXIT_ABORT;
5301 }
f86702cc 5302 my_exit_jump();
93a17b20
LW
5303}
5304
76e3520e 5305STATIC void
cea2e8a9 5306S_my_exit_jump(pTHX)
f86702cc 5307{
3280af22
NIS
5308 if (PL_e_script) {
5309 SvREFCNT_dec(PL_e_script);
a0714e2c 5310 PL_e_script = NULL;
f86702cc 5311 }
5312
3280af22 5313 POPSTACK_TO(PL_mainstack);
3706fcea
DM
5314 if (cxstack_ix >= 0) {
5315 dounwind(-1);
ed8ff0f3 5316 cx_popblock(cxstack);
3706fcea 5317 }
f97a0ef2 5318 LEAVE_SCOPE(0);
ff0cee69 5319
6224f72b 5320 JMPENV_JUMP(2);
f86702cc 5321}
873ef191 5322
0cb96387 5323static I32
acfe0abc 5324read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen)
873ef191 5325{
9d4ba2ae 5326 const char * const p = SvPVX_const(PL_e_script);
aea1585c
KW
5327 const char * const e = SvEND(PL_e_script);
5328 const char *nl = (char *) memchr(p, '\n', e - p);
9d4ba2ae
AL
5329
5330 PERL_UNUSED_ARG(idx);
5331 PERL_UNUSED_ARG(maxlen);
dd374669 5332
aea1585c 5333 nl = (nl) ? nl+1 : e;
7dfe3f66 5334 if (nl-p == 0) {
0cb96387 5335 filter_del(read_e_script);
873ef191 5336 return 0;
7dfe3f66 5337 }
873ef191 5338 sv_catpvn(buf_sv, p, nl-p);
3280af22 5339 sv_chop(PL_e_script, nl);
873ef191
GS
5340 return 1;
5341}
66610fdd 5342
db6e00bd
DD
5343/* removes boilerplate code at the end of each boot_Module xsub */
5344void
b01a1eea 5345Perl_xs_boot_epilog(pTHX_ const I32 ax)
db6e00bd
DD
5346{
5347 if (PL_unitcheckav)
5348 call_list(PL_scopestack_ix, PL_unitcheckav);
5349 XSRETURN_YES;
5350}
5351
66610fdd 5352/*
14d04a33 5353 * ex: set ts=8 sts=4 sw=4 et:
37442d52 5354 */