This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Change S_open_script() to return NULL to signal "read from stdin".
[perl5.git] / perl.c
1 #line 2 "perl.c"
2 /*    perl.c
3  *
4  *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
5  *    2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
6  *     by Larry Wall and others
7  *
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.
10  *
11  */
12
13 /*
14  *      A ship then new they built for him
15  *      of mithril and of elven-glass
16  *              --from Bilbo's song of EƤrendil
17  *
18  *     [p.236 of _The Lord of the Rings_, II/i: "Many Meetings"]
19  */
20
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()
24  * function of the interpreter; that can be found in perlmain.c
25  */
26
27 #ifdef PERL_IS_MINIPERL
28 #  define USE_SITECUSTOMIZE
29 #endif
30
31 #include "EXTERN.h"
32 #define PERL_IN_PERL_C
33 #include "perl.h"
34 #include "patchlevel.h"                 /* for local_patches */
35 #include "XSUB.h"
36
37 #ifdef NETWARE
38 #include "nwutil.h"     
39 #endif
40
41 #ifdef USE_KERN_PROC_PATHNAME
42 #  include <sys/sysctl.h>
43 #endif
44
45 #ifdef USE_NSGETEXECUTABLEPATH
46 #  include <mach-o/dyld.h>
47 #endif
48
49 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
50 #  ifdef I_SYSUIO
51 #    include <sys/uio.h>
52 #  endif
53
54 union control_un {
55   struct cmsghdr cm;
56   char control[CMSG_SPACE(sizeof(int))];
57 };
58
59 #endif
60
61 #ifdef __BEOS__
62 #  define HZ 1000000
63 #endif
64
65 #ifndef HZ
66 #  ifdef CLK_TCK
67 #    define HZ CLK_TCK
68 #  else
69 #    define HZ 60
70 #  endif
71 #endif
72
73 #if !defined(STANDARD_C) && !defined(HAS_GETENV_PROTOTYPE) && !defined(PERL_MICRO)
74 char *getenv (char *); /* Usually in <stdlib.h> */
75 #endif
76
77 static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen);
78
79 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
80 /* Drop everything. Heck, don't even try to call it */
81 #  define validate_suid(validarg, scriptname, fdscript, suidscript, linestr_sv, rsfp) NOOP
82 #else
83 /* Drop almost everything */
84 #  define validate_suid(validarg, scriptname, fdscript, suidscript, linestr_sv, rsfp) S_validate_suid(aTHX_ rsfp)
85 #endif
86
87 #define CALL_BODY_SUB(myop) \
88     if (PL_op == (myop)) \
89         PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); \
90     if (PL_op) \
91         CALLRUNOPS(aTHX);
92
93 #define CALL_LIST_BODY(cv) \
94     PUSHMARK(PL_stack_sp); \
95     call_sv(MUTABLE_SV((cv)), G_EVAL|G_DISCARD|G_VOID);
96
97 static void
98 S_init_tls_and_interp(PerlInterpreter *my_perl)
99 {
100     dVAR;
101     if (!PL_curinterp) {                        
102         PERL_SET_INTERP(my_perl);
103 #if defined(USE_ITHREADS)
104         INIT_THREADS;
105         ALLOC_THREAD_KEY;
106         PERL_SET_THX(my_perl);
107         OP_REFCNT_INIT;
108         OP_CHECK_MUTEX_INIT;
109         HINTS_REFCNT_INIT;
110         MUTEX_INIT(&PL_dollarzero_mutex);
111         MUTEX_INIT(&PL_my_ctx_mutex);
112 #  endif
113     }
114 #if defined(USE_ITHREADS)
115     else
116 #else
117     /* This always happens for non-ithreads  */
118 #endif
119     {
120         PERL_SET_THX(my_perl);
121     }
122 }
123
124
125 /* these implement the PERL_SYS_INIT, PERL_SYS_INIT3, PERL_SYS_TERM macros */
126
127 void
128 Perl_sys_init(int* argc, char*** argv)
129 {
130     dVAR;
131
132     PERL_ARGS_ASSERT_SYS_INIT;
133
134     PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */
135     PERL_UNUSED_ARG(argv);
136     PERL_SYS_INIT_BODY(argc, argv);
137 }
138
139 void
140 Perl_sys_init3(int* argc, char*** argv, char*** env)
141 {
142     dVAR;
143
144     PERL_ARGS_ASSERT_SYS_INIT3;
145
146     PERL_UNUSED_ARG(argc); /* may not be used depending on _BODY macro */
147     PERL_UNUSED_ARG(argv);
148     PERL_UNUSED_ARG(env);
149     PERL_SYS_INIT3_BODY(argc, argv, env);
150 }
151
152 void
153 Perl_sys_term()
154 {
155     dVAR;
156     if (!PL_veto_cleanup) {
157         PERL_SYS_TERM_BODY();
158     }
159 }
160
161
162 #ifdef PERL_IMPLICIT_SYS
163 PerlInterpreter *
164 perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS,
165                  struct IPerlMem* ipMP, struct IPerlEnv* ipE,
166                  struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO,
167                  struct IPerlDir* ipD, struct IPerlSock* ipS,
168                  struct IPerlProc* ipP)
169 {
170     PerlInterpreter *my_perl;
171
172     PERL_ARGS_ASSERT_PERL_ALLOC_USING;
173
174     /* Newx() needs interpreter, so call malloc() instead */
175     my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter));
176     S_init_tls_and_interp(my_perl);
177     Zero(my_perl, 1, PerlInterpreter);
178     PL_Mem = ipM;
179     PL_MemShared = ipMS;
180     PL_MemParse = ipMP;
181     PL_Env = ipE;
182     PL_StdIO = ipStd;
183     PL_LIO = ipLIO;
184     PL_Dir = ipD;
185     PL_Sock = ipS;
186     PL_Proc = ipP;
187     INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl);
188
189     return my_perl;
190 }
191 #else
192
193 /*
194 =head1 Embedding Functions
195
196 =for apidoc perl_alloc
197
198 Allocates a new Perl interpreter.  See L<perlembed>.
199
200 =cut
201 */
202
203 PerlInterpreter *
204 perl_alloc(void)
205 {
206     PerlInterpreter *my_perl;
207
208     /* Newx() needs interpreter, so call malloc() instead */
209     my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
210
211     S_init_tls_and_interp(my_perl);
212 #ifndef PERL_TRACK_MEMPOOL
213     return (PerlInterpreter *) ZeroD(my_perl, 1, PerlInterpreter);
214 #else
215     Zero(my_perl, 1, PerlInterpreter);
216     INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl);
217     return my_perl;
218 #endif
219 }
220 #endif /* PERL_IMPLICIT_SYS */
221
222 /*
223 =for apidoc perl_construct
224
225 Initializes a new Perl interpreter.  See L<perlembed>.
226
227 =cut
228 */
229
230 void
231 perl_construct(pTHXx)
232 {
233     dVAR;
234
235     PERL_ARGS_ASSERT_PERL_CONSTRUCT;
236
237 #ifdef MULTIPLICITY
238     init_interp();
239     PL_perl_destruct_level = 1;
240 #else
241     PERL_UNUSED_ARG(my_perl);
242    if (PL_perl_destruct_level > 0)
243        init_interp();
244 #endif
245     PL_curcop = &PL_compiling;  /* needed by ckWARN, right away */
246
247     /* set read-only and try to insure than we wont see REFCNT==0
248        very often */
249
250     SvREADONLY_on(&PL_sv_undef);
251     SvREFCNT(&PL_sv_undef) = (~(U32)0)/2;
252
253     sv_setpv(&PL_sv_no,PL_No);
254     /* value lookup in void context - happens to have the side effect
255        of caching the numeric forms. However, as &PL_sv_no doesn't contain
256        a string that is a valid numer, we have to turn the public flags by
257        hand:  */
258     SvNV(&PL_sv_no);
259     SvIV(&PL_sv_no);
260     SvIOK_on(&PL_sv_no);
261     SvNOK_on(&PL_sv_no);
262     SvREADONLY_on(&PL_sv_no);
263     SvREFCNT(&PL_sv_no) = (~(U32)0)/2;
264
265     sv_setpv(&PL_sv_yes,PL_Yes);
266     SvNV(&PL_sv_yes);
267     SvIV(&PL_sv_yes);
268     SvREADONLY_on(&PL_sv_yes);
269     SvREFCNT(&PL_sv_yes) = (~(U32)0)/2;
270
271     SvREADONLY_on(&PL_sv_placeholder);
272     SvREFCNT(&PL_sv_placeholder) = (~(U32)0)/2;
273
274     PL_sighandlerp = (Sighandler_t) Perl_sighandler;
275 #ifdef PERL_USES_PL_PIDSTATUS
276     PL_pidstatus = newHV();
277 #endif
278
279     PL_rs = newSVpvs("\n");
280
281     init_stacks();
282
283     init_ids();
284
285     JMPENV_BOOTSTRAP;
286     STATUS_ALL_SUCCESS;
287
288     init_i18nl10n(1);
289     SET_NUMERIC_STANDARD();
290
291 #if defined(LOCAL_PATCH_COUNT)
292     PL_localpatches = local_patches;    /* For possible -v */
293 #endif
294
295 #ifdef HAVE_INTERP_INTERN
296     sys_intern_init();
297 #endif
298
299     PerlIO_init(aTHX);                  /* Hook to IO system */
300
301     PL_fdpid = newAV();                 /* for remembering popen pids by fd */
302     PL_modglobal = newHV();             /* pointers to per-interpreter module globals */
303     PL_errors = newSVpvs("");
304     sv_setpvs(PERL_DEBUG_PAD(0), "");   /* For regex debugging. */
305     sv_setpvs(PERL_DEBUG_PAD(1), "");   /* ext/re needs these */
306     sv_setpvs(PERL_DEBUG_PAD(2), "");   /* even without DEBUGGING. */
307 #ifdef USE_ITHREADS
308     /* First entry is a list of empty elements. It needs to be initialised
309        else all hell breaks loose in S_find_uninit_var().  */
310     Perl_av_create_and_push(aTHX_ &PL_regex_padav, newSVpvs(""));
311     PL_regex_pad = AvARRAY(PL_regex_padav);
312 #endif
313 #ifdef USE_REENTRANT_API
314     Perl_reentrant_init(aTHX);
315 #endif
316
317     /* Note that strtab is a rather special HV.  Assumptions are made
318        about not iterating on it, and not adding tie magic to it.
319        It is properly deallocated in perl_destruct() */
320     PL_strtab = newHV();
321
322     HvSHAREKEYS_off(PL_strtab);                 /* mandatory */
323     hv_ksplit(PL_strtab, 512);
324
325 #if defined(__DYNAMIC__) && (defined(NeXT) || defined(__NeXT__))
326     _dyld_lookup_and_bind
327         ("__environ", (unsigned long *) &environ_pointer, NULL);
328 #endif /* environ */
329
330 #ifndef PERL_MICRO
331 #   ifdef  USE_ENVIRON_ARRAY
332     PL_origenviron = environ;
333 #   endif
334 #endif
335
336     /* Use sysconf(_SC_CLK_TCK) if available, if not
337      * available or if the sysconf() fails, use the HZ.
338      * BeOS has those, but returns the wrong value.
339      * The HZ if not originally defined has been by now
340      * been defined as CLK_TCK, if available. */
341 #if defined(HAS_SYSCONF) && defined(_SC_CLK_TCK) && !defined(__BEOS__)
342     PL_clocktick = sysconf(_SC_CLK_TCK);
343     if (PL_clocktick <= 0)
344 #endif
345          PL_clocktick = HZ;
346
347     PL_stashcache = newHV();
348
349     PL_patchlevel = newSVpvs("v" PERL_VERSION_STRING);
350     PL_apiversion = newSVpvs("v" PERL_API_VERSION_STRING);
351
352 #ifdef HAS_MMAP
353     if (!PL_mmap_page_size) {
354 #if defined(HAS_SYSCONF) && (defined(_SC_PAGESIZE) || defined(_SC_MMAP_PAGE_SIZE))
355       {
356         SETERRNO(0, SS_NORMAL);
357 #   ifdef _SC_PAGESIZE
358         PL_mmap_page_size = sysconf(_SC_PAGESIZE);
359 #   else
360         PL_mmap_page_size = sysconf(_SC_MMAP_PAGE_SIZE);
361 #   endif
362         if ((long) PL_mmap_page_size < 0) {
363           if (errno) {
364             SV * const error = ERRSV;
365             SvUPGRADE(error, SVt_PV);
366             Perl_croak(aTHX_ "panic: sysconf: %s", SvPV_nolen_const(error));
367           }
368           else
369             Perl_croak(aTHX_ "panic: sysconf: pagesize unknown");
370         }
371       }
372 #else
373 #   ifdef HAS_GETPAGESIZE
374       PL_mmap_page_size = getpagesize();
375 #   else
376 #       if defined(I_SYS_PARAM) && defined(PAGESIZE)
377       PL_mmap_page_size = PAGESIZE;       /* compiletime, bad */
378 #       endif
379 #   endif
380 #endif
381       if (PL_mmap_page_size <= 0)
382         Perl_croak(aTHX_ "panic: bad pagesize %" IVdf,
383                    (IV) PL_mmap_page_size);
384     }
385 #endif /* HAS_MMAP */
386
387 #if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE)
388     PL_timesbase.tms_utime  = 0;
389     PL_timesbase.tms_stime  = 0;
390     PL_timesbase.tms_cutime = 0;
391     PL_timesbase.tms_cstime = 0;
392 #endif
393
394     PL_osname = Perl_savepvn(aTHX_ STR_WITH_LEN(OSNAME));
395
396     PL_registered_mros = newHV();
397     /* Start with 1 bucket, for DFS.  It's unlikely we'll need more.  */
398     HvMAX(PL_registered_mros) = 0;
399
400     ENTER;
401 }
402
403 /*
404 =for apidoc nothreadhook
405
406 Stub that provides thread hook for perl_destruct when there are
407 no threads.
408
409 =cut
410 */
411
412 int
413 Perl_nothreadhook(pTHX)
414 {
415     PERL_UNUSED_CONTEXT;
416     return 0;
417 }
418
419 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
420 void
421 Perl_dump_sv_child(pTHX_ SV *sv)
422 {
423     ssize_t got;
424     const int sock = PL_dumper_fd;
425     const int debug_fd = PerlIO_fileno(Perl_debug_log);
426     union control_un control;
427     struct msghdr msg;
428     struct iovec vec[2];
429     struct cmsghdr *cmptr;
430     int returned_errno;
431     unsigned char buffer[256];
432
433     PERL_ARGS_ASSERT_DUMP_SV_CHILD;
434
435     if(sock == -1 || debug_fd == -1)
436         return;
437
438     PerlIO_flush(Perl_debug_log);
439
440     /* All these shenanigans are to pass a file descriptor over to our child for
441        it to dump out to.  We can't let it hold open the file descriptor when it
442        forks, as the file descriptor it will dump to can turn out to be one end
443        of pipe that some other process will wait on for EOF. (So as it would
444        be open, the wait would be forever.)  */
445
446     msg.msg_control = control.control;
447     msg.msg_controllen = sizeof(control.control);
448     /* We're a connected socket so we don't need a destination  */
449     msg.msg_name = NULL;
450     msg.msg_namelen = 0;
451     msg.msg_iov = vec;
452     msg.msg_iovlen = 1;
453
454     cmptr = CMSG_FIRSTHDR(&msg);
455     cmptr->cmsg_len = CMSG_LEN(sizeof(int));
456     cmptr->cmsg_level = SOL_SOCKET;
457     cmptr->cmsg_type = SCM_RIGHTS;
458     *((int *)CMSG_DATA(cmptr)) = 1;
459
460     vec[0].iov_base = (void*)&sv;
461     vec[0].iov_len = sizeof(sv);
462     got = sendmsg(sock, &msg, 0);
463
464     if(got < 0) {
465         perror("Debug leaking scalars parent sendmsg failed");
466         abort();
467     }
468     if(got < sizeof(sv)) {
469         perror("Debug leaking scalars parent short sendmsg");
470         abort();
471     }
472
473     /* Return protocol is
474        int:             errno value
475        unsigned char:   length of location string (0 for empty)
476        unsigned char*:  string (not terminated)
477     */
478     vec[0].iov_base = (void*)&returned_errno;
479     vec[0].iov_len = sizeof(returned_errno);
480     vec[1].iov_base = buffer;
481     vec[1].iov_len = 1;
482
483     got = readv(sock, vec, 2);
484
485     if(got < 0) {
486         perror("Debug leaking scalars parent read failed");
487         PerlIO_flush(PerlIO_stderr());
488         abort();
489     }
490     if(got < sizeof(returned_errno) + 1) {
491         perror("Debug leaking scalars parent short read");
492         PerlIO_flush(PerlIO_stderr());
493         abort();
494     }
495
496     if (*buffer) {
497         got = read(sock, buffer + 1, *buffer);
498         if(got < 0) {
499             perror("Debug leaking scalars parent read 2 failed");
500             PerlIO_flush(PerlIO_stderr());
501             abort();
502         }
503
504         if(got < *buffer) {
505             perror("Debug leaking scalars parent short read 2");
506             PerlIO_flush(PerlIO_stderr());
507             abort();
508         }
509     }
510
511     if (returned_errno || *buffer) {
512         Perl_warn(aTHX_ "Debug leaking scalars child failed%s%.*s with errno"
513                   " %d: %s", (*buffer ? " at " : ""), (int) *buffer, buffer + 1,
514                   returned_errno, strerror(returned_errno));
515     }
516 }
517 #endif
518
519 /*
520 =for apidoc perl_destruct
521
522 Shuts down a Perl interpreter.  See L<perlembed>.
523
524 =cut
525 */
526
527 int
528 perl_destruct(pTHXx)
529 {
530     dVAR;
531     VOL signed char destruct_level;  /* see possible values in intrpvar.h */
532     HV *hv;
533 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
534     pid_t child;
535 #endif
536
537     PERL_ARGS_ASSERT_PERL_DESTRUCT;
538 #ifndef MULTIPLICITY
539     PERL_UNUSED_ARG(my_perl);
540 #endif
541
542     assert(PL_scopestack_ix == 1);
543
544     /* wait for all pseudo-forked children to finish */
545     PERL_WAIT_FOR_CHILDREN;
546
547     destruct_level = PL_perl_destruct_level;
548 #ifdef DEBUGGING
549     {
550         const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL");
551         if (s) {
552             const int i = atoi(s);
553             if (destruct_level < i)
554                 destruct_level = i;
555         }
556     }
557 #endif
558
559     if (PL_exit_flags & PERL_EXIT_DESTRUCT_END) {
560         dJMPENV;
561         int x = 0;
562
563         JMPENV_PUSH(x);
564         PERL_UNUSED_VAR(x);
565         if (PL_endav && !PL_minus_c) {
566             PERL_SET_PHASE(PERL_PHASE_END);
567             call_list(PL_scopestack_ix, PL_endav);
568         }
569         JMPENV_POP;
570     }
571     LEAVE;
572     FREETMPS;
573     assert(PL_scopestack_ix == 0);
574
575     /* Need to flush since END blocks can produce output */
576     my_fflush_all();
577
578     if (PL_threadhook(aTHX)) {
579         /* Threads hook has vetoed further cleanup */
580         PL_veto_cleanup = TRUE;
581         return STATUS_EXIT;
582     }
583
584 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
585     if (destruct_level != 0) {
586         /* Fork here to create a child. Our child's job is to preserve the
587            state of scalars prior to destruction, so that we can instruct it
588            to dump any scalars that we later find have leaked.
589            There's no subtlety in this code - it assumes POSIX, and it doesn't
590            fail gracefully  */
591         int fd[2];
592
593         if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) {
594             perror("Debug leaking scalars socketpair failed");
595             abort();
596         }
597
598         child = fork();
599         if(child == -1) {
600             perror("Debug leaking scalars fork failed");
601             abort();
602         }
603         if (!child) {
604             /* We are the child */
605             const int sock = fd[1];
606             const int debug_fd = PerlIO_fileno(Perl_debug_log);
607             int f;
608             const char *where;
609             /* Our success message is an integer 0, and a char 0  */
610             static const char success[sizeof(int) + 1] = {0};
611
612             close(fd[0]);
613
614             /* We need to close all other file descriptors otherwise we end up
615                with interesting hangs, where the parent closes its end of a
616                pipe, and sits waiting for (another) child to terminate. Only
617                that child never terminates, because it never gets EOF, because
618                we also have the far end of the pipe open.  We even need to
619                close the debugging fd, because sometimes it happens to be one
620                end of a pipe, and a process is waiting on the other end for
621                EOF. Normally it would be closed at some point earlier in
622                destruction, but if we happen to cause the pipe to remain open,
623                EOF never occurs, and we get an infinite hang. Hence all the
624                games to pass in a file descriptor if it's actually needed.  */
625
626             f = sysconf(_SC_OPEN_MAX);
627             if(f < 0) {
628                 where = "sysconf failed";
629                 goto abort;
630             }
631             while (f--) {
632                 if (f == sock)
633                     continue;
634                 close(f);
635             }
636
637             while (1) {
638                 SV *target;
639                 union control_un control;
640                 struct msghdr msg;
641                 struct iovec vec[1];
642                 struct cmsghdr *cmptr;
643                 ssize_t got;
644                 int got_fd;
645
646                 msg.msg_control = control.control;
647                 msg.msg_controllen = sizeof(control.control);
648                 /* We're a connected socket so we don't need a source  */
649                 msg.msg_name = NULL;
650                 msg.msg_namelen = 0;
651                 msg.msg_iov = vec;
652                 msg.msg_iovlen = sizeof(vec)/sizeof(vec[0]);
653
654                 vec[0].iov_base = (void*)&target;
655                 vec[0].iov_len = sizeof(target);
656       
657                 got = recvmsg(sock, &msg, 0);
658
659                 if(got == 0)
660                     break;
661                 if(got < 0) {
662                     where = "recv failed";
663                     goto abort;
664                 }
665                 if(got < sizeof(target)) {
666                     where = "short recv";
667                     goto abort;
668                 }
669
670                 if(!(cmptr = CMSG_FIRSTHDR(&msg))) {
671                     where = "no cmsg";
672                     goto abort;
673                 }
674                 if(cmptr->cmsg_len != CMSG_LEN(sizeof(int))) {
675                     where = "wrong cmsg_len";
676                     goto abort;
677                 }
678                 if(cmptr->cmsg_level != SOL_SOCKET) {
679                     where = "wrong cmsg_level";
680                     goto abort;
681                 }
682                 if(cmptr->cmsg_type != SCM_RIGHTS) {
683                     where = "wrong cmsg_type";
684                     goto abort;
685                 }
686
687                 got_fd = *(int*)CMSG_DATA(cmptr);
688                 /* For our last little bit of trickery, put the file descriptor
689                    back into Perl_debug_log, as if we never actually closed it
690                 */
691                 if(got_fd != debug_fd) {
692                     if (dup2(got_fd, debug_fd) == -1) {
693                         where = "dup2";
694                         goto abort;
695                     }
696                 }
697                 sv_dump(target);
698
699                 PerlIO_flush(Perl_debug_log);
700
701                 got = write(sock, &success, sizeof(success));
702
703                 if(got < 0) {
704                     where = "write failed";
705                     goto abort;
706                 }
707                 if(got < sizeof(success)) {
708                     where = "short write";
709                     goto abort;
710                 }
711             }
712             _exit(0);
713         abort:
714             {
715                 int send_errno = errno;
716                 unsigned char length = (unsigned char) strlen(where);
717                 struct iovec failure[3] = {
718                     {(void*)&send_errno, sizeof(send_errno)},
719                     {&length, 1},
720                     {(void*)where, length}
721                 };
722                 int got = writev(sock, failure, 3);
723                 /* Bad news travels fast. Faster than data. We'll get a SIGPIPE
724                    in the parent if we try to read from the socketpair after the
725                    child has exited, even if there was data to read.
726                    So sleep a bit to give the parent a fighting chance of
727                    reading the data.  */
728                 sleep(2);
729                 _exit((got == -1) ? errno : 0);
730             }
731             /* End of child.  */
732         }
733         PL_dumper_fd = fd[0];
734         close(fd[1]);
735     }
736 #endif
737     
738     /* We must account for everything.  */
739
740     /* Destroy the main CV and syntax tree */
741     /* Do this now, because destroying ops can cause new SVs to be generated
742        in Perl_pad_swipe, and when running with -DDEBUG_LEAKING_SCALARS they
743        PL_curcop to point to a valid op from which the filename structure
744        member is copied.  */
745     PL_curcop = &PL_compiling;
746     if (PL_main_root) {
747         /* ensure comppad/curpad to refer to main's pad */
748         if (CvPADLIST(PL_main_cv)) {
749             PAD_SET_CUR_NOSAVE(CvPADLIST(PL_main_cv), 1);
750         }
751         op_free(PL_main_root);
752         PL_main_root = NULL;
753     }
754     PL_main_start = NULL;
755     /* note that  PL_main_cv isn't usually actually freed at this point,
756      * due to the CvOUTSIDE refs from subs compiled within it. It will
757      * get freed once all the subs are freed in sv_clean_all(), for
758      * destruct_level > 0 */
759     SvREFCNT_dec(PL_main_cv);
760     PL_main_cv = NULL;
761     PERL_SET_PHASE(PERL_PHASE_DESTRUCT);
762
763     /* Tell PerlIO we are about to tear things apart in case
764        we have layers which are using resources that should
765        be cleaned up now.
766      */
767
768     PerlIO_destruct(aTHX);
769
770     if (PL_sv_objcount) {
771         /*
772          * Try to destruct global references.  We do this first so that the
773          * destructors and destructees still exist.  Some sv's might remain.
774          * Non-referenced objects are on their own.
775          */
776         sv_clean_objs();
777         PL_sv_objcount = 0;
778     }
779
780     /* unhook hooks which will soon be, or use, destroyed data */
781     SvREFCNT_dec(PL_warnhook);
782     PL_warnhook = NULL;
783     SvREFCNT_dec(PL_diehook);
784     PL_diehook = NULL;
785
786     /* call exit list functions */
787     while (PL_exitlistlen-- > 0)
788         PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr);
789
790     Safefree(PL_exitlist);
791
792     PL_exitlist = NULL;
793     PL_exitlistlen = 0;
794
795     SvREFCNT_dec(PL_registered_mros);
796
797     /* jettison our possibly duplicated environment */
798     /* if PERL_USE_SAFE_PUTENV is defined environ will not have been copied
799      * so we certainly shouldn't free it here
800      */
801 #ifndef PERL_MICRO
802 #if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV)
803     if (environ != PL_origenviron && !PL_use_safe_putenv
804 #ifdef USE_ITHREADS
805         /* only main thread can free environ[0] contents */
806         && PL_curinterp == aTHX
807 #endif
808         )
809     {
810         I32 i;
811
812         for (i = 0; environ[i]; i++)
813             safesysfree(environ[i]);
814
815         /* Must use safesysfree() when working with environ. */
816         safesysfree(environ);           
817
818         environ = PL_origenviron;
819     }
820 #endif
821 #endif /* !PERL_MICRO */
822
823     if (destruct_level == 0) {
824
825         DEBUG_P(debprofdump());
826
827 #if defined(PERLIO_LAYERS)
828         /* No more IO - including error messages ! */
829         PerlIO_cleanup(aTHX);
830 #endif
831
832         CopFILE_free(&PL_compiling);
833         CopSTASH_free(&PL_compiling);
834
835         /* The exit() function will do everything that needs doing. */
836         return STATUS_EXIT;
837     }
838
839 #ifdef USE_ITHREADS
840     /* the syntax tree is shared between clones
841      * so op_free(PL_main_root) only ReREFCNT_dec's
842      * REGEXPs in the parent interpreter
843      * we need to manually ReREFCNT_dec for the clones
844      */
845     SvREFCNT_dec(PL_regex_padav);
846     PL_regex_padav = NULL;
847     PL_regex_pad = NULL;
848 #endif
849
850     SvREFCNT_dec(MUTABLE_SV(PL_stashcache));
851     PL_stashcache = NULL;
852
853     /* loosen bonds of global variables */
854
855     /* XXX can PL_parser still be non-null here? */
856     if(PL_parser && PL_parser->rsfp) {
857         (void)PerlIO_close(PL_parser->rsfp);
858         PL_parser->rsfp = NULL;
859     }
860
861     if (PL_minus_F) {
862         Safefree(PL_splitstr);
863         PL_splitstr = NULL;
864     }
865
866     /* switches */
867     PL_minus_n      = FALSE;
868     PL_minus_p      = FALSE;
869     PL_minus_l      = FALSE;
870     PL_minus_a      = FALSE;
871     PL_minus_F      = FALSE;
872     PL_doswitches   = FALSE;
873     PL_dowarn       = G_WARN_OFF;
874     PL_sawampersand = FALSE;    /* must save all match strings */
875     PL_unsafe       = FALSE;
876
877     Safefree(PL_inplace);
878     PL_inplace = NULL;
879     SvREFCNT_dec(PL_patchlevel);
880     SvREFCNT_dec(PL_apiversion);
881
882     if (PL_e_script) {
883         SvREFCNT_dec(PL_e_script);
884         PL_e_script = NULL;
885     }
886
887     PL_perldb = 0;
888
889     /* magical thingies */
890
891     SvREFCNT_dec(PL_ofsgv);     /* *, */
892     PL_ofsgv = NULL;
893
894     SvREFCNT_dec(PL_ors_sv);    /* $\ */
895     PL_ors_sv = NULL;
896
897     SvREFCNT_dec(PL_rs);        /* $/ */
898     PL_rs = NULL;
899
900     Safefree(PL_osname);        /* $^O */
901     PL_osname = NULL;
902
903     SvREFCNT_dec(PL_statname);
904     PL_statname = NULL;
905     PL_statgv = NULL;
906
907     /* defgv, aka *_ should be taken care of elsewhere */
908
909     /* float buffer */
910     Safefree(PL_efloatbuf);
911     PL_efloatbuf = NULL;
912     PL_efloatsize = 0;
913
914     /* startup and shutdown function lists */
915     SvREFCNT_dec(PL_beginav);
916     SvREFCNT_dec(PL_beginav_save);
917     SvREFCNT_dec(PL_endav);
918     SvREFCNT_dec(PL_checkav);
919     SvREFCNT_dec(PL_checkav_save);
920     SvREFCNT_dec(PL_unitcheckav);
921     SvREFCNT_dec(PL_unitcheckav_save);
922     SvREFCNT_dec(PL_initav);
923     PL_beginav = NULL;
924     PL_beginav_save = NULL;
925     PL_endav = NULL;
926     PL_checkav = NULL;
927     PL_checkav_save = NULL;
928     PL_unitcheckav = NULL;
929     PL_unitcheckav_save = NULL;
930     PL_initav = NULL;
931
932     /* shortcuts just get cleared */
933     PL_envgv = NULL;
934     PL_incgv = NULL;
935     PL_hintgv = NULL;
936     PL_errgv = NULL;
937     PL_argvgv = NULL;
938     PL_argvoutgv = NULL;
939     PL_stdingv = NULL;
940     PL_stderrgv = NULL;
941     PL_last_in_gv = NULL;
942     PL_replgv = NULL;
943     PL_DBgv = NULL;
944     PL_DBline = NULL;
945     PL_DBsub = NULL;
946     PL_DBsingle = NULL;
947     PL_DBtrace = NULL;
948     PL_DBsignal = NULL;
949     PL_DBcv = NULL;
950     PL_dbargs = NULL;
951     PL_debstash = NULL;
952
953     SvREFCNT_dec(PL_argvout_stack);
954     PL_argvout_stack = NULL;
955
956     SvREFCNT_dec(PL_modglobal);
957     PL_modglobal = NULL;
958     SvREFCNT_dec(PL_preambleav);
959     PL_preambleav = NULL;
960     SvREFCNT_dec(PL_subname);
961     PL_subname = NULL;
962 #ifdef PERL_USES_PL_PIDSTATUS
963     SvREFCNT_dec(PL_pidstatus);
964     PL_pidstatus = NULL;
965 #endif
966     SvREFCNT_dec(PL_toptarget);
967     PL_toptarget = NULL;
968     SvREFCNT_dec(PL_bodytarget);
969     PL_bodytarget = NULL;
970     PL_formtarget = NULL;
971
972     /* free locale stuff */
973 #ifdef USE_LOCALE_COLLATE
974     Safefree(PL_collation_name);
975     PL_collation_name = NULL;
976 #endif
977
978 #ifdef USE_LOCALE_NUMERIC
979     Safefree(PL_numeric_name);
980     PL_numeric_name = NULL;
981     SvREFCNT_dec(PL_numeric_radix_sv);
982     PL_numeric_radix_sv = NULL;
983 #endif
984
985     /* clear utf8 character classes */
986     SvREFCNT_dec(PL_utf8_alnum);
987     SvREFCNT_dec(PL_utf8_alpha);
988     SvREFCNT_dec(PL_utf8_space);
989     SvREFCNT_dec(PL_utf8_graph);
990     SvREFCNT_dec(PL_utf8_digit);
991     SvREFCNT_dec(PL_utf8_upper);
992     SvREFCNT_dec(PL_utf8_lower);
993     SvREFCNT_dec(PL_utf8_print);
994     SvREFCNT_dec(PL_utf8_punct);
995     SvREFCNT_dec(PL_utf8_xdigit);
996     SvREFCNT_dec(PL_utf8_mark);
997     SvREFCNT_dec(PL_utf8_toupper);
998     SvREFCNT_dec(PL_utf8_totitle);
999     SvREFCNT_dec(PL_utf8_tolower);
1000     SvREFCNT_dec(PL_utf8_tofold);
1001     SvREFCNT_dec(PL_utf8_idstart);
1002     SvREFCNT_dec(PL_utf8_idcont);
1003     SvREFCNT_dec(PL_utf8_foldclosures);
1004     PL_utf8_alnum       = NULL;
1005     PL_utf8_alpha       = NULL;
1006     PL_utf8_space       = NULL;
1007     PL_utf8_graph       = NULL;
1008     PL_utf8_digit       = NULL;
1009     PL_utf8_upper       = NULL;
1010     PL_utf8_lower       = NULL;
1011     PL_utf8_print       = NULL;
1012     PL_utf8_punct       = NULL;
1013     PL_utf8_xdigit      = NULL;
1014     PL_utf8_mark        = NULL;
1015     PL_utf8_toupper     = NULL;
1016     PL_utf8_totitle     = NULL;
1017     PL_utf8_tolower     = NULL;
1018     PL_utf8_tofold      = NULL;
1019     PL_utf8_idstart     = NULL;
1020     PL_utf8_idcont      = NULL;
1021     PL_utf8_foldclosures = NULL;
1022
1023     if (!specialWARN(PL_compiling.cop_warnings))
1024         PerlMemShared_free(PL_compiling.cop_warnings);
1025     PL_compiling.cop_warnings = NULL;
1026     cophh_free(CopHINTHASH_get(&PL_compiling));
1027     CopHINTHASH_set(&PL_compiling, cophh_new_empty());
1028     CopFILE_free(&PL_compiling);
1029     CopSTASH_free(&PL_compiling);
1030
1031     /* Prepare to destruct main symbol table.  */
1032
1033     hv = PL_defstash;
1034     /* break ref loop  *:: <=> %:: */
1035     (void)hv_delete(hv, "main::", 6, G_DISCARD);
1036     PL_defstash = 0;
1037     SvREFCNT_dec(hv);
1038     SvREFCNT_dec(PL_curstname);
1039     PL_curstname = NULL;
1040
1041     /* clear queued errors */
1042     SvREFCNT_dec(PL_errors);
1043     PL_errors = NULL;
1044
1045     SvREFCNT_dec(PL_isarev);
1046
1047     FREETMPS;
1048     if (destruct_level >= 2) {
1049         if (PL_scopestack_ix != 0)
1050             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1051                              "Unbalanced scopes: %ld more ENTERs than LEAVEs\n",
1052                              (long)PL_scopestack_ix);
1053         if (PL_savestack_ix != 0)
1054             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),
1055                              "Unbalanced saves: %ld more saves than restores\n",
1056                              (long)PL_savestack_ix);
1057         if (PL_tmps_floor != -1)
1058             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n",
1059                              (long)PL_tmps_floor + 1);
1060         if (cxstack_ix != -1)
1061             Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n",
1062                              (long)cxstack_ix + 1);
1063     }
1064
1065 #ifdef PERL_IMPLICIT_CONTEXT
1066     /* the entries in this list are allocated via SV PVX's, so get freed
1067      * in sv_clean_all */
1068     Safefree(PL_my_cxt_list);
1069 #endif
1070
1071     /* Now absolutely destruct everything, somehow or other, loops or no. */
1072
1073     /* the 2 is for PL_fdpid and PL_strtab */
1074     while (sv_clean_all() > 2)
1075         ;
1076
1077     AvREAL_off(PL_fdpid);               /* no surviving entries */
1078     SvREFCNT_dec(PL_fdpid);             /* needed in io_close() */
1079     PL_fdpid = NULL;
1080
1081 #ifdef HAVE_INTERP_INTERN
1082     sys_intern_clear();
1083 #endif
1084
1085     /* Destruct the global string table. */
1086     {
1087         /* Yell and reset the HeVAL() slots that are still holding refcounts,
1088          * so that sv_free() won't fail on them.
1089          * Now that the global string table is using a single hunk of memory
1090          * for both HE and HEK, we either need to explicitly unshare it the
1091          * correct way, or actually free things here.
1092          */
1093         I32 riter = 0;
1094         const I32 max = HvMAX(PL_strtab);
1095         HE * const * const array = HvARRAY(PL_strtab);
1096         HE *hent = array[0];
1097
1098         for (;;) {
1099             if (hent && ckWARN_d(WARN_INTERNAL)) {
1100                 HE * const next = HeNEXT(hent);
1101                 Perl_warner(aTHX_ packWARN(WARN_INTERNAL),
1102                      "Unbalanced string table refcount: (%ld) for \"%s\"",
1103                      (long)hent->he_valu.hent_refcount, HeKEY(hent));
1104                 Safefree(hent);
1105                 hent = next;
1106             }
1107             if (!hent) {
1108                 if (++riter > max)
1109                     break;
1110                 hent = array[riter];
1111             }
1112         }
1113
1114         Safefree(array);
1115         HvARRAY(PL_strtab) = 0;
1116         HvTOTALKEYS(PL_strtab) = 0;
1117     }
1118     SvREFCNT_dec(PL_strtab);
1119
1120 #ifdef USE_ITHREADS
1121     /* free the pointer tables used for cloning */
1122     ptr_table_free(PL_ptr_table);
1123     PL_ptr_table = (PTR_TBL_t*)NULL;
1124 #endif
1125
1126     /* free special SVs */
1127
1128     SvREFCNT(&PL_sv_yes) = 0;
1129     sv_clear(&PL_sv_yes);
1130     SvANY(&PL_sv_yes) = NULL;
1131     SvFLAGS(&PL_sv_yes) = 0;
1132
1133     SvREFCNT(&PL_sv_no) = 0;
1134     sv_clear(&PL_sv_no);
1135     SvANY(&PL_sv_no) = NULL;
1136     SvFLAGS(&PL_sv_no) = 0;
1137
1138     {
1139         int i;
1140         for (i=0; i<=2; i++) {
1141             SvREFCNT(PERL_DEBUG_PAD(i)) = 0;
1142             sv_clear(PERL_DEBUG_PAD(i));
1143             SvANY(PERL_DEBUG_PAD(i)) = NULL;
1144             SvFLAGS(PERL_DEBUG_PAD(i)) = 0;
1145         }
1146     }
1147
1148     if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL))
1149         Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count);
1150
1151 #ifdef DEBUG_LEAKING_SCALARS
1152     if (PL_sv_count != 0) {
1153         SV* sva;
1154         SV* sv;
1155         register SV* svend;
1156
1157         for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) {
1158             svend = &sva[SvREFCNT(sva)];
1159             for (sv = sva + 1; sv < svend; ++sv) {
1160                 if (SvTYPE(sv) != (svtype)SVTYPEMASK) {
1161                     PerlIO_printf(Perl_debug_log, "leaked: sv=0x%p"
1162                         " flags=0x%"UVxf
1163                         " refcnt=%"UVuf pTHX__FORMAT "\n"
1164                         "\tallocated at %s:%d %s %s (parent 0x%"UVxf");"
1165                         "serial %"UVuf"\n",
1166                         (void*)sv, (UV)sv->sv_flags, (UV)sv->sv_refcnt
1167                         pTHX__VALUE,
1168                         sv->sv_debug_file ? sv->sv_debug_file : "(unknown)",
1169                         sv->sv_debug_line,
1170                         sv->sv_debug_inpad ? "for" : "by",
1171                         sv->sv_debug_optype ?
1172                             PL_op_name[sv->sv_debug_optype]: "(none)",
1173                         PTR2UV(sv->sv_debug_parent),
1174                         sv->sv_debug_serial
1175                     );
1176 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
1177                     Perl_dump_sv_child(aTHX_ sv);
1178 #endif
1179                 }
1180             }
1181         }
1182     }
1183 #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP
1184     {
1185         int status;
1186         fd_set rset;
1187         /* Wait for up to 4 seconds for child to terminate.
1188            This seems to be the least effort way of timing out on reaping
1189            its exit status.  */
1190         struct timeval waitfor = {4, 0};
1191         int sock = PL_dumper_fd;
1192
1193         shutdown(sock, 1);
1194         FD_ZERO(&rset);
1195         FD_SET(sock, &rset);
1196         select(sock + 1, &rset, NULL, NULL, &waitfor);
1197         waitpid(child, &status, WNOHANG);
1198         close(sock);
1199     }
1200 #endif
1201 #endif
1202 #ifdef DEBUG_LEAKING_SCALARS_ABORT
1203     if (PL_sv_count)
1204         abort();
1205 #endif
1206     PL_sv_count = 0;
1207
1208 #ifdef PERL_DEBUG_READONLY_OPS
1209     free(PL_slabs);
1210     PL_slabs = NULL;
1211     PL_slab_count = 0;
1212 #endif
1213
1214 #if defined(PERLIO_LAYERS)
1215     /* No more IO - including error messages ! */
1216     PerlIO_cleanup(aTHX);
1217 #endif
1218
1219     /* sv_undef needs to stay immortal until after PerlIO_cleanup
1220        as currently layers use it rather than NULL as a marker
1221        for no arg - and will try and SvREFCNT_dec it.
1222      */
1223     SvREFCNT(&PL_sv_undef) = 0;
1224     SvREADONLY_off(&PL_sv_undef);
1225
1226     Safefree(PL_origfilename);
1227     PL_origfilename = NULL;
1228     Safefree(PL_reg_start_tmp);
1229     PL_reg_start_tmp = (char**)NULL;
1230     PL_reg_start_tmpl = 0;
1231     Safefree(PL_reg_curpm);
1232     Safefree(PL_reg_poscache);
1233     free_tied_hv_pool();
1234     Safefree(PL_op_mask);
1235     Safefree(PL_psig_name);
1236     PL_psig_name = (SV**)NULL;
1237     PL_psig_ptr = (SV**)NULL;
1238     {
1239         /* We need to NULL PL_psig_pend first, so that
1240            signal handlers know not to use it */
1241         int *psig_save = PL_psig_pend;
1242         PL_psig_pend = (int*)NULL;
1243         Safefree(psig_save);
1244     }
1245     PL_formfeed = NULL;
1246     nuke_stacks();
1247     PL_tainting = FALSE;
1248     PL_taint_warn = FALSE;
1249     PL_hints = 0;               /* Reset hints. Should hints be per-interpreter ? */
1250     PL_debug = 0;
1251
1252     DEBUG_P(debprofdump());
1253
1254 #ifdef USE_REENTRANT_API
1255     Perl_reentrant_free(aTHX);
1256 #endif
1257
1258     sv_free_arenas();
1259
1260     while (PL_regmatch_slab) {
1261         regmatch_slab  *s = PL_regmatch_slab;
1262         PL_regmatch_slab = PL_regmatch_slab->next;
1263         Safefree(s);
1264     }
1265
1266     /* As the absolutely last thing, free the non-arena SV for mess() */
1267
1268     if (PL_mess_sv) {
1269         /* we know that type == SVt_PVMG */
1270
1271         /* it could have accumulated taint magic */
1272         MAGIC* mg;
1273         MAGIC* moremagic;
1274         for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) {
1275             moremagic = mg->mg_moremagic;
1276             if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global
1277                 && mg->mg_len >= 0)
1278                 Safefree(mg->mg_ptr);
1279             Safefree(mg);
1280         }
1281
1282         /* we know that type >= SVt_PV */
1283         SvPV_free(PL_mess_sv);
1284         Safefree(SvANY(PL_mess_sv));
1285         Safefree(PL_mess_sv);
1286         PL_mess_sv = NULL;
1287     }
1288     return STATUS_EXIT;
1289 }
1290
1291 /*
1292 =for apidoc perl_free
1293
1294 Releases a Perl interpreter.  See L<perlembed>.
1295
1296 =cut
1297 */
1298
1299 void
1300 perl_free(pTHXx)
1301 {
1302     dVAR;
1303
1304     PERL_ARGS_ASSERT_PERL_FREE;
1305
1306     if (PL_veto_cleanup)
1307         return;
1308
1309 #ifdef PERL_TRACK_MEMPOOL
1310     {
1311         /*
1312          * Don't free thread memory if PERL_DESTRUCT_LEVEL is set to a non-zero
1313          * value as we're probably hunting memory leaks then
1314          */
1315         const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL");
1316         if (!s || atoi(s) == 0) {
1317             const U32 old_debug = PL_debug;
1318             /* Emulate the PerlHost behaviour of free()ing all memory allocated in this
1319                thread at thread exit.  */
1320             if (DEBUG_m_TEST) {
1321                 PerlIO_puts(Perl_debug_log, "Disabling memory debugging as we "
1322                             "free this thread's memory\n");
1323                 PL_debug &= ~ DEBUG_m_FLAG;
1324             }
1325             while(aTHXx->Imemory_debug_header.next != &(aTHXx->Imemory_debug_header))
1326                 safesysfree(sTHX + (char *)(aTHXx->Imemory_debug_header.next));
1327             PL_debug = old_debug;
1328         }
1329     }
1330 #endif
1331
1332 #if defined(WIN32) || defined(NETWARE)
1333 #  if defined(PERL_IMPLICIT_SYS)
1334     {
1335 #    ifdef NETWARE
1336         void *host = nw_internal_host;
1337 #    else
1338         void *host = w32_internal_host;
1339 #    endif
1340         PerlMem_free(aTHXx);
1341 #    ifdef NETWARE
1342         nw_delete_internal_host(host);
1343 #    else
1344         win32_delete_internal_host(host);
1345 #    endif
1346     }
1347 #  else
1348     PerlMem_free(aTHXx);
1349 #  endif
1350 #else
1351     PerlMem_free(aTHXx);
1352 #endif
1353 }
1354
1355 #if defined(USE_ITHREADS)
1356 /* provide destructors to clean up the thread key when libperl is unloaded */
1357 #ifndef WIN32 /* handled during DLL_PROCESS_DETACH in win32/perllib.c */
1358
1359 #if defined(__hpux) && !(defined(__ux_version) && __ux_version <= 1020) && !defined(__GNUC__)
1360 #pragma fini "perl_fini"
1361 #elif defined(__sun) && !defined(__GNUC__)
1362 #pragma fini (perl_fini)
1363 #endif
1364
1365 static void
1366 #if defined(__GNUC__)
1367 __attribute__((destructor))
1368 #endif
1369 perl_fini(void)
1370 {
1371     dVAR;
1372     if (PL_curinterp  && !PL_veto_cleanup)
1373         FREE_THREAD_KEY;
1374 }
1375
1376 #endif /* WIN32 */
1377 #endif /* THREADS */
1378
1379 void
1380 Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr)
1381 {
1382     dVAR;
1383     Renew(PL_exitlist, PL_exitlistlen+1, PerlExitListEntry);
1384     PL_exitlist[PL_exitlistlen].fn = fn;
1385     PL_exitlist[PL_exitlistlen].ptr = ptr;
1386     ++PL_exitlistlen;
1387 }
1388
1389 STATIC void
1390 S_set_caret_X(pTHX) {
1391     dVAR;
1392     GV* tmpgv = gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL, SVt_PV); /* $^X */
1393     if (tmpgv) {
1394         SV *const caret_x = GvSV(tmpgv);
1395 #if defined(OS2)
1396         sv_setpv(caret_x, os2_execname(aTHX));
1397 #else
1398 #  ifdef USE_KERN_PROC_PATHNAME
1399         size_t size = 0;
1400         int mib[4];
1401         mib[0] = CTL_KERN;
1402         mib[1] = KERN_PROC;
1403         mib[2] = KERN_PROC_PATHNAME;
1404         mib[3] = -1;
1405
1406         if (sysctl(mib, 4, NULL, &size, NULL, 0) == 0
1407             && size > 0 && size < MAXPATHLEN * MAXPATHLEN) {
1408             sv_grow(caret_x, size);
1409
1410             if (sysctl(mib, 4, SvPVX(caret_x), &size, NULL, 0) == 0
1411                 && size > 2) {
1412                 SvPOK_only(caret_x);
1413                 SvCUR_set(caret_x, size - 1);
1414                 SvTAINT(caret_x);
1415                 return;
1416             }
1417         }
1418 #  elif defined(USE_NSGETEXECUTABLEPATH)
1419         char buf[1];
1420         uint32_t size = sizeof(buf);
1421
1422         _NSGetExecutablePath(buf, &size);
1423         if (size < MAXPATHLEN * MAXPATHLEN) {
1424             sv_grow(caret_x, size);
1425             if (_NSGetExecutablePath(SvPVX(caret_x), &size) == 0) {
1426                 char *const tidied = realpath(SvPVX(caret_x), NULL);
1427                 if (tidied) {
1428                     sv_setpv(caret_x, tidied);
1429                     free(tidied);
1430                 } else {
1431                     SvPOK_only(caret_x);
1432                     SvCUR_set(caret_x, size);
1433                 }
1434                 return;
1435             }
1436         }
1437 #  elif defined(HAS_PROCSELFEXE)
1438         char buf[MAXPATHLEN];
1439         int len = readlink(PROCSELFEXE_PATH, buf, sizeof(buf) - 1);
1440
1441         /* On Playstation2 Linux V1.0 (kernel 2.2.1) readlink(/proc/self/exe)
1442            includes a spurious NUL which will cause $^X to fail in system
1443            or backticks (this will prevent extensions from being built and
1444            many tests from working). readlink is not meant to add a NUL.
1445            Normal readlink works fine.
1446         */
1447         if (len > 0 && buf[len-1] == '\0') {
1448             len--;
1449         }
1450
1451         /* FreeBSD's implementation is acknowledged to be imperfect, sometimes
1452            returning the text "unknown" from the readlink rather than the path
1453            to the executable (or returning an error from the readlink). Any
1454            valid path has a '/' in it somewhere, so use that to validate the
1455            result. See http://www.freebsd.org/cgi/query-pr.cgi?pr=35703
1456         */
1457         if (len > 0 && memchr(buf, '/', len)) {
1458             sv_setpvn(caret_x, buf, len);
1459             return;
1460         }
1461 #  endif
1462         /* Fallback to this:  */
1463         sv_setpv(caret_x, PL_origargv[0]);
1464 #endif
1465     }
1466 }
1467
1468 /*
1469 =for apidoc perl_parse
1470
1471 Tells a Perl interpreter to parse a Perl script.  See L<perlembed>.
1472
1473 =cut
1474 */
1475
1476 #define SET_CURSTASH(newstash)                       \
1477         if (PL_curstash != newstash) {                \
1478             SvREFCNT_dec(PL_curstash);                 \
1479             PL_curstash = (HV *)SvREFCNT_inc(newstash); \
1480         }
1481
1482 int
1483 perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env)
1484 {
1485     dVAR;
1486     I32 oldscope;
1487     int ret;
1488     dJMPENV;
1489
1490     PERL_ARGS_ASSERT_PERL_PARSE;
1491 #ifndef MULTIPLICITY
1492     PERL_UNUSED_ARG(my_perl);
1493 #endif
1494
1495 #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT)
1496     /* [perl #22371] Algorimic Complexity Attack on Perl 5.6.1, 5.8.0
1497      * This MUST be done before any hash stores or fetches take place.
1498      * If you set PL_rehash_seed (and presumably also PL_rehash_seed_set)
1499      * yourself, it is your responsibility to provide a good random seed!
1500      * You can also define PERL_HASH_SEED in compile time, see hv.h. */
1501     if (!PL_rehash_seed_set)
1502          PL_rehash_seed = get_hash_seed();
1503     {
1504         const char * const s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG");
1505
1506         if (s && (atoi(s) == 1))
1507             PerlIO_printf(Perl_debug_log, "HASH_SEED = %"UVuf"\n", PL_rehash_seed);
1508     }
1509 #endif /* #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT) */
1510
1511     PL_origargc = argc;
1512     PL_origargv = argv;
1513
1514     if (PL_origalen != 0) {
1515         PL_origalen = 1; /* don't use old PL_origalen if perl_parse() is called again */
1516     }
1517     else {
1518         /* Set PL_origalen be the sum of the contiguous argv[]
1519          * elements plus the size of the env in case that it is
1520          * contiguous with the argv[].  This is used in mg.c:Perl_magic_set()
1521          * as the maximum modifiable length of $0.  In the worst case
1522          * the area we are able to modify is limited to the size of
1523          * the original argv[0].  (See below for 'contiguous', though.)
1524          * --jhi */
1525          const char *s = NULL;
1526          int i;
1527          const UV mask =
1528            ~(UV)(PTRSIZE == 4 ? 3 : PTRSIZE == 8 ? 7 : PTRSIZE == 16 ? 15 : 0);
1529          /* Do the mask check only if the args seem like aligned. */
1530          const UV aligned =
1531            (mask < ~(UV)0) && ((PTR2UV(argv[0]) & mask) == PTR2UV(argv[0]));
1532
1533          /* See if all the arguments are contiguous in memory.  Note
1534           * that 'contiguous' is a loose term because some platforms
1535           * align the argv[] and the envp[].  If the arguments look
1536           * like non-aligned, assume that they are 'strictly' or
1537           * 'traditionally' contiguous.  If the arguments look like
1538           * aligned, we just check that they are within aligned
1539           * PTRSIZE bytes.  As long as no system has something bizarre
1540           * like the argv[] interleaved with some other data, we are
1541           * fine.  (Did I just evoke Murphy's Law?)  --jhi */
1542          if (PL_origargv && PL_origargc >= 1 && (s = PL_origargv[0])) {
1543               while (*s) s++;
1544               for (i = 1; i < PL_origargc; i++) {
1545                    if ((PL_origargv[i] == s + 1
1546 #ifdef OS2
1547                         || PL_origargv[i] == s + 2
1548 #endif 
1549                             )
1550                        ||
1551                        (aligned &&
1552                         (PL_origargv[i] >  s &&
1553                          PL_origargv[i] <=
1554                          INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1555                         )
1556                    {
1557                         s = PL_origargv[i];
1558                         while (*s) s++;
1559                    }
1560                    else
1561                         break;
1562               }
1563          }
1564
1565 #ifndef PERL_USE_SAFE_PUTENV
1566          /* Can we grab env area too to be used as the area for $0? */
1567          if (s && PL_origenviron && !PL_use_safe_putenv) {
1568               if ((PL_origenviron[0] == s + 1)
1569                   ||
1570                   (aligned &&
1571                    (PL_origenviron[0] >  s &&
1572                     PL_origenviron[0] <=
1573                     INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1574                  )
1575               {
1576 #ifndef OS2             /* ENVIRON is read by the kernel too. */
1577                    s = PL_origenviron[0];
1578                    while (*s) s++;
1579 #endif
1580                    my_setenv("NoNe  SuCh", NULL);
1581                    /* Force copy of environment. */
1582                    for (i = 1; PL_origenviron[i]; i++) {
1583                         if (PL_origenviron[i] == s + 1
1584                             ||
1585                             (aligned &&
1586                              (PL_origenviron[i] >  s &&
1587                               PL_origenviron[i] <=
1588                               INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask)))
1589                            )
1590                         {
1591                              s = PL_origenviron[i];
1592                              while (*s) s++;
1593                         }
1594                         else
1595                              break;
1596                    }
1597               }
1598          }
1599 #endif /* !defined(PERL_USE_SAFE_PUTENV) */
1600
1601          PL_origalen = s ? s - PL_origargv[0] + 1 : 0;
1602     }
1603
1604     if (PL_do_undump) {
1605
1606         /* Come here if running an undumped a.out. */
1607
1608         PL_origfilename = savepv(argv[0]);
1609         PL_do_undump = FALSE;
1610         cxstack_ix = -1;                /* start label stack again */
1611         init_ids();
1612         assert (!PL_tainted);
1613         TAINT;
1614         S_set_caret_X(aTHX);
1615         TAINT_NOT;
1616         init_postdump_symbols(argc,argv,env);
1617         return 0;
1618     }
1619
1620     if (PL_main_root) {
1621         op_free(PL_main_root);
1622         PL_main_root = NULL;
1623     }
1624     PL_main_start = NULL;
1625     SvREFCNT_dec(PL_main_cv);
1626     PL_main_cv = NULL;
1627
1628     time(&PL_basetime);
1629     oldscope = PL_scopestack_ix;
1630     PL_dowarn = G_WARN_OFF;
1631
1632     JMPENV_PUSH(ret);
1633     switch (ret) {
1634     case 0:
1635         parse_body(env,xsinit);
1636         if (PL_unitcheckav) {
1637             call_list(oldscope, PL_unitcheckav);
1638         }
1639         if (PL_checkav) {
1640             PERL_SET_PHASE(PERL_PHASE_CHECK);
1641             call_list(oldscope, PL_checkav);
1642         }
1643         ret = 0;
1644         break;
1645     case 1:
1646         STATUS_ALL_FAILURE;
1647         /* FALL THROUGH */
1648     case 2:
1649         /* my_exit() was called */
1650         while (PL_scopestack_ix > oldscope)
1651             LEAVE;
1652         FREETMPS;
1653         SET_CURSTASH(PL_defstash);
1654         if (PL_unitcheckav) {
1655             call_list(oldscope, PL_unitcheckav);
1656         }
1657         if (PL_checkav) {
1658             PERL_SET_PHASE(PERL_PHASE_CHECK);
1659             call_list(oldscope, PL_checkav);
1660         }
1661         ret = STATUS_EXIT;
1662         break;
1663     case 3:
1664         PerlIO_printf(Perl_error_log, "panic: top_env\n");
1665         ret = 1;
1666         break;
1667     }
1668     JMPENV_POP;
1669     return ret;
1670 }
1671
1672 /* This needs to stay in perl.c, as perl.c is compiled with different flags for
1673    miniperl, and we need to see those flags reflected in the values here.  */
1674
1675 /* What this returns is subject to change.  Use the public interface in Config.
1676  */
1677 static void
1678 S_Internals_V(pTHX_ CV *cv)
1679 {
1680     dXSARGS;
1681 #ifdef LOCAL_PATCH_COUNT
1682     const int local_patch_count = LOCAL_PATCH_COUNT;
1683 #else
1684     const int local_patch_count = 0;
1685 #endif
1686     const int entries = 3 + local_patch_count;
1687     int i;
1688     static char non_bincompat_options[] = 
1689 #  ifdef DEBUGGING
1690                              " DEBUGGING"
1691 #  endif
1692 #  ifdef NO_MATHOMS
1693                              " NO_MATHOMS"
1694 #  endif
1695 #  ifdef PERL_DISABLE_PMC
1696                              " PERL_DISABLE_PMC"
1697 #  endif
1698 #  ifdef PERL_DONT_CREATE_GVSV
1699                              " PERL_DONT_CREATE_GVSV"
1700 #  endif
1701 #  ifdef PERL_EXTERNAL_GLOB
1702                              " PERL_EXTERNAL_GLOB"
1703 #  endif
1704 #  ifdef PERL_IS_MINIPERL
1705                              " PERL_IS_MINIPERL"
1706 #  endif
1707 #  ifdef PERL_MALLOC_WRAP
1708                              " PERL_MALLOC_WRAP"
1709 #  endif
1710 #  ifdef PERL_MEM_LOG
1711                              " PERL_MEM_LOG"
1712 #  endif
1713 #  ifdef PERL_MEM_LOG_NOIMPL
1714                              " PERL_MEM_LOG_NOIMPL"
1715 #  endif
1716 #  ifdef PERL_PRESERVE_IVUV
1717                              " PERL_PRESERVE_IVUV"
1718 #  endif
1719 #  ifdef PERL_RELOCATABLE_INCPUSH
1720                              " PERL_RELOCATABLE_INCPUSH"
1721 #  endif
1722 #  ifdef PERL_USE_DEVEL
1723                              " PERL_USE_DEVEL"
1724 #  endif
1725 #  ifdef PERL_USE_SAFE_PUTENV
1726                              " PERL_USE_SAFE_PUTENV"
1727 #  endif
1728 #  ifdef UNLINK_ALL_VERSIONS
1729                              " UNLINK_ALL_VERSIONS"
1730 #  endif
1731 #  ifdef USE_ATTRIBUTES_FOR_PERLIO
1732                              " USE_ATTRIBUTES_FOR_PERLIO"
1733 #  endif
1734 #  ifdef USE_FAST_STDIO
1735                              " USE_FAST_STDIO"
1736 #  endif               
1737 #  ifdef USE_LOCALE
1738                              " USE_LOCALE"
1739 #  endif
1740 #  ifdef USE_LOCALE_CTYPE
1741                              " USE_LOCALE_CTYPE"
1742 #  endif
1743 #  ifdef USE_PERL_ATOF
1744                              " USE_PERL_ATOF"
1745 #  endif               
1746 #  ifdef USE_SITECUSTOMIZE
1747                              " USE_SITECUSTOMIZE"
1748 #  endif               
1749         ;
1750     PERL_UNUSED_ARG(cv);
1751     PERL_UNUSED_ARG(items);
1752
1753     EXTEND(SP, entries);
1754
1755     PUSHs(sv_2mortal(newSVpv(PL_bincompat_options, 0)));
1756     PUSHs(Perl_newSVpvn_flags(aTHX_ non_bincompat_options,
1757                               sizeof(non_bincompat_options) - 1, SVs_TEMP));
1758
1759 #ifdef __DATE__
1760 #  ifdef __TIME__
1761     PUSHs(Perl_newSVpvn_flags(aTHX_
1762                               STR_WITH_LEN("Compiled at " __DATE__ " " __TIME__),
1763                               SVs_TEMP));
1764 #  else
1765     PUSHs(Perl_newSVpvn_flags(aTHX_ STR_WITH_LEN("Compiled on " __DATE__),
1766                               SVs_TEMP));
1767 #  endif
1768 #else
1769     PUSHs(&PL_sv_undef);
1770 #endif
1771
1772     for (i = 1; i <= local_patch_count; i++) {
1773         /* This will be an undef, if PL_localpatches[i] is NULL.  */
1774         PUSHs(sv_2mortal(newSVpv(PL_localpatches[i], 0)));
1775     }
1776
1777     XSRETURN(entries);
1778 }
1779
1780 #define INCPUSH_UNSHIFT                 0x01
1781 #define INCPUSH_ADD_OLD_VERS            0x02
1782 #define INCPUSH_ADD_VERSIONED_SUB_DIRS  0x04
1783 #define INCPUSH_ADD_ARCHONLY_SUB_DIRS   0x08
1784 #define INCPUSH_NOT_BASEDIR             0x10
1785 #define INCPUSH_CAN_RELOCATE            0x20
1786 #define INCPUSH_ADD_SUB_DIRS    \
1787     (INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_ADD_ARCHONLY_SUB_DIRS)
1788
1789 STATIC void *
1790 S_parse_body(pTHX_ char **env, XSINIT_t xsinit)
1791 {
1792     dVAR;
1793     PerlIO *rsfp;
1794     int argc = PL_origargc;
1795     char **argv = PL_origargv;
1796     const char *scriptname = NULL;
1797     VOL bool dosearch = FALSE;
1798     register char c;
1799     bool doextract = FALSE;
1800     const char *cddir = NULL;
1801 #ifdef USE_SITECUSTOMIZE
1802     bool minus_f = FALSE;
1803 #endif
1804     SV *linestr_sv = newSV_type(SVt_PVIV);
1805     bool add_read_e_script = FALSE;
1806
1807     PERL_SET_PHASE(PERL_PHASE_START);
1808
1809     SvGROW(linestr_sv, 80);
1810     sv_setpvs(linestr_sv,"");
1811
1812     init_main_stash();
1813
1814     {
1815         const char *s;
1816     for (argc--,argv++; argc > 0; argc--,argv++) {
1817         if (argv[0][0] != '-' || !argv[0][1])
1818             break;
1819         s = argv[0]+1;
1820       reswitch:
1821         switch ((c = *s)) {
1822         case 'C':
1823 #ifndef PERL_STRICT_CR
1824         case '\r':
1825 #endif
1826         case ' ':
1827         case '0':
1828         case 'F':
1829         case 'a':
1830         case 'c':
1831         case 'd':
1832         case 'D':
1833         case 'h':
1834         case 'i':
1835         case 'l':
1836         case 'M':
1837         case 'm':
1838         case 'n':
1839         case 'p':
1840         case 's':
1841         case 'u':
1842         case 'U':
1843         case 'v':
1844         case 'W':
1845         case 'X':
1846         case 'w':
1847             if ((s = moreswitches(s)))
1848                 goto reswitch;
1849             break;
1850
1851         case 't':
1852             CHECK_MALLOC_TOO_LATE_FOR('t');
1853             if( !PL_tainting ) {
1854                  PL_taint_warn = TRUE;
1855                  PL_tainting = TRUE;
1856             }
1857             s++;
1858             goto reswitch;
1859         case 'T':
1860             CHECK_MALLOC_TOO_LATE_FOR('T');
1861             PL_tainting = TRUE;
1862             PL_taint_warn = FALSE;
1863             s++;
1864             goto reswitch;
1865
1866         case 'E':
1867             PL_minus_E = TRUE;
1868             /* FALL THROUGH */
1869         case 'e':
1870             forbid_setid('e', FALSE);
1871             if (!PL_e_script) {
1872                 PL_e_script = newSVpvs("");
1873                 add_read_e_script = TRUE;
1874             }
1875             if (*++s)
1876                 sv_catpv(PL_e_script, s);
1877             else if (argv[1]) {
1878                 sv_catpv(PL_e_script, argv[1]);
1879                 argc--,argv++;
1880             }
1881             else
1882                 Perl_croak(aTHX_ "No code specified for -%c", c);
1883             sv_catpvs(PL_e_script, "\n");
1884             break;
1885
1886         case 'f':
1887 #ifdef USE_SITECUSTOMIZE
1888             minus_f = TRUE;
1889 #endif
1890             s++;
1891             goto reswitch;
1892
1893         case 'I':       /* -I handled both here and in moreswitches() */
1894             forbid_setid('I', FALSE);
1895             if (!*++s && (s=argv[1]) != NULL) {
1896                 argc--,argv++;
1897             }
1898             if (s && *s) {
1899                 STRLEN len = strlen(s);
1900                 incpush(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS);
1901             }
1902             else
1903                 Perl_croak(aTHX_ "No directory specified for -I");
1904             break;
1905         case 'S':
1906             forbid_setid('S', FALSE);
1907             dosearch = TRUE;
1908             s++;
1909             goto reswitch;
1910         case 'V':
1911             {
1912                 SV *opts_prog;
1913
1914                 if (*++s != ':')  {
1915                     opts_prog = newSVpvs("use Config; Config::_V()");
1916                 }
1917                 else {
1918                     ++s;
1919                     opts_prog = Perl_newSVpvf(aTHX_
1920                                               "use Config; Config::config_vars(qw%c%s%c)",
1921                                               0, s, 0);
1922                     s += strlen(s);
1923                 }
1924                 Perl_av_create_and_push(aTHX_ &PL_preambleav, opts_prog);
1925                 /* don't look for script or read stdin */
1926                 scriptname = BIT_BUCKET;
1927                 goto reswitch;
1928             }
1929         case 'x':
1930             doextract = TRUE;
1931             s++;
1932             if (*s)
1933                 cddir = s;
1934             break;
1935         case 0:
1936             break;
1937         case '-':
1938             if (!*++s || isSPACE(*s)) {
1939                 argc--,argv++;
1940                 goto switch_end;
1941             }
1942             /* catch use of gnu style long options.
1943                Both of these exit immediately.  */
1944             if (strEQ(s, "version"))
1945                 minus_v();
1946             if (strEQ(s, "help"))
1947                 usage();
1948             s--;
1949             /* FALL THROUGH */
1950         default:
1951             Perl_croak(aTHX_ "Unrecognized switch: -%s  (-h will show valid options)",s);
1952         }
1953     }
1954     }
1955
1956   switch_end:
1957
1958     {
1959         char *s;
1960
1961     if (
1962 #ifndef SECURE_INTERNAL_GETENV
1963         !PL_tainting &&
1964 #endif
1965         (s = PerlEnv_getenv("PERL5OPT")))
1966     {
1967         while (isSPACE(*s))
1968             s++;
1969         if (*s == '-' && *(s+1) == 'T') {
1970             CHECK_MALLOC_TOO_LATE_FOR('T');
1971             PL_tainting = TRUE;
1972             PL_taint_warn = FALSE;
1973         }
1974         else {
1975             char *popt_copy = NULL;
1976             while (s && *s) {
1977                 const char *d;
1978                 while (isSPACE(*s))
1979                     s++;
1980                 if (*s == '-') {
1981                     s++;
1982                     if (isSPACE(*s))
1983                         continue;
1984                 }
1985                 d = s;
1986                 if (!*s)
1987                     break;
1988                 if (!strchr("CDIMUdmtwW", *s))
1989                     Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s);
1990                 while (++s && *s) {
1991                     if (isSPACE(*s)) {
1992                         if (!popt_copy) {
1993                             popt_copy = SvPVX(sv_2mortal(newSVpv(d,0)));
1994                             s = popt_copy + (s - d);
1995                             d = popt_copy;
1996                         }
1997                         *s++ = '\0';
1998                         break;
1999                     }
2000                 }
2001                 if (*d == 't') {
2002                     if( !PL_tainting ) {
2003                         PL_taint_warn = TRUE;
2004                         PL_tainting = TRUE;
2005                     }
2006                 } else {
2007                     moreswitches(d);
2008                 }
2009             }
2010         }
2011     }
2012     }
2013
2014     /* Set $^X early so that it can be used for relocatable paths in @INC  */
2015     /* and for SITELIB_EXP in USE_SITECUSTOMIZE                            */
2016     assert (!PL_tainted);
2017     TAINT;
2018     S_set_caret_X(aTHX);
2019     TAINT_NOT;
2020
2021 #if defined(USE_SITECUSTOMIZE)
2022     if (!minus_f) {
2023         /* The games with local $! are to avoid setting errno if there is no
2024            sitecustomize script.  "q%c...%c", 0, ..., 0 becomes "q\0...\0",
2025            ie a q() operator with a NUL byte as a the delimiter. This avoids
2026            problems with pathnames containing (say) '  */
2027 #  ifdef PERL_IS_MINIPERL
2028         AV *const inc = GvAV(PL_incgv);
2029         SV **const inc0 = inc ? av_fetch(inc, 0, FALSE) : NULL;
2030
2031         if (inc0) {
2032             (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav,
2033                                                  Perl_newSVpvf(aTHX_
2034                                                                "BEGIN { do {local $!; -f q%c%"SVf"/buildcustomize.pl%c} && do q%c%"SVf"/buildcustomize.pl%c }",
2035                                                                0, *inc0, 0,
2036                                                                0, *inc0, 0));
2037         }
2038 #  else
2039         /* SITELIB_EXP is a function call on Win32.  */
2040         const char *const raw_sitelib = SITELIB_EXP;
2041         /* process .../.. if PERL_RELOCATABLE_INC is defined */
2042         SV *sitelib_sv = mayberelocate(raw_sitelib, strlen(raw_sitelib),
2043                                        INCPUSH_CAN_RELOCATE);
2044         const char *const sitelib = SvPVX(sitelib_sv);
2045         (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav,
2046                                              Perl_newSVpvf(aTHX_
2047                                                            "BEGIN { do {local $!; -f q%c%s/sitecustomize.pl%c} && do q%c%s/sitecustomize.pl%c }",
2048                                                            0, sitelib, 0,
2049                                                            0, sitelib, 0));
2050         assert (SvREFCNT(sitelib_sv) == 1);
2051         SvREFCNT_dec(sitelib_sv);
2052 #  endif
2053     }
2054 #endif
2055
2056     if (!scriptname)
2057         scriptname = argv[0];
2058     if (PL_e_script) {
2059         argc++,argv--;
2060         scriptname = BIT_BUCKET;        /* don't look for script or read stdin */
2061     }
2062     else if (scriptname == NULL) {
2063 #ifdef MSDOS
2064         if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) )
2065             moreswitches("h");
2066 #endif
2067         scriptname = "-";
2068     }
2069
2070     assert (!PL_tainted);
2071     init_perllib();
2072
2073     {
2074         bool suidscript = FALSE;
2075
2076         rsfp = open_script(scriptname, dosearch, &suidscript);
2077         if (!rsfp) {
2078             rsfp = PerlIO_stdin();
2079         }
2080
2081         validate_suid(validarg, scriptname, fdscript, suidscript,
2082                       linestr_sv, rsfp);
2083
2084 #ifndef PERL_MICRO
2085 #  if defined(SIGCHLD) || defined(SIGCLD)
2086         {
2087 #  ifndef SIGCHLD
2088 #    define SIGCHLD SIGCLD
2089 #  endif
2090             Sighandler_t sigstate = rsignal_state(SIGCHLD);
2091             if (sigstate == (Sighandler_t) SIG_IGN) {
2092                 Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL),
2093                                "Can't ignore signal CHLD, forcing to default");
2094                 (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL);
2095             }
2096         }
2097 #  endif
2098 #endif
2099
2100         if (doextract) {
2101
2102             /* This will croak if suidscript is true, as -x cannot be used with
2103                setuid scripts.  */
2104             forbid_setid('x', suidscript);
2105             /* Hence you can't get here if suidscript is true */
2106
2107             find_beginning(linestr_sv, rsfp);
2108             if (cddir && PerlDir_chdir( (char *)cddir ) < 0)
2109                 Perl_croak(aTHX_ "Can't chdir to %s",cddir);
2110         }
2111     }
2112
2113     PL_main_cv = PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV));
2114     CvUNIQUE_on(PL_compcv);
2115
2116     CvPADLIST(PL_compcv) = pad_new(0);
2117
2118     PL_isarev = newHV();
2119
2120     boot_core_PerlIO();
2121     boot_core_UNIVERSAL();
2122     boot_core_mro();
2123     newXS("Internals::V", S_Internals_V, __FILE__);
2124
2125     if (xsinit)
2126         (*xsinit)(aTHX);        /* in case linked C routines want magical variables */
2127 #ifndef PERL_MICRO
2128 #if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(EPOC) || defined(SYMBIAN)
2129     init_os_extras();
2130 #endif
2131 #endif
2132
2133 #ifdef USE_SOCKS
2134 #   ifdef HAS_SOCKS5_INIT
2135     socks5_init(argv[0]);
2136 #   else
2137     SOCKSinit(argv[0]);
2138 #   endif
2139 #endif
2140
2141     init_predump_symbols();
2142     /* init_postdump_symbols not currently designed to be called */
2143     /* more than once (ENV isn't cleared first, for example)     */
2144     /* But running with -u leaves %ENV & @ARGV undefined!    XXX */
2145     if (!PL_do_undump)
2146         init_postdump_symbols(argc,argv,env);
2147
2148     /* PL_unicode is turned on by -C, or by $ENV{PERL_UNICODE},
2149      * or explicitly in some platforms.
2150      * locale.c:Perl_init_i18nl10n() if the environment
2151      * look like the user wants to use UTF-8. */
2152 #if defined(__SYMBIAN32__)
2153     PL_unicode = PERL_UNICODE_STD_FLAG; /* See PERL_SYMBIAN_CONSOLE_UTF8. */
2154 #endif
2155 #  ifndef PERL_IS_MINIPERL
2156     if (PL_unicode) {
2157          /* Requires init_predump_symbols(). */
2158          if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) {
2159               IO* io;
2160               PerlIO* fp;
2161               SV* sv;
2162
2163               /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR
2164                * and the default open disciplines. */
2165               if ((PL_unicode & PERL_UNICODE_STDIN_FLAG) &&
2166                   PL_stdingv  && (io = GvIO(PL_stdingv)) &&
2167                   (fp = IoIFP(io)))
2168                    PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2169               if ((PL_unicode & PERL_UNICODE_STDOUT_FLAG) &&
2170                   PL_defoutgv && (io = GvIO(PL_defoutgv)) &&
2171                   (fp = IoOFP(io)))
2172                    PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2173               if ((PL_unicode & PERL_UNICODE_STDERR_FLAG) &&
2174                   PL_stderrgv && (io = GvIO(PL_stderrgv)) &&
2175                   (fp = IoOFP(io)))
2176                    PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8");
2177               if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) &&
2178                   (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD|GV_NOTQUAL,
2179                                          SVt_PV)))) {
2180                    U32 in  = PL_unicode & PERL_UNICODE_IN_FLAG;
2181                    U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG;
2182                    if (in) {
2183                         if (out)
2184                              sv_setpvs(sv, ":utf8\0:utf8");
2185                         else
2186                              sv_setpvs(sv, ":utf8\0");
2187                    }
2188                    else if (out)
2189                         sv_setpvs(sv, "\0:utf8");
2190                    SvSETMAGIC(sv);
2191               }
2192          }
2193     }
2194 #endif
2195
2196     {
2197         const char *s;
2198     if ((s = PerlEnv_getenv("PERL_SIGNALS"))) {
2199          if (strEQ(s, "unsafe"))
2200               PL_signals |=  PERL_SIGNALS_UNSAFE_FLAG;
2201          else if (strEQ(s, "safe"))
2202               PL_signals &= ~PERL_SIGNALS_UNSAFE_FLAG;
2203          else
2204               Perl_croak(aTHX_ "PERL_SIGNALS illegal: \"%s\"", s);
2205     }
2206     }
2207
2208 #ifdef PERL_MAD
2209     {
2210         const char *s;
2211     if ((s = PerlEnv_getenv("PERL_XMLDUMP"))) {
2212         PL_madskills = 1;
2213         PL_minus_c = 1;
2214         if (!s || !s[0])
2215             PL_xmlfp = PerlIO_stdout();
2216         else {
2217             PL_xmlfp = PerlIO_open(s, "w");
2218             if (!PL_xmlfp)
2219                 Perl_croak(aTHX_ "Can't open %s", s);
2220         }
2221         my_setenv("PERL_XMLDUMP", NULL);        /* hide from subprocs */
2222     }
2223     }
2224
2225     {
2226         const char *s;
2227     if ((s = PerlEnv_getenv("PERL_MADSKILLS"))) {
2228         PL_madskills = atoi(s);
2229         my_setenv("PERL_MADSKILLS", NULL);      /* hide from subprocs */
2230     }
2231     }
2232 #endif
2233
2234     lex_start(linestr_sv, rsfp, 0);
2235     PL_subname = newSVpvs("main");
2236
2237     if (add_read_e_script)
2238         filter_add(read_e_script, NULL);
2239
2240     /* now parse the script */
2241
2242     SETERRNO(0,SS_NORMAL);
2243     if (yyparse(GRAMPROG) || PL_parser->error_count) {
2244         if (PL_minus_c)
2245             Perl_croak(aTHX_ "%s had compilation errors.\n", PL_origfilename);
2246         else {
2247             Perl_croak(aTHX_ "Execution of %s aborted due to compilation errors.\n",
2248                        PL_origfilename);
2249         }
2250     }
2251     CopLINE_set(PL_curcop, 0);
2252     SET_CURSTASH(PL_defstash);
2253     if (PL_e_script) {
2254         SvREFCNT_dec(PL_e_script);
2255         PL_e_script = NULL;
2256     }
2257
2258     if (PL_do_undump)
2259         my_unexec();
2260
2261     if (isWARN_ONCE) {
2262         SAVECOPFILE(PL_curcop);
2263         SAVECOPLINE(PL_curcop);
2264         gv_check(PL_defstash);
2265     }
2266
2267     LEAVE;
2268     FREETMPS;
2269
2270 #ifdef MYMALLOC
2271     {
2272         const char *s;
2273     if ((s=PerlEnv_getenv("PERL_DEBUG_MSTATS")) && atoi(s) >= 2)
2274         dump_mstats("after compilation:");
2275     }
2276 #endif
2277
2278     ENTER;
2279     PL_restartjmpenv = NULL;
2280     PL_restartop = 0;
2281     return NULL;
2282 }
2283
2284 /*
2285 =for apidoc perl_run
2286
2287 Tells a Perl interpreter to run.  See L<perlembed>.
2288
2289 =cut
2290 */
2291
2292 int
2293 perl_run(pTHXx)
2294 {
2295     dVAR;
2296     I32 oldscope;
2297     int ret = 0;
2298     dJMPENV;
2299
2300     PERL_ARGS_ASSERT_PERL_RUN;
2301 #ifndef MULTIPLICITY
2302     PERL_UNUSED_ARG(my_perl);
2303 #endif
2304
2305     oldscope = PL_scopestack_ix;
2306 #ifdef VMS
2307     VMSISH_HUSHED = 0;
2308 #endif
2309
2310     JMPENV_PUSH(ret);
2311     switch (ret) {
2312     case 1:
2313         cxstack_ix = -1;                /* start context stack again */
2314         goto redo_body;
2315     case 0:                             /* normal completion */
2316  redo_body:
2317         run_body(oldscope);
2318         /* FALL THROUGH */
2319     case 2:                             /* my_exit() */
2320         while (PL_scopestack_ix > oldscope)
2321             LEAVE;
2322         FREETMPS;
2323         SET_CURSTASH(PL_defstash);
2324         if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) &&
2325             PL_endav && !PL_minus_c) {
2326             PERL_SET_PHASE(PERL_PHASE_END);
2327             call_list(oldscope, PL_endav);
2328         }
2329 #ifdef MYMALLOC
2330         if (PerlEnv_getenv("PERL_DEBUG_MSTATS"))
2331             dump_mstats("after execution:  ");
2332 #endif
2333         ret = STATUS_EXIT;
2334         break;
2335     case 3:
2336         if (PL_restartop) {
2337             POPSTACK_TO(PL_mainstack);
2338             goto redo_body;
2339         }
2340         PerlIO_printf(Perl_error_log, "panic: restartop in perl_run\n");
2341         FREETMPS;
2342         ret = 1;
2343         break;
2344     }
2345
2346     JMPENV_POP;
2347     return ret;
2348 }
2349
2350 STATIC void
2351 S_run_body(pTHX_ I32 oldscope)
2352 {
2353     dVAR;
2354     DEBUG_r(PerlIO_printf(Perl_debug_log, "%s $` $& $' support.\n",
2355                     PL_sawampersand ? "Enabling" : "Omitting"));
2356
2357     if (!PL_restartop) {
2358 #ifdef PERL_MAD
2359         if (PL_xmlfp) {
2360             xmldump_all();
2361             exit(0);    /* less likely to core dump than my_exit(0) */
2362         }
2363 #endif
2364 #ifdef DEBUGGING
2365         if (DEBUG_x_TEST || DEBUG_B_TEST)
2366             dump_all_perl(!DEBUG_B_TEST);
2367         if (!DEBUG_q_TEST)
2368           PERL_DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n"));
2369 #endif
2370
2371         if (PL_minus_c) {
2372             PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename);
2373             my_exit(0);
2374         }
2375         if (PERLDB_SINGLE && PL_DBsingle)
2376             sv_setiv(PL_DBsingle, 1);
2377         if (PL_initav) {
2378             PERL_SET_PHASE(PERL_PHASE_INIT);
2379             call_list(oldscope, PL_initav);
2380         }
2381 #ifdef PERL_DEBUG_READONLY_OPS
2382         Perl_pending_Slabs_to_ro(aTHX);
2383 #endif
2384     }
2385
2386     /* do it */
2387
2388     PERL_SET_PHASE(PERL_PHASE_RUN);
2389
2390     if (PL_restartop) {
2391         PL_restartjmpenv = NULL;
2392         PL_op = PL_restartop;
2393         PL_restartop = 0;
2394         CALLRUNOPS(aTHX);
2395     }
2396     else if (PL_main_start) {
2397         CvDEPTH(PL_main_cv) = 1;
2398         PL_op = PL_main_start;
2399         CALLRUNOPS(aTHX);
2400     }
2401     my_exit(0);
2402     /* NOTREACHED */
2403 }
2404
2405 /*
2406 =head1 SV Manipulation Functions
2407
2408 =for apidoc p||get_sv
2409
2410 Returns the SV of the specified Perl scalar.  C<flags> are passed to
2411 C<gv_fetchpv>. If C<GV_ADD> is set and the
2412 Perl variable does not exist then it will be created.  If C<flags> is zero
2413 and the variable does not exist then NULL is returned.
2414
2415 =cut
2416 */
2417
2418 SV*
2419 Perl_get_sv(pTHX_ const char *name, I32 flags)
2420 {
2421     GV *gv;
2422
2423     PERL_ARGS_ASSERT_GET_SV;
2424
2425     gv = gv_fetchpv(name, flags, SVt_PV);
2426     if (gv)
2427         return GvSV(gv);
2428     return NULL;
2429 }
2430
2431 /*
2432 =head1 Array Manipulation Functions
2433
2434 =for apidoc p||get_av
2435
2436 Returns the AV of the specified Perl global or package array with the given
2437 name (so it won't work on lexical variables).  C<flags> are passed 
2438 to C<gv_fetchpv>. If C<GV_ADD> is set and the
2439 Perl variable does not exist then it will be created.  If C<flags> is zero
2440 and the variable does not exist then NULL is returned.
2441
2442 Perl equivalent: C<@{"$name"}>.
2443
2444 =cut
2445 */
2446
2447 AV*
2448 Perl_get_av(pTHX_ const char *name, I32 flags)
2449 {
2450     GV* const gv = gv_fetchpv(name, flags, SVt_PVAV);
2451
2452     PERL_ARGS_ASSERT_GET_AV;
2453
2454     if (flags)
2455         return GvAVn(gv);
2456     if (gv)
2457         return GvAV(gv);
2458     return NULL;
2459 }
2460
2461 /*
2462 =head1 Hash Manipulation Functions
2463
2464 =for apidoc p||get_hv
2465
2466 Returns the HV of the specified Perl hash.  C<flags> are passed to
2467 C<gv_fetchpv>. If C<GV_ADD> is set and the
2468 Perl variable does not exist then it will be created.  If C<flags> is zero
2469 and the variable does not exist then NULL is returned.
2470
2471 =cut
2472 */
2473
2474 HV*
2475 Perl_get_hv(pTHX_ const char *name, I32 flags)
2476 {
2477     GV* const gv = gv_fetchpv(name, flags, SVt_PVHV);
2478
2479     PERL_ARGS_ASSERT_GET_HV;
2480
2481     if (flags)
2482         return GvHVn(gv);
2483     if (gv)
2484         return GvHV(gv);
2485     return NULL;
2486 }
2487
2488 /*
2489 =head1 CV Manipulation Functions
2490
2491 =for apidoc p||get_cvn_flags
2492
2493 Returns the CV of the specified Perl subroutine.  C<flags> are passed to
2494 C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not
2495 exist then it will be declared (which has the same effect as saying
2496 C<sub name;>).  If C<GV_ADD> is not set and the subroutine does not exist
2497 then NULL is returned.
2498
2499 =for apidoc p||get_cv
2500
2501 Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
2502
2503 =cut
2504 */
2505
2506 CV*
2507 Perl_get_cvn_flags(pTHX_ const char *name, STRLEN len, I32 flags)
2508 {
2509     GV* const gv = gv_fetchpvn_flags(name, len, flags, SVt_PVCV);
2510     /* XXX this is probably not what they think they're getting.
2511      * It has the same effect as "sub name;", i.e. just a forward
2512      * declaration! */
2513
2514     PERL_ARGS_ASSERT_GET_CVN_FLAGS;
2515
2516     if ((flags & ~GV_NOADD_MASK) && !GvCVu(gv)) {
2517         SV *const sv = newSVpvn_flags(name, len, flags & SVf_UTF8);
2518         return newSUB(start_subparse(FALSE, 0),
2519                       newSVOP(OP_CONST, 0, sv),
2520                       NULL, NULL);
2521     }
2522     if (gv)
2523         return GvCVu(gv);
2524     return NULL;
2525 }
2526
2527 /* Nothing in core calls this now, but we can't replace it with a macro and
2528    move it to mathoms.c as a macro would evaluate name twice.  */
2529 CV*
2530 Perl_get_cv(pTHX_ const char *name, I32 flags)
2531 {
2532     PERL_ARGS_ASSERT_GET_CV;
2533
2534     return get_cvn_flags(name, strlen(name), flags);
2535 }
2536
2537 /* Be sure to refetch the stack pointer after calling these routines. */
2538
2539 /*
2540
2541 =head1 Callback Functions
2542
2543 =for apidoc p||call_argv
2544
2545 Performs a callback to the specified named and package-scoped Perl subroutine 
2546 with C<argv> (a NULL-terminated array of strings) as arguments. See L<perlcall>.
2547
2548 Approximate Perl equivalent: C<&{"$sub_name"}(@$argv)>.
2549
2550 =cut
2551 */
2552
2553 I32
2554 Perl_call_argv(pTHX_ const char *sub_name, I32 flags, register char **argv)
2555
2556                         /* See G_* flags in cop.h */
2557                         /* null terminated arg list */
2558 {
2559     dVAR;
2560     dSP;
2561
2562     PERL_ARGS_ASSERT_CALL_ARGV;
2563
2564     PUSHMARK(SP);
2565     if (argv) {
2566         while (*argv) {
2567             mXPUSHs(newSVpv(*argv,0));
2568             argv++;
2569         }
2570         PUTBACK;
2571     }
2572     return call_pv(sub_name, flags);
2573 }
2574
2575 /*
2576 =for apidoc p||call_pv
2577
2578 Performs a callback to the specified Perl sub.  See L<perlcall>.
2579
2580 =cut
2581 */
2582
2583 I32
2584 Perl_call_pv(pTHX_ const char *sub_name, I32 flags)
2585                         /* name of the subroutine */
2586                         /* See G_* flags in cop.h */
2587 {
2588     PERL_ARGS_ASSERT_CALL_PV;
2589
2590     return call_sv(MUTABLE_SV(get_cv(sub_name, GV_ADD)), flags);
2591 }
2592
2593 /*
2594 =for apidoc p||call_method
2595
2596 Performs a callback to the specified Perl method.  The blessed object must
2597 be on the stack.  See L<perlcall>.
2598
2599 =cut
2600 */
2601
2602 I32
2603 Perl_call_method(pTHX_ const char *methname, I32 flags)
2604                         /* name of the subroutine */
2605                         /* See G_* flags in cop.h */
2606 {
2607     STRLEN len;
2608     PERL_ARGS_ASSERT_CALL_METHOD;
2609
2610     len = strlen(methname);
2611
2612     /* XXX: sv_2mortal(newSVpvn_share(methname, len)) can be faster */
2613     return call_sv(newSVpvn_flags(methname, len, SVs_TEMP), flags | G_METHOD);
2614 }
2615
2616 /* May be called with any of a CV, a GV, or an SV containing the name. */
2617 /*
2618 =for apidoc p||call_sv
2619
2620 Performs a callback to the Perl sub whose name is in the SV.  See
2621 L<perlcall>.
2622
2623 =cut
2624 */
2625
2626 I32
2627 Perl_call_sv(pTHX_ SV *sv, VOL I32 flags)
2628                         /* See G_* flags in cop.h */
2629 {
2630     dVAR; dSP;
2631     LOGOP myop;         /* fake syntax tree node */
2632     UNOP method_op;
2633     I32 oldmark;
2634     VOL I32 retval = 0;
2635     I32 oldscope;
2636     bool oldcatch = CATCH_GET;
2637     int ret;
2638     OP* const oldop = PL_op;
2639     dJMPENV;
2640
2641     PERL_ARGS_ASSERT_CALL_SV;
2642
2643     if (flags & G_DISCARD) {
2644         ENTER;
2645         SAVETMPS;
2646     }
2647     if (!(flags & G_WANT)) {
2648         /* Backwards compatibility - as G_SCALAR was 0, it could be omitted.
2649          */
2650         flags |= G_SCALAR;
2651     }
2652
2653     Zero(&myop, 1, LOGOP);
2654     myop.op_next = NULL;
2655     if (!(flags & G_NOARGS))
2656         myop.op_flags |= OPf_STACKED;
2657     myop.op_flags |= OP_GIMME_REVERSE(flags);
2658     SAVEOP();
2659     PL_op = (OP*)&myop;
2660
2661     EXTEND(PL_stack_sp, 1);
2662     *++PL_stack_sp = sv;
2663     oldmark = TOPMARK;
2664     oldscope = PL_scopestack_ix;
2665
2666     if (PERLDB_SUB && PL_curstash != PL_debstash
2667            /* Handle first BEGIN of -d. */
2668           && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub)))
2669            /* Try harder, since this may have been a sighandler, thus
2670             * curstash may be meaningless. */
2671           && (SvTYPE(sv) != SVt_PVCV || CvSTASH((const CV *)sv) != PL_debstash)
2672           && !(flags & G_NODEBUG))
2673         PL_op->op_private |= OPpENTERSUB_DB;
2674
2675     if (flags & G_METHOD) {
2676         Zero(&method_op, 1, UNOP);
2677         method_op.op_next = PL_op;
2678         method_op.op_ppaddr = PL_ppaddr[OP_METHOD];
2679         method_op.op_type = OP_METHOD;
2680         myop.op_ppaddr = PL_ppaddr[OP_ENTERSUB];
2681         myop.op_type = OP_ENTERSUB;
2682         PL_op = (OP*)&method_op;
2683     }
2684
2685     if (!(flags & G_EVAL)) {
2686         CATCH_SET(TRUE);
2687         CALL_BODY_SUB((OP*)&myop);
2688         retval = PL_stack_sp - (PL_stack_base + oldmark);
2689         CATCH_SET(oldcatch);
2690     }
2691     else {
2692         myop.op_other = (OP*)&myop;
2693         PL_markstack_ptr--;
2694         create_eval_scope(flags|G_FAKINGEVAL);
2695         PL_markstack_ptr++;
2696
2697         JMPENV_PUSH(ret);
2698
2699         switch (ret) {
2700         case 0:
2701  redo_body:
2702             CALL_BODY_SUB((OP*)&myop);
2703             retval = PL_stack_sp - (PL_stack_base + oldmark);
2704             if (!(flags & G_KEEPERR)) {
2705                 CLEAR_ERRSV();
2706             }
2707             break;
2708         case 1:
2709             STATUS_ALL_FAILURE;
2710             /* FALL THROUGH */
2711         case 2:
2712             /* my_exit() was called */
2713             SET_CURSTASH(PL_defstash);
2714             FREETMPS;
2715             JMPENV_POP;
2716             my_exit_jump();
2717             /* NOTREACHED */
2718         case 3:
2719             if (PL_restartop) {
2720                 PL_restartjmpenv = NULL;
2721                 PL_op = PL_restartop;
2722                 PL_restartop = 0;
2723                 goto redo_body;
2724             }
2725             PL_stack_sp = PL_stack_base + oldmark;
2726             if ((flags & G_WANT) == G_ARRAY)
2727                 retval = 0;
2728             else {
2729                 retval = 1;
2730                 *++PL_stack_sp = &PL_sv_undef;
2731             }
2732             break;
2733         }
2734
2735         if (PL_scopestack_ix > oldscope)
2736             delete_eval_scope();
2737         JMPENV_POP;
2738     }
2739
2740     if (flags & G_DISCARD) {
2741         PL_stack_sp = PL_stack_base + oldmark;
2742         retval = 0;
2743         FREETMPS;
2744         LEAVE;
2745     }
2746     PL_op = oldop;
2747     return retval;
2748 }
2749
2750 /* Eval a string. The G_EVAL flag is always assumed. */
2751
2752 /*
2753 =for apidoc p||eval_sv
2754
2755 Tells Perl to C<eval> the string in the SV. It supports the same flags
2756 as C<call_sv>, with the obvious exception of G_EVAL. See L<perlcall>.
2757
2758 =cut
2759 */
2760
2761 I32
2762 Perl_eval_sv(pTHX_ SV *sv, I32 flags)
2763
2764                         /* See G_* flags in cop.h */
2765 {
2766     dVAR;
2767     dSP;
2768     UNOP myop;          /* fake syntax tree node */
2769     VOL I32 oldmark = SP - PL_stack_base;
2770     VOL I32 retval = 0;
2771     int ret;
2772     OP* const oldop = PL_op;
2773     dJMPENV;
2774
2775     PERL_ARGS_ASSERT_EVAL_SV;
2776
2777     if (flags & G_DISCARD) {
2778         ENTER;
2779         SAVETMPS;
2780     }
2781
2782     SAVEOP();
2783     PL_op = (OP*)&myop;
2784     Zero(PL_op, 1, UNOP);
2785     EXTEND(PL_stack_sp, 1);
2786     *++PL_stack_sp = sv;
2787
2788     if (!(flags & G_NOARGS))
2789         myop.op_flags = OPf_STACKED;
2790     myop.op_next = NULL;
2791     myop.op_type = OP_ENTEREVAL;
2792     myop.op_flags |= OP_GIMME_REVERSE(flags);
2793     if (flags & G_KEEPERR)
2794         myop.op_flags |= OPf_SPECIAL;
2795
2796     /* fail now; otherwise we could fail after the JMPENV_PUSH but
2797      * before a PUSHEVAL, which corrupts the stack after a croak */
2798     TAINT_PROPER("eval_sv()");
2799
2800     JMPENV_PUSH(ret);
2801     switch (ret) {
2802     case 0:
2803  redo_body:
2804         if (PL_op == (OP*)(&myop)) {
2805             PL_op = PL_ppaddr[OP_ENTEREVAL](aTHX);
2806             if (!PL_op)
2807                 goto fail; /* failed in compilation */
2808         }
2809         CALLRUNOPS(aTHX);
2810         retval = PL_stack_sp - (PL_stack_base + oldmark);
2811         if (!(flags & G_KEEPERR)) {
2812             CLEAR_ERRSV();
2813         }
2814         break;
2815     case 1:
2816         STATUS_ALL_FAILURE;
2817         /* FALL THROUGH */
2818     case 2:
2819         /* my_exit() was called */
2820         SET_CURSTASH(PL_defstash);
2821         FREETMPS;
2822         JMPENV_POP;
2823         my_exit_jump();
2824         /* NOTREACHED */
2825     case 3:
2826         if (PL_restartop) {
2827             PL_restartjmpenv = NULL;
2828             PL_op = PL_restartop;
2829             PL_restartop = 0;
2830             goto redo_body;
2831         }
2832       fail:
2833         PL_stack_sp = PL_stack_base + oldmark;
2834         if ((flags & G_WANT) == G_ARRAY)
2835             retval = 0;
2836         else {
2837             retval = 1;
2838             *++PL_stack_sp = &PL_sv_undef;
2839         }
2840         break;
2841     }
2842
2843     JMPENV_POP;
2844     if (flags & G_DISCARD) {
2845         PL_stack_sp = PL_stack_base + oldmark;
2846         retval = 0;
2847         FREETMPS;
2848         LEAVE;
2849     }
2850     PL_op = oldop;
2851     return retval;
2852 }
2853
2854 /*
2855 =for apidoc p||eval_pv
2856
2857 Tells Perl to C<eval> the given string and return an SV* result.
2858
2859 =cut
2860 */
2861
2862 SV*
2863 Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error)
2864 {
2865     dVAR;
2866     dSP;
2867     SV* sv = newSVpv(p, 0);
2868
2869     PERL_ARGS_ASSERT_EVAL_PV;
2870
2871     eval_sv(sv, G_SCALAR);
2872     SvREFCNT_dec(sv);
2873
2874     SPAGAIN;
2875     sv = POPs;
2876     PUTBACK;
2877
2878     if (croak_on_error && SvTRUE(ERRSV)) {
2879         Perl_croak(aTHX_ "%s", SvPVx_nolen_const(ERRSV));
2880     }
2881
2882     return sv;
2883 }
2884
2885 /* Require a module. */
2886
2887 /*
2888 =head1 Embedding Functions
2889
2890 =for apidoc p||require_pv
2891
2892 Tells Perl to C<require> the file named by the string argument.  It is
2893 analogous to the Perl code C<eval "require '$file'">.  It's even
2894 implemented that way; consider using load_module instead.
2895
2896 =cut */
2897
2898 void
2899 Perl_require_pv(pTHX_ const char *pv)
2900 {
2901     dVAR;
2902     dSP;
2903     SV* sv;
2904
2905     PERL_ARGS_ASSERT_REQUIRE_PV;
2906
2907     PUSHSTACKi(PERLSI_REQUIRE);
2908     PUTBACK;
2909     sv = Perl_newSVpvf(aTHX_ "require q%c%s%c", 0, pv, 0);
2910     eval_sv(sv_2mortal(sv), G_DISCARD);
2911     SPAGAIN;
2912     POPSTACK;
2913 }
2914
2915 STATIC void
2916 S_usage(pTHX)           /* XXX move this out into a module ? */
2917 {
2918     /* This message really ought to be max 23 lines.
2919      * Removed -h because the user already knows that option. Others? */
2920
2921     /* Grouped as 6 lines per C string literal, to keep under the ANSI C 89
2922        minimum of 509 character string literals.  */
2923     static const char * const usage_msg[] = {
2924 "  -0[octal]         specify record separator (\\0, if no argument)\n"
2925 "  -a                autosplit mode with -n or -p (splits $_ into @F)\n"
2926 "  -C[number/list]   enables the listed Unicode features\n"
2927 "  -c                check syntax only (runs BEGIN and CHECK blocks)\n"
2928 "  -d[:debugger]     run program under debugger\n"
2929 "  -D[number/list]   set debugging flags (argument is a bit mask or alphabets)\n",
2930 "  -e program        one line of program (several -e's allowed, omit programfile)\n"
2931 "  -E program        like -e, but enables all optional features\n"
2932 "  -f                don't do $sitelib/sitecustomize.pl at startup\n"
2933 "  -F/pattern/       split() pattern for -a switch (//'s are optional)\n"
2934 "  -i[extension]     edit <> files in place (makes backup if extension supplied)\n"
2935 "  -Idirectory       specify @INC/#include directory (several -I's allowed)\n",
2936 "  -l[octal]         enable line ending processing, specifies line terminator\n"
2937 "  -[mM][-]module    execute \"use/no module...\" before executing program\n"
2938 "  -n                assume \"while (<>) { ... }\" loop around program\n"
2939 "  -p                assume loop like -n but print line also, like sed\n"
2940 "  -s                enable rudimentary parsing for switches after programfile\n"
2941 "  -S                look for programfile using PATH environment variable\n",
2942 "  -t                enable tainting warnings\n"
2943 "  -T                enable tainting checks\n"
2944 "  -u                dump core after parsing program\n"
2945 "  -U                allow unsafe operations\n"
2946 "  -v                print version, patchlevel and license\n"
2947 "  -V[:variable]     print configuration summary (or a single Config.pm variable)\n",
2948 "  -w                enable many useful warnings\n"
2949 "  -W                enable all warnings\n"
2950 "  -x[directory]     ignore text before #!perl line (optionally cd to directory)\n"
2951 "  -X                disable all warnings\n"
2952 "  \n"
2953 "Run 'perldoc perl' for more help with Perl.\n\n",
2954 NULL
2955 };
2956     const char * const *p = usage_msg;
2957     PerlIO *out = PerlIO_stdout();
2958
2959     PerlIO_printf(out,
2960                   "\nUsage: %s [switches] [--] [programfile] [arguments]\n",
2961                   PL_origargv[0]);
2962     while (*p)
2963         PerlIO_puts(out, *p++);
2964     my_exit(0);
2965 }
2966
2967 /* convert a string of -D options (or digits) into an int.
2968  * sets *s to point to the char after the options */
2969
2970 #ifdef DEBUGGING
2971 int
2972 Perl_get_debug_opts(pTHX_ const char **s, bool givehelp)
2973 {
2974     static const char * const usage_msgd[] = {
2975       " Debugging flag values: (see also -d)\n"
2976       "  p  Tokenizing and parsing (with v, displays parse stack)\n"
2977       "  s  Stack snapshots (with v, displays all stacks)\n"
2978       "  l  Context (loop) stack processing\n"
2979       "  t  Trace execution\n"
2980       "  o  Method and overloading resolution\n",
2981       "  c  String/numeric conversions\n"
2982       "  P  Print profiling info, source file input state\n"
2983       "  m  Memory and SV allocation\n"
2984       "  f  Format processing\n"
2985       "  r  Regular expression parsing and execution\n"
2986       "  x  Syntax tree dump\n",
2987       "  u  Tainting checks\n"
2988       "  H  Hash dump -- usurps values()\n"
2989       "  X  Scratchpad allocation\n"
2990       "  D  Cleaning up\n"
2991       "  T  Tokenising\n"
2992       "  R  Include reference counts of dumped variables (eg when using -Ds)\n",
2993       "  J  Do not s,t,P-debug (Jump over) opcodes within package DB\n"
2994       "  v  Verbose: use in conjunction with other flags\n"
2995       "  C  Copy On Write\n"
2996       "  A  Consistency checks on internal structures\n"
2997       "  q  quiet - currently only suppresses the 'EXECUTING' message\n"
2998       "  M  trace smart match resolution\n"
2999       "  B  dump suBroutine definitions, including special Blocks like BEGIN\n",
3000       NULL
3001     };
3002     int i = 0;
3003
3004     PERL_ARGS_ASSERT_GET_DEBUG_OPTS;
3005
3006     if (isALPHA(**s)) {
3007         /* if adding extra options, remember to update DEBUG_MASK */
3008         static const char debopts[] = "psltocPmfrxuUHXDSTRJvCAqMB";
3009
3010         for (; isALNUM(**s); (*s)++) {
3011             const char * const d = strchr(debopts,**s);
3012             if (d)
3013                 i |= 1 << (d - debopts);
3014             else if (ckWARN_d(WARN_DEBUGGING))
3015                 Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
3016                     "invalid option -D%c, use -D'' to see choices\n", **s);
3017         }
3018     }
3019     else if (isDIGIT(**s)) {
3020         i = atoi(*s);
3021         for (; isALNUM(**s); (*s)++) ;
3022     }
3023     else if (givehelp) {
3024       const char *const *p = usage_msgd;
3025       while (*p) PerlIO_puts(PerlIO_stdout(), *p++);
3026     }
3027 #  ifdef EBCDIC
3028     if ((i & DEBUG_p_FLAG) && ckWARN_d(WARN_DEBUGGING))
3029         Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
3030                 "-Dp not implemented on this platform\n");
3031 #  endif
3032     return i;
3033 }
3034 #endif
3035
3036 /* This routine handles any switches that can be given during run */
3037
3038 const char *
3039 Perl_moreswitches(pTHX_ const char *s)
3040 {
3041     dVAR;
3042     UV rschar;
3043     const char option = *s; /* used to remember option in -m/-M code */
3044
3045     PERL_ARGS_ASSERT_MORESWITCHES;
3046
3047     switch (*s) {
3048     case '0':
3049     {
3050          I32 flags = 0;
3051          STRLEN numlen;
3052
3053          SvREFCNT_dec(PL_rs);
3054          if (s[1] == 'x' && s[2]) {
3055               const char *e = s+=2;
3056               U8 *tmps;
3057
3058               while (*e)
3059                 e++;
3060               numlen = e - s;
3061               flags = PERL_SCAN_SILENT_ILLDIGIT;
3062               rschar = (U32)grok_hex(s, &numlen, &flags, NULL);
3063               if (s + numlen < e) {
3064                    rschar = 0; /* Grandfather -0xFOO as -0 -xFOO. */
3065                    numlen = 0;
3066                    s--;
3067               }
3068               PL_rs = newSVpvs("");
3069               SvGROW(PL_rs, (STRLEN)(UNISKIP(rschar) + 1));
3070               tmps = (U8*)SvPVX(PL_rs);
3071               uvchr_to_utf8(tmps, rschar);
3072               SvCUR_set(PL_rs, UNISKIP(rschar));
3073               SvUTF8_on(PL_rs);
3074          }
3075          else {
3076               numlen = 4;
3077               rschar = (U32)grok_oct(s, &numlen, &flags, NULL);
3078               if (rschar & ~((U8)~0))
3079                    PL_rs = &PL_sv_undef;
3080               else if (!rschar && numlen >= 2)
3081                    PL_rs = newSVpvs("");
3082               else {
3083                    char ch = (char)rschar;
3084                    PL_rs = newSVpvn(&ch, 1);
3085               }
3086          }
3087          sv_setsv(get_sv("/", GV_ADD), PL_rs);
3088          return s + numlen;
3089     }
3090     case 'C':
3091         s++;
3092         PL_unicode = parse_unicode_opts( (const char **)&s );
3093         if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG)
3094             PL_utf8cache = -1;
3095         return s;
3096     case 'F':
3097         PL_minus_F = TRUE;
3098         PL_splitstr = ++s;
3099         while (*s && !isSPACE(*s)) ++s;
3100         PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr);
3101         return s;
3102     case 'a':
3103         PL_minus_a = TRUE;
3104         s++;
3105         return s;
3106     case 'c':
3107         PL_minus_c = TRUE;
3108         s++;
3109         return s;
3110     case 'd':
3111         forbid_setid('d', FALSE);
3112         s++;
3113
3114         /* -dt indicates to the debugger that threads will be used */
3115         if (*s == 't' && !isALNUM(s[1])) {
3116             ++s;
3117             my_setenv("PERL5DB_THREADED", "1");
3118         }
3119
3120         /* The following permits -d:Mod to accepts arguments following an =
3121            in the fashion that -MSome::Mod does. */
3122         if (*s == ':' || *s == '=') {
3123             const char *start;
3124             const char *end;
3125             SV *sv;
3126
3127             if (*++s == '-') {
3128                 ++s;
3129                 sv = newSVpvs("no Devel::");
3130             } else {
3131                 sv = newSVpvs("use Devel::");
3132             }
3133
3134             start = s;
3135             end = s + strlen(s);
3136
3137             /* We now allow -d:Module=Foo,Bar and -d:-Module */
3138             while(isALNUM(*s) || *s==':') ++s;
3139             if (*s != '=')
3140                 sv_catpvn(sv, start, end - start);
3141             else {
3142                 sv_catpvn(sv, start, s-start);
3143                 /* Don't use NUL as q// delimiter here, this string goes in the
3144                  * environment. */
3145                 Perl_sv_catpvf(aTHX_ sv, " split(/,/,q{%s});", ++s);
3146             }
3147             s = end;
3148             my_setenv("PERL5DB", SvPV_nolen_const(sv));
3149             SvREFCNT_dec(sv);
3150         }
3151         if (!PL_perldb) {
3152             PL_perldb = PERLDB_ALL;
3153             init_debugger();
3154         }
3155         return s;
3156     case 'D':
3157     {   
3158 #ifdef DEBUGGING
3159         forbid_setid('D', FALSE);
3160         s++;
3161         PL_debug = get_debug_opts( (const char **)&s, 1) | DEBUG_TOP_FLAG;
3162 #else /* !DEBUGGING */
3163         if (ckWARN_d(WARN_DEBUGGING))
3164             Perl_warner(aTHX_ packWARN(WARN_DEBUGGING),
3165                    "Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)\n");
3166         for (s++; isALNUM(*s); s++) ;
3167 #endif
3168         return s;
3169     }   
3170     case 'h':
3171         usage();
3172     case 'i':
3173         Safefree(PL_inplace);
3174 #if defined(__CYGWIN__) /* do backup extension automagically */
3175         if (*(s+1) == '\0') {
3176         PL_inplace = savepvs(".bak");
3177         return s+1;
3178         }
3179 #endif /* __CYGWIN__ */
3180         {
3181             const char * const start = ++s;
3182             while (*s && !isSPACE(*s))
3183                 ++s;
3184
3185             PL_inplace = savepvn(start, s - start);
3186         }
3187         if (*s) {
3188             ++s;
3189             if (*s == '-')      /* Additional switches on #! line. */
3190                 s++;
3191         }
3192         return s;
3193     case 'I':   /* -I handled both here and in parse_body() */
3194         forbid_setid('I', FALSE);
3195         ++s;
3196         while (*s && isSPACE(*s))
3197             ++s;
3198         if (*s) {
3199             const char *e, *p;
3200             p = s;
3201             /* ignore trailing spaces (possibly followed by other switches) */
3202             do {
3203                 for (e = p; *e && !isSPACE(*e); e++) ;
3204                 p = e;
3205                 while (isSPACE(*p))
3206                     p++;
3207             } while (*p && *p != '-');
3208             incpush(s, e-s,
3209                     INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS|INCPUSH_UNSHIFT);
3210             s = p;
3211             if (*s == '-')
3212                 s++;
3213         }
3214         else
3215             Perl_croak(aTHX_ "No directory specified for -I");
3216         return s;
3217     case 'l':
3218         PL_minus_l = TRUE;
3219         s++;
3220         if (PL_ors_sv) {
3221             SvREFCNT_dec(PL_ors_sv);
3222             PL_ors_sv = NULL;
3223         }
3224         if (isDIGIT(*s)) {
3225             I32 flags = 0;
3226             STRLEN numlen;
3227             PL_ors_sv = newSVpvs("\n");
3228             numlen = 3 + (*s == '0');
3229             *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL);
3230             s += numlen;
3231         }
3232         else {
3233             if (RsPARA(PL_rs)) {
3234                 PL_ors_sv = newSVpvs("\n\n");
3235             }
3236             else {
3237                 PL_ors_sv = newSVsv(PL_rs);
3238             }
3239         }
3240         return s;
3241     case 'M':
3242         forbid_setid('M', FALSE);       /* XXX ? */
3243         /* FALL THROUGH */
3244     case 'm':
3245         forbid_setid('m', FALSE);       /* XXX ? */
3246         if (*++s) {
3247             const char *start;
3248             const char *end;
3249             SV *sv;
3250             const char *use = "use ";
3251             bool colon = FALSE;
3252             /* -M-foo == 'no foo'       */
3253             /* Leading space on " no " is deliberate, to make both
3254                possibilities the same length.  */
3255             if (*s == '-') { use = " no "; ++s; }
3256             sv = newSVpvn(use,4);
3257             start = s;
3258             /* We allow -M'Module qw(Foo Bar)'  */
3259             while(isALNUM(*s) || *s==':') {
3260                 if( *s++ == ':' ) {
3261                     if( *s == ':' ) 
3262                         s++;
3263                     else
3264                         colon = TRUE;
3265                 }
3266             }
3267             if (s == start)
3268                 Perl_croak(aTHX_ "Module name required with -%c option",
3269                                     option);
3270             if (colon) 
3271                 Perl_croak(aTHX_ "Invalid module name %.*s with -%c option: "
3272                                     "contains single ':'",
3273                                     (int)(s - start), start, option);
3274             end = s + strlen(s);
3275             if (*s != '=') {
3276                 sv_catpvn(sv, start, end - start);
3277                 if (option == 'm') {
3278                     if (*s != '\0')
3279                         Perl_croak(aTHX_ "Can't use '%c' after -mname", *s);
3280                     sv_catpvs( sv, " ()");
3281                 }
3282             } else {
3283                 sv_catpvn(sv, start, s-start);
3284                 /* Use NUL as q''-delimiter.  */
3285                 sv_catpvs(sv, " split(/,/,q\0");
3286                 ++s;
3287                 sv_catpvn(sv, s, end - s);
3288                 sv_catpvs(sv,  "\0)");
3289             }
3290             s = end;
3291             Perl_av_create_and_push(aTHX_ &PL_preambleav, sv);
3292         }
3293         else
3294             Perl_croak(aTHX_ "Missing argument to -%c", option);
3295         return s;
3296     case 'n':
3297         PL_minus_n = TRUE;
3298         s++;
3299         return s;
3300     case 'p':
3301         PL_minus_p = TRUE;
3302         s++;
3303         return s;
3304     case 's':
3305         forbid_setid('s', FALSE);
3306         PL_doswitches = TRUE;
3307         s++;
3308         return s;
3309     case 't':
3310     case 'T':
3311         if (!PL_tainting)
3312             TOO_LATE_FOR(*s);
3313         s++;
3314         return s;
3315     case 'u':
3316         PL_do_undump = TRUE;
3317         s++;
3318         return s;
3319     case 'U':
3320         PL_unsafe = TRUE;
3321         s++;
3322         return s;
3323     case 'v':
3324         minus_v();
3325     case 'w':
3326         if (! (PL_dowarn & G_WARN_ALL_MASK)) {
3327             PL_dowarn |= G_WARN_ON;
3328         }
3329         s++;
3330         return s;
3331     case 'W':
3332         PL_dowarn = G_WARN_ALL_ON|G_WARN_ON;
3333         if (!specialWARN(PL_compiling.cop_warnings))
3334             PerlMemShared_free(PL_compiling.cop_warnings);
3335         PL_compiling.cop_warnings = pWARN_ALL ;
3336         s++;
3337         return s;
3338     case 'X':
3339         PL_dowarn = G_WARN_ALL_OFF;
3340         if (!specialWARN(PL_compiling.cop_warnings))
3341             PerlMemShared_free(PL_compiling.cop_warnings);
3342         PL_compiling.cop_warnings = pWARN_NONE ;
3343         s++;
3344         return s;
3345     case '*':
3346     case ' ':
3347         while( *s == ' ' )
3348           ++s;
3349         if (s[0] == '-')        /* Additional switches on #! line. */
3350             return s+1;
3351         break;
3352     case '-':
3353     case 0:
3354 #if defined(WIN32) || !defined(PERL_STRICT_CR)
3355     case '\r':
3356 #endif
3357     case '\n':
3358     case '\t':
3359         break;
3360 #ifdef ALTERNATE_SHEBANG
3361     case 'S':                   /* OS/2 needs -S on "extproc" line. */
3362         break;
3363 #endif
3364     case 'e': case 'f': case 'x': case 'E':
3365 #ifndef ALTERNATE_SHEBANG
3366     case 'S':
3367 #endif
3368     case 'V':
3369         Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s);
3370     default:
3371         Perl_croak(aTHX_
3372             "Unrecognized switch: -%.1s  (-h will show valid options)",s
3373         );
3374     }
3375     return NULL;
3376 }
3377
3378
3379 STATIC void
3380 S_minus_v(pTHX)
3381 {
3382         if (!sv_derived_from(PL_patchlevel, "version"))
3383             upg_version(PL_patchlevel, TRUE);
3384 #if !defined(DGUX)
3385         {
3386             SV* level= vstringify(PL_patchlevel);
3387 #ifdef PERL_PATCHNUM
3388 #  ifdef PERL_GIT_UNCOMMITTED_CHANGES
3389             SV *num = newSVpvs(PERL_PATCHNUM "*");
3390 #  else
3391             SV *num = newSVpvs(PERL_PATCHNUM);
3392 #  endif
3393
3394             if (sv_len(num)>=sv_len(level) && strnEQ(SvPV_nolen(num),SvPV_nolen(level),sv_len(level))) {
3395                 SvREFCNT_dec(level);
3396                 level= num;
3397             } else {
3398                 Perl_sv_catpvf(aTHX_ level, " (%"SVf")", num);
3399                 SvREFCNT_dec(num);
3400             }
3401  #endif
3402             PerlIO_printf(PerlIO_stdout(),
3403                 "\nThis is perl "       STRINGIFY(PERL_REVISION)
3404                 ", version "            STRINGIFY(PERL_VERSION)
3405                 ", subversion "         STRINGIFY(PERL_SUBVERSION)
3406                 " (%"SVf") built for "  ARCHNAME, level
3407                 );
3408             SvREFCNT_dec(level);
3409         }
3410 #else /* DGUX */
3411 /* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */
3412         PerlIO_printf(PerlIO_stdout(),
3413                 Perl_form(aTHX_ "\nThis is perl, %"SVf"\n",
3414                     SVfARG(vstringify(PL_patchlevel))));
3415         PerlIO_printf(PerlIO_stdout(),
3416                         Perl_form(aTHX_ "        built under %s at %s %s\n",
3417                                         OSNAME, __DATE__, __TIME__));
3418         PerlIO_printf(PerlIO_stdout(),
3419                         Perl_form(aTHX_ "        OS Specific Release: %s\n",
3420                                         OSVERS));
3421 #endif /* !DGUX */
3422 #if defined(LOCAL_PATCH_COUNT)
3423         if (LOCAL_PATCH_COUNT > 0)
3424             PerlIO_printf(PerlIO_stdout(),
3425                           "\n(with %d registered patch%s, "
3426                           "see perl -V for more detail)",
3427                           LOCAL_PATCH_COUNT,
3428                           (LOCAL_PATCH_COUNT!=1) ? "es" : "");
3429 #endif
3430
3431         PerlIO_printf(PerlIO_stdout(),
3432                       "\n\nCopyright 1987-2012, Larry Wall\n");
3433 #ifdef MSDOS
3434         PerlIO_printf(PerlIO_stdout(),
3435                       "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n");
3436 #endif
3437 #ifdef DJGPP
3438         PerlIO_printf(PerlIO_stdout(),
3439                       "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n"
3440                       "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n");
3441 #endif
3442 #ifdef OS2
3443         PerlIO_printf(PerlIO_stdout(),
3444                       "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
3445                       "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n");
3446 #endif
3447 #ifdef atarist
3448         PerlIO_printf(PerlIO_stdout(),
3449                       "atariST series port, ++jrb  bammi@cadence.com\n");
3450 #endif
3451 #ifdef __BEOS__
3452         PerlIO_printf(PerlIO_stdout(),
3453                       "BeOS port Copyright Tom Spindler, 1997-1999\n");
3454 #endif
3455 #ifdef MPE
3456         PerlIO_printf(PerlIO_stdout(),
3457                       "MPE/iX port Copyright by Mark Klein and Mark Bixby, 1996-2003\n");
3458 #endif
3459 #ifdef OEMVS
3460         PerlIO_printf(PerlIO_stdout(),
3461                       "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n");
3462 #endif
3463 #ifdef __VOS__
3464         PerlIO_printf(PerlIO_stdout(),
3465                       "Stratus VOS port by Paul.Green@stratus.com, 1997-2002\n");
3466 #endif
3467 #ifdef __OPEN_VM
3468         PerlIO_printf(PerlIO_stdout(),
3469                       "VM/ESA port by Neale Ferguson, 1998-1999\n");
3470 #endif
3471 #ifdef POSIX_BC
3472         PerlIO_printf(PerlIO_stdout(),
3473                       "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n");
3474 #endif
3475 #ifdef EPOC
3476         PerlIO_printf(PerlIO_stdout(),
3477                       "EPOC port by Olaf Flebbe, 1999-2002\n");
3478 #endif
3479 #ifdef UNDER_CE
3480         PerlIO_printf(PerlIO_stdout(),"WINCE port by Rainer Keuchel, 2001-2002\n");
3481         PerlIO_printf(PerlIO_stdout(),"Built on " __DATE__ " " __TIME__ "\n\n");
3482         wce_hitreturn();
3483 #endif
3484 #ifdef __SYMBIAN32__
3485         PerlIO_printf(PerlIO_stdout(),
3486                       "Symbian port by Nokia, 2004-2005\n");
3487 #endif
3488 #ifdef BINARY_BUILD_NOTICE
3489         BINARY_BUILD_NOTICE;
3490 #endif
3491         PerlIO_printf(PerlIO_stdout(),
3492                       "\n\
3493 Perl may be copied only under the terms of either the Artistic License or the\n\
3494 GNU General Public License, which may be found in the Perl 5 source kit.\n\n\
3495 Complete documentation for Perl, including FAQ lists, should be found on\n\
3496 this system using \"man perl\" or \"perldoc perl\".  If you have access to the\n\
3497 Internet, point your browser at http://www.perl.org/, the Perl Home Page.\n\n");
3498         my_exit(0);
3499 }
3500
3501 /* compliments of Tom Christiansen */
3502
3503 /* unexec() can be found in the Gnu emacs distribution */
3504 /* Known to work with -DUNEXEC and using unexelf.c from GNU emacs-20.2 */
3505
3506 void
3507 Perl_my_unexec(pTHX)
3508 {
3509     PERL_UNUSED_CONTEXT;
3510 #ifdef UNEXEC
3511     SV *    prog = newSVpv(BIN_EXP, 0);
3512     SV *    file = newSVpv(PL_origfilename, 0);
3513     int    status = 1;
3514     extern int etext;
3515
3516     sv_catpvs(prog, "/perl");
3517     sv_catpvs(file, ".perldump");
3518
3519     unexec(SvPVX(file), SvPVX(prog), &etext, sbrk(0), 0);
3520     /* unexec prints msg to stderr in case of failure */
3521     PerlProc_exit(status);
3522 #else
3523 #  ifdef VMS
3524 #    include <lib$routines.h>
3525      lib$signal(SS$_DEBUG);  /* ssdef.h #included from vmsish.h */
3526 #  elif defined(WIN32) || defined(__CYGWIN__)
3527     Perl_croak(aTHX_ "dump is not supported");
3528 #  else
3529     ABORT();            /* for use with undump */
3530 #  endif
3531 #endif
3532 }
3533
3534 /* initialize curinterp */
3535 STATIC void
3536 S_init_interp(pTHX)
3537 {
3538     dVAR;
3539 #ifdef MULTIPLICITY
3540 #  define PERLVAR(prefix,var,type)
3541 #  define PERLVARA(prefix,var,n,type)
3542 #  if defined(PERL_IMPLICIT_CONTEXT)
3543 #    define PERLVARI(prefix,var,type,init)      aTHX->prefix##var = init;
3544 #    define PERLVARIC(prefix,var,type,init)     aTHX->prefix##var = init;
3545 #  else
3546 #    define PERLVARI(prefix,var,type,init)      PERL_GET_INTERP->var = init;
3547 #    define PERLVARIC(prefix,var,type,init)     PERL_GET_INTERP->var = init;
3548 #  endif
3549 #  include "intrpvar.h"
3550 #  undef PERLVAR
3551 #  undef PERLVARA
3552 #  undef PERLVARI
3553 #  undef PERLVARIC
3554 #else
3555 #  define PERLVAR(prefix,var,type)
3556 #  define PERLVARA(prefix,var,n,type)
3557 #  define PERLVARI(prefix,var,type,init)        PL_##var = init;
3558 #  define PERLVARIC(prefix,var,type,init)       PL_##var = init;
3559 #  include "intrpvar.h"
3560 #  undef PERLVAR
3561 #  undef PERLVARA
3562 #  undef PERLVARI
3563 #  undef PERLVARIC
3564 #endif
3565
3566     /* As these are inside a structure, PERLVARI isn't capable of initialising
3567        them  */
3568     PL_reg_oldcurpm = PL_reg_curpm = NULL;
3569     PL_reg_poscache = PL_reg_starttry = NULL;
3570 }
3571
3572 STATIC void
3573 S_init_main_stash(pTHX)
3574 {
3575     dVAR;
3576     GV *gv;
3577
3578     PL_curstash = PL_defstash = (HV *)SvREFCNT_inc_simple_NN(newHV());
3579     /* We know that the string "main" will be in the global shared string
3580        table, so it's a small saving to use it rather than allocate another
3581        8 bytes.  */
3582     PL_curstname = newSVpvs_share("main");
3583     gv = gv_fetchpvs("main::", GV_ADD|GV_NOTQUAL, SVt_PVHV);
3584     /* If we hadn't caused another reference to "main" to be in the shared
3585        string table above, then it would be worth reordering these two,
3586        because otherwise all we do is delete "main" from it as a consequence
3587        of the SvREFCNT_dec, only to add it again with hv_name_set */
3588     SvREFCNT_dec(GvHV(gv));
3589     hv_name_set(PL_defstash, "main", 4, 0);
3590     GvHV(gv) = MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash));
3591     SvREADONLY_on(gv);
3592     PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpvs("INC", GV_ADD|GV_NOTQUAL,
3593                                              SVt_PVAV)));
3594     SvREFCNT_inc_simple_void(PL_incgv); /* Don't allow it to be freed */
3595     GvMULTI_on(PL_incgv);
3596     PL_hintgv = gv_fetchpvs("\010", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^H */
3597     GvMULTI_on(PL_hintgv);
3598     PL_defgv = gv_fetchpvs("_", GV_ADD|GV_NOTQUAL, SVt_PVAV);
3599     SvREFCNT_inc_simple_void(PL_defgv);
3600     PL_errgv = gv_HVadd(gv_fetchpvs("@", GV_ADD|GV_NOTQUAL, SVt_PV));
3601     SvREFCNT_inc_simple_void(PL_errgv);
3602     GvMULTI_on(PL_errgv);
3603     PL_replgv = gv_fetchpvs("\022", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^R */
3604     GvMULTI_on(PL_replgv);
3605     (void)Perl_form(aTHX_ "%240s","");  /* Preallocate temp - for immediate signals. */
3606 #ifdef PERL_DONT_CREATE_GVSV
3607     gv_SVadd(PL_errgv);
3608 #endif
3609     sv_grow(ERRSV, 240);        /* Preallocate - for immediate signals. */
3610     CLEAR_ERRSV();
3611     SET_CURSTASH(PL_defstash);
3612     CopSTASH_set(&PL_compiling, PL_defstash);
3613     PL_debstash = GvHV(gv_fetchpvs("DB::", GV_ADDMULTI, SVt_PVHV));
3614     PL_globalstash = GvHV(gv_fetchpvs("CORE::GLOBAL::", GV_ADDMULTI,
3615                                       SVt_PVHV));
3616     /* We must init $/ before switches are processed. */
3617     sv_setpvs(get_sv("/", GV_ADD), "\n");
3618 }
3619
3620 STATIC PerlIO *
3621 S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript)
3622 {
3623     int fdscript = -1;
3624     PerlIO *rsfp = NULL;
3625     dVAR;
3626
3627     PERL_ARGS_ASSERT_OPEN_SCRIPT;
3628
3629     if (PL_e_script) {
3630         PL_origfilename = savepvs("-e");
3631     }
3632     else {
3633         /* if find_script() returns, it returns a malloc()-ed value */
3634         scriptname = PL_origfilename = find_script(scriptname, dosearch, NULL, 1);
3635
3636         if (strnEQ(scriptname, "/dev/fd/", 8) && isDIGIT(scriptname[8]) ) {
3637             const char *s = scriptname + 8;
3638             fdscript = atoi(s);
3639             while (isDIGIT(*s))
3640                 s++;
3641             if (*s) {
3642                 /* PSz 18 Feb 04
3643                  * Tell apart "normal" usage of fdscript, e.g.
3644                  * with bash on FreeBSD:
3645                  *   perl <( echo '#!perl -DA'; echo 'print "$0\n"')
3646                  * from usage in suidperl.
3647                  * Does any "normal" usage leave garbage after the number???
3648                  * Is it a mistake to use a similar /dev/fd/ construct for
3649                  * suidperl?
3650                  */
3651                 *suidscript = TRUE;
3652                 /* PSz 20 Feb 04  
3653                  * Be supersafe and do some sanity-checks.
3654                  * Still, can we be sure we got the right thing?
3655                  */
3656                 if (*s != '/') {
3657                     Perl_croak(aTHX_ "Wrong syntax (suid) fd script name \"%s\"\n", s);
3658                 }
3659                 if (! *(s+1)) {
3660                     Perl_croak(aTHX_ "Missing (suid) fd script name\n");
3661                 }
3662                 scriptname = savepv(s + 1);
3663                 Safefree(PL_origfilename);
3664                 PL_origfilename = (char *)scriptname;
3665             }
3666         }
3667     }
3668
3669     CopFILE_free(PL_curcop);
3670     CopFILE_set(PL_curcop, PL_origfilename);
3671     if (*PL_origfilename == '-' && PL_origfilename[1] == '\0')
3672         scriptname = (char *)"";
3673     if (fdscript >= 0) {
3674         rsfp = PerlIO_fdopen(fdscript,PERL_SCRIPT_MODE);
3675 #       if defined(HAS_FCNTL) && defined(F_SETFD)
3676             if (rsfp)
3677                 /* ensure close-on-exec */
3678                 fcntl(PerlIO_fileno(rsfp),F_SETFD,1);
3679 #       endif
3680     }
3681     else if (!*scriptname) {
3682         forbid_setid(0, *suidscript);
3683         return NULL;
3684     }
3685     else {
3686 #ifdef FAKE_BIT_BUCKET
3687         /* This hack allows one not to have /dev/null (or BIT_BUCKET as it
3688          * is called) and still have the "-e" work.  (Believe it or not,
3689          * a /dev/null is required for the "-e" to work because source
3690          * filter magic is used to implement it. ) This is *not* a general
3691          * replacement for a /dev/null.  What we do here is create a temp
3692          * file (an empty file), open up that as the script, and then
3693          * immediately close and unlink it.  Close enough for jazz. */ 
3694 #define FAKE_BIT_BUCKET_PREFIX "/tmp/perlnull-"
3695 #define FAKE_BIT_BUCKET_SUFFIX "XXXXXXXX"
3696 #define FAKE_BIT_BUCKET_TEMPLATE FAKE_BIT_BUCKET_PREFIX FAKE_BIT_BUCKET_SUFFIX
3697         char tmpname[sizeof(FAKE_BIT_BUCKET_TEMPLATE)] = {
3698             FAKE_BIT_BUCKET_TEMPLATE
3699         };
3700         const char * const err = "Failed to create a fake bit bucket";
3701         if (strEQ(scriptname, BIT_BUCKET)) {
3702 #ifdef HAS_MKSTEMP /* Hopefully mkstemp() is safe here. */
3703             int tmpfd = mkstemp(tmpname);
3704             if (tmpfd > -1) {
3705                 scriptname = tmpname;
3706                 close(tmpfd);
3707             } else
3708                 Perl_croak(aTHX_ err);
3709 #else
3710 #  ifdef HAS_MKTEMP
3711             scriptname = mktemp(tmpname);
3712             if (!scriptname)
3713                 Perl_croak(aTHX_ err);
3714 #  endif
3715 #endif
3716         }
3717 #endif
3718         rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE);
3719 #ifdef FAKE_BIT_BUCKET
3720         if (memEQ(scriptname, FAKE_BIT_BUCKET_PREFIX,
3721                   sizeof(FAKE_BIT_BUCKET_PREFIX) - 1)
3722             && strlen(scriptname) == sizeof(tmpname) - 1) {
3723             unlink(scriptname);
3724         }
3725         scriptname = BIT_BUCKET;
3726 #endif
3727 #       if defined(HAS_FCNTL) && defined(F_SETFD)
3728             if (rsfp)
3729                 /* ensure close-on-exec */
3730                 fcntl(PerlIO_fileno(rsfp),F_SETFD,1);
3731 #       endif
3732     }
3733     if (!rsfp) {
3734         /* PSz 16 Sep 03  Keep neat error message */
3735         if (PL_e_script)
3736             Perl_croak(aTHX_ "Can't open "BIT_BUCKET": %s\n", Strerror(errno));
3737         else
3738             Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n",
3739                     CopFILE(PL_curcop), Strerror(errno));
3740     }
3741     return rsfp;
3742 }
3743
3744 /* Mention
3745  * I_SYSSTATVFS HAS_FSTATVFS
3746  * I_SYSMOUNT
3747  * I_STATFS     HAS_FSTATFS     HAS_GETFSSTAT
3748  * I_MNTENT     HAS_GETMNTENT   HAS_HASMNTOPT
3749  * here so that metaconfig picks them up. */
3750
3751
3752 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
3753 /* Don't even need this function.  */
3754 #else
3755 STATIC void
3756 S_validate_suid(pTHX_ PerlIO *rsfp)
3757 {
3758     const UV  my_uid = PerlProc_getuid();
3759     const UV my_euid = PerlProc_geteuid();
3760     const UV  my_gid = PerlProc_getgid();
3761     const UV my_egid = PerlProc_getegid();
3762
3763     PERL_ARGS_ASSERT_VALIDATE_SUID;
3764
3765     if (my_euid != my_uid || my_egid != my_gid) {       /* (suidperl doesn't exist, in fact) */
3766         dVAR;
3767
3768         PerlLIO_fstat(PerlIO_fileno(rsfp),&PL_statbuf); /* may be either wrapped or real suid */
3769         if ((my_euid != my_uid && my_euid == PL_statbuf.st_uid && PL_statbuf.st_mode & S_ISUID)
3770             ||
3771             (my_egid != my_gid && my_egid == PL_statbuf.st_gid && PL_statbuf.st_mode & S_ISGID)
3772            )
3773             if (!PL_do_undump)
3774                 Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\
3775 FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n");
3776         /* not set-id, must be wrapped */
3777     }
3778 }
3779 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
3780
3781 STATIC void
3782 S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp)
3783 {
3784     dVAR;
3785     const char *s;
3786     register const char *s2;
3787
3788     PERL_ARGS_ASSERT_FIND_BEGINNING;
3789
3790     /* skip forward in input to the real script? */
3791
3792     do {
3793         if ((s = sv_gets(linestr_sv, rsfp, 0)) == NULL)
3794             Perl_croak(aTHX_ "No Perl script found in input\n");
3795         s2 = s;
3796     } while (!(*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL")))));
3797     PerlIO_ungetc(rsfp, '\n');          /* to keep line count right */
3798     while (*s && !(isSPACE (*s) || *s == '#')) s++;
3799     s2 = s;
3800     while (*s == ' ' || *s == '\t') s++;
3801     if (*s++ == '-') {
3802         while (isDIGIT(s2[-1]) || s2[-1] == '-' || s2[-1] == '.'
3803                || s2[-1] == '_') s2--;
3804         if (strnEQ(s2-4,"perl",4))
3805             while ((s = moreswitches(s)))
3806                 ;
3807     }
3808 }
3809
3810
3811 STATIC void
3812 S_init_ids(pTHX)
3813 {
3814     dVAR;
3815     const UV my_uid = PerlProc_getuid();
3816     const UV my_euid = PerlProc_geteuid();
3817     const UV my_gid = PerlProc_getgid();
3818     const UV my_egid = PerlProc_getegid();
3819
3820     /* Should not happen: */
3821     CHECK_MALLOC_TAINT(my_uid && (my_euid != my_uid || my_egid != my_gid));
3822     PL_tainting |= (my_uid && (my_euid != my_uid || my_egid != my_gid));
3823     /* BUG */
3824     /* PSz 27 Feb 04
3825      * Should go by suidscript, not uid!=euid: why disallow
3826      * system("ls") in scripts run from setuid things?
3827      * Or, is this run before we check arguments and set suidscript?
3828      * What about SETUID_SCRIPTS_ARE_SECURE_NOW: could we use fdscript then?
3829      * (We never have suidscript, can we be sure to have fdscript?)
3830      * Or must then go by UID checks? See comments in forbid_setid also.
3831      */
3832 }
3833
3834 /* This is used very early in the lifetime of the program,
3835  * before even the options are parsed, so PL_tainting has
3836  * not been initialized properly.  */
3837 bool
3838 Perl_doing_taint(int argc, char *argv[], char *envp[])
3839 {
3840 #ifndef PERL_IMPLICIT_SYS
3841     /* If we have PERL_IMPLICIT_SYS we can't call getuid() et alia
3842      * before we have an interpreter-- and the whole point of this
3843      * function is to be called at such an early stage.  If you are on
3844      * a system with PERL_IMPLICIT_SYS but you do have a concept of
3845      * "tainted because running with altered effective ids', you'll
3846      * have to add your own checks somewhere in here.  The two most
3847      * known samples of 'implicitness' are Win32 and NetWare, neither
3848      * of which has much of concept of 'uids'. */
3849     int uid  = PerlProc_getuid();
3850     int euid = PerlProc_geteuid();
3851     int gid  = PerlProc_getgid();
3852     int egid = PerlProc_getegid();
3853     (void)envp;
3854
3855 #ifdef VMS
3856     uid  |=  gid << 16;
3857     euid |= egid << 16;
3858 #endif
3859     if (uid && (euid != uid || egid != gid))
3860         return 1;
3861 #endif /* !PERL_IMPLICIT_SYS */
3862     /* This is a really primitive check; environment gets ignored only
3863      * if -T are the first chars together; otherwise one gets
3864      *  "Too late" message. */
3865     if ( argc > 1 && argv[1][0] == '-'
3866          && (argv[1][1] == 't' || argv[1][1] == 'T') )
3867         return 1;
3868     return 0;
3869 }
3870
3871 /* Passing the flag as a single char rather than a string is a slight space
3872    optimisation.  The only message that isn't /^-.$/ is
3873    "program input from stdin", which is substituted in place of '\0', which
3874    could never be a command line flag.  */
3875 STATIC void
3876 S_forbid_setid(pTHX_ const char flag, const bool suidscript) /* g */
3877 {
3878     dVAR;
3879     char string[3] = "-x";
3880     const char *message = "program input from stdin";
3881
3882     if (flag) {
3883         string[1] = flag;
3884         message = string;
3885     }
3886
3887 #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW
3888     if (PerlProc_getuid() != PerlProc_geteuid())
3889         Perl_croak(aTHX_ "No %s allowed while running setuid", message);
3890     if (PerlProc_getgid() != PerlProc_getegid())
3891         Perl_croak(aTHX_ "No %s allowed while running setgid", message);
3892 #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */
3893     if (suidscript)
3894         Perl_croak(aTHX_ "No %s allowed with (suid) fdscript", message);
3895 }
3896
3897 void
3898 Perl_init_dbargs(pTHX)
3899 {
3900     AV *const args = PL_dbargs = GvAV(gv_AVadd((gv_fetchpvs("DB::args",
3901                                                             GV_ADDMULTI,
3902                                                             SVt_PVAV))));
3903
3904     if (AvREAL(args)) {
3905         /* Someone has already created it.
3906            It might have entries, and if we just turn off AvREAL(), they will
3907            "leak" until global destruction.  */
3908         av_clear(args);
3909         if (SvTIED_mg((const SV *)args, PERL_MAGIC_tied))
3910             Perl_croak(aTHX_ "Cannot set tied @DB::args");
3911     }
3912     AvREIFY_only(PL_dbargs);
3913 }
3914
3915 void
3916 Perl_init_debugger(pTHX)
3917 {
3918     dVAR;
3919     HV * const ostash = PL_curstash;
3920
3921     PL_curstash = (HV *)SvREFCNT_inc_simple(PL_debstash);
3922
3923     Perl_init_dbargs(aTHX);
3924     PL_DBgv = gv_fetchpvs("DB::DB", GV_ADDMULTI, SVt_PVGV);
3925     PL_DBline = gv_fetchpvs("DB::dbline", GV_ADDMULTI, SVt_PVAV);
3926     PL_DBsub = gv_HVadd(gv_fetchpvs("DB::sub", GV_ADDMULTI, SVt_PVHV));
3927     PL_DBsingle = GvSV((gv_fetchpvs("DB::single", GV_ADDMULTI, SVt_PV)));
3928     if (!SvIOK(PL_DBsingle))
3929         sv_setiv(PL_DBsingle, 0);
3930     PL_DBtrace = GvSV((gv_fetchpvs("DB::trace", GV_ADDMULTI, SVt_PV)));
3931     if (!SvIOK(PL_DBtrace))
3932         sv_setiv(PL_DBtrace, 0);
3933     PL_DBsignal = GvSV((gv_fetchpvs("DB::signal", GV_ADDMULTI, SVt_PV)));
3934     if (!SvIOK(PL_DBsignal))
3935         sv_setiv(PL_DBsignal, 0);
3936     SvREFCNT_dec(PL_curstash);
3937     PL_curstash = ostash;
3938 }
3939
3940 #ifndef STRESS_REALLOC
3941 #define REASONABLE(size) (size)
3942 #else
3943 #define REASONABLE(size) (1) /* unreasonable */
3944 #endif
3945
3946 void
3947 Perl_init_stacks(pTHX)
3948 {
3949     dVAR;
3950     /* start with 128-item stack and 8K cxstack */
3951     PL_curstackinfo = new_stackinfo(REASONABLE(128),
3952                                  REASONABLE(8192/sizeof(PERL_CONTEXT) - 1));
3953     PL_curstackinfo->si_type = PERLSI_MAIN;
3954     PL_curstack = PL_curstackinfo->si_stack;
3955     PL_mainstack = PL_curstack;         /* remember in case we switch stacks */
3956
3957     PL_stack_base = AvARRAY(PL_curstack);
3958     PL_stack_sp = PL_stack_base;
3959     PL_stack_max = PL_stack_base + AvMAX(PL_curstack);
3960
3961     Newx(PL_tmps_stack,REASONABLE(128),SV*);
3962     PL_tmps_floor = -1;
3963     PL_tmps_ix = -1;
3964     PL_tmps_max = REASONABLE(128);
3965
3966     Newx(PL_markstack,REASONABLE(32),I32);
3967     PL_markstack_ptr = PL_markstack;
3968     PL_markstack_max = PL_markstack + REASONABLE(32);
3969
3970     SET_MARK_OFFSET;
3971
3972     Newx(PL_scopestack,REASONABLE(32),I32);
3973 #ifdef DEBUGGING
3974     Newx(PL_scopestack_name,REASONABLE(32),const char*);
3975 #endif
3976     PL_scopestack_ix = 0;
3977     PL_scopestack_max = REASONABLE(32);
3978
3979     Newx(PL_savestack,REASONABLE(128),ANY);
3980     PL_savestack_ix = 0;
3981     PL_savestack_max = REASONABLE(128);
3982 }
3983
3984 #undef REASONABLE
3985
3986 STATIC void
3987 S_nuke_stacks(pTHX)
3988 {
3989     dVAR;
3990     while (PL_curstackinfo->si_next)
3991         PL_curstackinfo = PL_curstackinfo->si_next;
3992     while (PL_curstackinfo) {
3993         PERL_SI *p = PL_curstackinfo->si_prev;
3994         /* curstackinfo->si_stack got nuked by sv_free_arenas() */
3995         Safefree(PL_curstackinfo->si_cxstack);
3996         Safefree(PL_curstackinfo);
3997         PL_curstackinfo = p;
3998     }
3999     Safefree(PL_tmps_stack);
4000     Safefree(PL_markstack);
4001     Safefree(PL_scopestack);
4002 #ifdef DEBUGGING
4003     Safefree(PL_scopestack_name);
4004 #endif
4005     Safefree(PL_savestack);
4006 }
4007
4008 void
4009 Perl_populate_isa(pTHX_ const char *name, STRLEN len, ...)
4010 {
4011     GV *const gv = gv_fetchpvn(name, len, GV_ADD | GV_ADDMULTI, SVt_PVAV);
4012     AV *const isa = GvAVn(gv);
4013     va_list args;
4014
4015     PERL_ARGS_ASSERT_POPULATE_ISA;
4016
4017     if(AvFILLp(isa) != -1)
4018         return;
4019
4020     /* NOTE: No support for tied ISA */
4021
4022     va_start(args, len);
4023     do {
4024         const char *const parent = va_arg(args, const char*);
4025         size_t parent_len;
4026
4027         if (!parent)
4028             break;
4029         parent_len = va_arg(args, size_t);
4030
4031         /* Arguments are supplied with a trailing ::  */
4032         assert(parent_len > 2);
4033         assert(parent[parent_len - 1] == ':');
4034         assert(parent[parent_len - 2] == ':');
4035         av_push(isa, newSVpvn(parent, parent_len - 2));
4036         (void) gv_fetchpvn(parent, parent_len, GV_ADD, SVt_PVGV);
4037     } while (1);
4038     va_end(args);
4039 }
4040
4041
4042 STATIC void
4043 S_init_predump_symbols(pTHX)
4044 {
4045     dVAR;
4046     GV *tmpgv;
4047     IO *io;
4048
4049     sv_setpvs(get_sv("\"", GV_ADD), " ");
4050     PL_ofsgv = (GV*)SvREFCNT_inc(gv_fetchpvs(",", GV_ADD|GV_NOTQUAL, SVt_PV));
4051
4052
4053     /* Historically, PVIOs were blessed into IO::Handle, unless
4054        FileHandle was loaded, in which case they were blessed into
4055        that. Action at a distance.
4056        However, if we simply bless into IO::Handle, we break code
4057        that assumes that PVIOs will have (among others) a seek
4058        method. IO::File inherits from IO::Handle and IO::Seekable,
4059        and provides the needed methods. But if we simply bless into
4060        it, then we break code that assumed that by loading
4061        IO::Handle, *it* would work.
4062        So a compromise is to set up the correct @IO::File::ISA,
4063        so that code that does C<use IO::Handle>; will still work.
4064     */
4065                    
4066     Perl_populate_isa(aTHX_ STR_WITH_LEN("IO::File::ISA"),
4067                       STR_WITH_LEN("IO::Handle::"),
4068                       STR_WITH_LEN("IO::Seekable::"),
4069                       STR_WITH_LEN("Exporter::"),
4070                       NULL);
4071
4072     PL_stdingv = gv_fetchpvs("STDIN", GV_ADD|GV_NOTQUAL, SVt_PVIO);
4073     GvMULTI_on(PL_stdingv);
4074     io = GvIOp(PL_stdingv);
4075     IoTYPE(io) = IoTYPE_RDONLY;
4076     IoIFP(io) = PerlIO_stdin();
4077     tmpgv = gv_fetchpvs("stdin", GV_ADD|GV_NOTQUAL, SVt_PV);
4078     GvMULTI_on(tmpgv);
4079     GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io));
4080
4081     tmpgv = gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO);
4082     GvMULTI_on(tmpgv);
4083     io = GvIOp(tmpgv);
4084     IoTYPE(io) = IoTYPE_WRONLY;
4085     IoOFP(io) = IoIFP(io) = PerlIO_stdout();
4086     setdefout(tmpgv);
4087     tmpgv = gv_fetchpvs("stdout", GV_ADD|GV_NOTQUAL, SVt_PV);
4088     GvMULTI_on(tmpgv);
4089     GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io));
4090
4091     PL_stderrgv = gv_fetchpvs("STDERR", GV_ADD|GV_NOTQUAL, SVt_PVIO);
4092     GvMULTI_on(PL_stderrgv);
4093     io = GvIOp(PL_stderrgv);
4094     IoTYPE(io) = IoTYPE_WRONLY;
4095     IoOFP(io) = IoIFP(io) = PerlIO_stderr();
4096     tmpgv = gv_fetchpvs("stderr", GV_ADD|GV_NOTQUAL, SVt_PV);
4097     GvMULTI_on(tmpgv);
4098     GvIOp(tmpgv) = MUTABLE_IO(SvREFCNT_inc_simple(io));
4099
4100     PL_statname = newSVpvs("");         /* last filename we did stat on */
4101 }
4102
4103 void
4104 Perl_init_argv_symbols(pTHX_ register int argc, register char **argv)
4105 {
4106     dVAR;
4107
4108     PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS;
4109
4110     argc--,argv++;      /* skip name of script */
4111     if (PL_doswitches) {
4112         for (; argc > 0 && **argv == '-'; argc--,argv++) {
4113             char *s;
4114             if (!argv[0][1])
4115                 break;
4116             if (argv[0][1] == '-' && !argv[0][2]) {
4117                 argc--,argv++;
4118                 break;
4119             }
4120             if ((s = strchr(argv[0], '='))) {
4121                 const char *const start_name = argv[0] + 1;
4122                 sv_setpv(GvSV(gv_fetchpvn_flags(start_name, s - start_name,
4123                                                 TRUE, SVt_PV)), s + 1);
4124             }
4125             else
4126                 sv_setiv(GvSV(gv_fetchpv(argv[0]+1, GV_ADD, SVt_PV)),1);
4127         }
4128     }
4129     if ((PL_argvgv = gv_fetchpvs("ARGV", GV_ADD|GV_NOTQUAL, SVt_PVAV))) {
4130         GvMULTI_on(PL_argvgv);
4131         (void)gv_AVadd(PL_argvgv);
4132         av_clear(GvAVn(PL_argvgv));
4133         for (; argc > 0; argc--,argv++) {
4134             SV * const sv = newSVpv(argv[0],0);
4135             av_push(GvAVn(PL_argvgv),sv);
4136             if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) {
4137                  if (PL_unicode & PERL_UNICODE_ARGV_FLAG)
4138                       SvUTF8_on(sv);
4139             }
4140             if (PL_unicode & PERL_UNICODE_WIDESYSCALLS_FLAG) /* Sarathy? */
4141                  (void)sv_utf8_decode(sv);
4142         }
4143     }
4144 }
4145
4146 STATIC void
4147 S_init_postdump_symbols(pTHX_ register int argc, register char **argv, register char **env)
4148 {
4149     dVAR;
4150     GV* tmpgv;
4151
4152     PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS;
4153
4154     PL_toptarget = newSV_type(SVt_PVFM);
4155     sv_setpvs(PL_toptarget, "");
4156     PL_bodytarget = newSV_type(SVt_PVFM);
4157     sv_setpvs(PL_bodytarget, "");
4158     PL_formtarget = PL_bodytarget;
4159
4160     TAINT;
4161
4162     init_argv_symbols(argc,argv);
4163
4164     if ((tmpgv = gv_fetchpvs("0", GV_ADD|GV_NOTQUAL, SVt_PV))) {
4165         sv_setpv(GvSV(tmpgv),PL_origfilename);
4166     }
4167     if ((PL_envgv = gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV))) {
4168         HV *hv;
4169         bool env_is_not_environ;
4170         GvMULTI_on(PL_envgv);
4171         hv = GvHVn(PL_envgv);
4172         hv_magic(hv, NULL, PERL_MAGIC_env);
4173 #ifndef PERL_MICRO
4174 #ifdef USE_ENVIRON_ARRAY
4175         /* Note that if the supplied env parameter is actually a copy
4176            of the global environ then it may now point to free'd memory
4177            if the environment has been modified since. To avoid this
4178            problem we treat env==NULL as meaning 'use the default'
4179         */
4180         if (!env)
4181             env = environ;
4182         env_is_not_environ = env != environ;
4183         if (env_is_not_environ
4184 #  ifdef USE_ITHREADS
4185             && PL_curinterp == aTHX
4186 #  endif
4187            )
4188         {
4189             environ[0] = NULL;
4190         }
4191         if (env) {
4192           char *s, *old_var;
4193           SV *sv;
4194           for (; *env; env++) {
4195             old_var = *env;
4196
4197             if (!(s = strchr(old_var,'=')) || s == old_var)
4198                 continue;
4199
4200 #if defined(MSDOS) && !defined(DJGPP)
4201             *s = '\0';
4202             (void)strupr(old_var);
4203             *s = '=';
4204 #endif
4205             sv = newSVpv(s+1, 0);
4206             (void)hv_store(hv, old_var, s - old_var, sv, 0);
4207             if (env_is_not_environ)
4208                 mg_set(sv);
4209           }
4210       }
4211 #endif /* USE_ENVIRON_ARRAY */
4212 #endif /* !PERL_MICRO */
4213     }
4214     TAINT_NOT;
4215
4216     /* touch @F array to prevent spurious warnings 20020415 MJD */
4217     if (PL_minus_a) {
4218       (void) get_av("main::F", GV_ADD | GV_ADDMULTI);
4219     }
4220 }
4221
4222 STATIC void
4223 S_init_perllib(pTHX)
4224 {
4225     dVAR;
4226 #ifndef VMS
4227     const char *perl5lib = NULL;
4228 #endif
4229     const char *s;
4230 #if defined(WIN32) && !defined(PERL_IS_MINIPERL)
4231     STRLEN len;
4232 #endif
4233
4234     if (!PL_tainting) {
4235 #ifndef VMS
4236         perl5lib = PerlEnv_getenv("PERL5LIB");
4237 /*
4238  * It isn't possible to delete an environment variable with
4239  * PERL_USE_SAFE_PUTENV set unless unsetenv() is also available, so in that
4240  * case we treat PERL5LIB as undefined if it has a zero-length value.
4241  */
4242 #if defined(PERL_USE_SAFE_PUTENV) && ! defined(HAS_UNSETENV)
4243         if (perl5lib && *perl5lib != '\0')
4244 #else
4245         if (perl5lib)
4246 #endif
4247             incpush_use_sep(perl5lib, 0, INCPUSH_ADD_SUB_DIRS);
4248         else {
4249             s = PerlEnv_getenv("PERLLIB");
4250             if (s)
4251                 incpush_use_sep(s, 0, 0);
4252         }
4253 #else /* VMS */
4254         /* Treat PERL5?LIB as a possible search list logical name -- the
4255          * "natural" VMS idiom for a Unix path string.  We allow each
4256          * element to be a set of |-separated directories for compatibility.
4257          */
4258         char buf[256];
4259         int idx = 0;
4260         if (my_trnlnm("PERL5LIB",buf,0))
4261             do {
4262                 incpush_use_sep(buf, 0, INCPUSH_ADD_SUB_DIRS);
4263             } while (my_trnlnm("PERL5LIB",buf,++idx));
4264         else {
4265             while (my_trnlnm("PERLLIB",buf,idx++))
4266                 incpush_use_sep(buf, 0, 0);
4267         }
4268 #endif /* VMS */
4269     }
4270
4271 #ifndef PERL_IS_MINIPERL
4272     /* miniperl gets just -I..., the split of $ENV{PERL5LIB}, and "." in @INC
4273        (and not the architecture specific directories from $ENV{PERL5LIB}) */
4274
4275 /* Use the ~-expanded versions of APPLLIB (undocumented),
4276     SITEARCH, SITELIB, VENDORARCH, VENDORLIB, ARCHLIB and PRIVLIB
4277 */
4278 #ifdef APPLLIB_EXP
4279     S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP),
4280                       INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
4281 #endif
4282
4283 #ifdef SITEARCH_EXP
4284     /* sitearch is always relative to sitelib on Windows for
4285      * DLL-based path intuition to work correctly */
4286 #  if !defined(WIN32)
4287         S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITEARCH_EXP),
4288                           INCPUSH_CAN_RELOCATE);
4289 #  endif
4290 #endif
4291
4292 #ifdef SITELIB_EXP
4293 #  if defined(WIN32)
4294     /* this picks up sitearch as well */
4295         s = win32_get_sitelib(PERL_FS_VERSION, &len);
4296         if (s)
4297             incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
4298 #  else
4299         S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_EXP), INCPUSH_CAN_RELOCATE);
4300 #  endif
4301 #endif
4302
4303 #ifdef PERL_VENDORARCH_EXP
4304     /* vendorarch is always relative to vendorlib on Windows for
4305      * DLL-based path intuition to work correctly */
4306 #  if !defined(WIN32)
4307     S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORARCH_EXP),
4308                       INCPUSH_CAN_RELOCATE);
4309 #  endif
4310 #endif
4311
4312 #ifdef PERL_VENDORLIB_EXP
4313 #  if defined(WIN32)
4314     /* this picks up vendorarch as well */
4315         s = win32_get_vendorlib(PERL_FS_VERSION, &len);
4316         if (s)
4317             incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
4318 #  else
4319         S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_EXP),
4320                           INCPUSH_CAN_RELOCATE);
4321 #  endif
4322 #endif
4323
4324 #ifdef ARCHLIB_EXP
4325     S_incpush_use_sep(aTHX_ STR_WITH_LEN(ARCHLIB_EXP), INCPUSH_CAN_RELOCATE);
4326 #endif
4327
4328 #ifndef PRIVLIB_EXP
4329 #  define PRIVLIB_EXP "/usr/local/lib/perl5:/usr/local/lib/perl"
4330 #endif
4331
4332 #if defined(WIN32)
4333     s = win32_get_privlib(PERL_FS_VERSION, &len);
4334     if (s)
4335         incpush_use_sep(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_CAN_RELOCATE);
4336 #else
4337 #  ifdef NETWARE
4338     S_incpush_use_sep(aTHX_ PRIVLIB_EXP, 0, INCPUSH_CAN_RELOCATE);
4339 #  else
4340     S_incpush_use_sep(aTHX_ STR_WITH_LEN(PRIVLIB_EXP), INCPUSH_CAN_RELOCATE);
4341 #  endif
4342 #endif
4343
4344 #ifdef PERL_OTHERLIBDIRS
4345     S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS),
4346                       INCPUSH_ADD_VERSIONED_SUB_DIRS|INCPUSH_NOT_BASEDIR
4347                       |INCPUSH_CAN_RELOCATE);
4348 #endif
4349
4350     if (!PL_tainting) {
4351 #ifndef VMS
4352 /*
4353  * It isn't possible to delete an environment variable with
4354  * PERL_USE_SAFE_PUTENV set unless unsetenv() is also available, so in that
4355  * case we treat PERL5LIB as undefined if it has a zero-length value.
4356  */
4357 #if defined(PERL_USE_SAFE_PUTENV) && ! defined(HAS_UNSETENV)
4358         if (perl5lib && *perl5lib != '\0')
4359 #else
4360         if (perl5lib)
4361 #endif
4362             incpush_use_sep(perl5lib, 0,
4363                             INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR);
4364 #else /* VMS */
4365         /* Treat PERL5?LIB as a possible search list logical name -- the
4366          * "natural" VMS idiom for a Unix path string.  We allow each
4367          * element to be a set of |-separated directories for compatibility.
4368          */
4369         char buf[256];
4370         int idx = 0;
4371         if (my_trnlnm("PERL5LIB",buf,0))
4372             do {
4373                 incpush_use_sep(buf, 0,
4374                                 INCPUSH_ADD_OLD_VERS|INCPUSH_NOT_BASEDIR);
4375             } while (my_trnlnm("PERL5LIB",buf,++idx));
4376 #endif /* VMS */
4377     }
4378
4379 /* Use the ~-expanded versions of APPLLIB (undocumented),
4380     SITELIB and VENDORLIB for older versions
4381 */
4382 #ifdef APPLLIB_EXP
4383     S_incpush_use_sep(aTHX_ STR_WITH_LEN(APPLLIB_EXP), INCPUSH_ADD_OLD_VERS
4384                       |INCPUSH_NOT_BASEDIR|INCPUSH_CAN_RELOCATE);
4385 #endif
4386
4387 #if defined(SITELIB_STEM) && defined(PERL_INC_VERSION_LIST)
4388     /* Search for version-specific dirs below here */
4389     S_incpush_use_sep(aTHX_ STR_WITH_LEN(SITELIB_STEM),
4390                       INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
4391 #endif
4392
4393
4394 #if defined(PERL_VENDORLIB_STEM) && defined(PERL_INC_VERSION_LIST)
4395     /* Search for version-specific dirs below here */
4396     S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_VENDORLIB_STEM),
4397                       INCPUSH_ADD_OLD_VERS|INCPUSH_CAN_RELOCATE);
4398 #endif
4399
4400 #ifdef PERL_OTHERLIBDIRS
4401     S_incpush_use_sep(aTHX_ STR_WITH_LEN(PERL_OTHERLIBDIRS),
4402                       INCPUSH_ADD_OLD_VERS|INCPUSH_ADD_ARCHONLY_SUB_DIRS
4403                       |INCPUSH_CAN_RELOCATE);
4404 #endif
4405 #endif /* !PERL_IS_MINIPERL */
4406
4407     if (!PL_tainting)
4408         S_incpush(aTHX_ STR_WITH_LEN("."), 0);
4409 }
4410
4411 #if defined(DOSISH) || defined(EPOC) || defined(__SYMBIAN32__)
4412 #    define PERLLIB_SEP ';'
4413 #else
4414 #  if defined(VMS)
4415 #    define PERLLIB_SEP '|'
4416 #  else
4417 #    define PERLLIB_SEP ':'
4418 #  endif
4419 #endif
4420 #ifndef PERLLIB_MANGLE
4421 #  define PERLLIB_MANGLE(s,n) (s)
4422 #endif
4423
4424 #ifndef PERL_IS_MINIPERL
4425 /* Push a directory onto @INC if it exists.
4426    Generate a new SV if we do this, to save needing to copy the SV we push
4427    onto @INC  */
4428 STATIC SV *
4429 S_incpush_if_exists(pTHX_ AV *const av, SV *dir, SV *const stem)
4430 {
4431     dVAR;
4432     Stat_t tmpstatbuf;
4433
4434     PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS;
4435
4436     if (PerlLIO_stat(SvPVX_const(dir), &tmpstatbuf) >= 0 &&
4437         S_ISDIR(tmpstatbuf.st_mode)) {
4438         av_push(av, dir);
4439         dir = newSVsv(stem);
4440     } else {
4441         /* Truncate dir back to stem.  */
4442         SvCUR_set(dir, SvCUR(stem));
4443     }
4444     return dir;
4445 }
4446 #endif
4447
4448 STATIC SV *
4449 S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags)
4450 {
4451     const U8 canrelocate = (U8)flags & INCPUSH_CAN_RELOCATE;
4452     SV *libdir;
4453
4454     PERL_ARGS_ASSERT_MAYBERELOCATE;
4455     assert(len > 0);
4456
4457         if (len) {
4458             /* I am not convinced that this is valid when PERLLIB_MANGLE is
4459                defined to so something (in os2/os2.c), but the code has been
4460                this way, ignoring any possible changed of length, since
4461                760ac839baf413929cd31cc32ffd6dba6b781a81 (5.003_02) so I'll leave
4462                it be.  */
4463             libdir = newSVpvn(PERLLIB_MANGLE(dir, len), len);
4464         } else {
4465             libdir = newSVpv(PERLLIB_MANGLE(dir, 0), 0);
4466         }
4467
4468 #ifdef VMS
4469     {
4470         char *unix;
4471
4472         if ((unix = tounixspec_ts(SvPV(libdir,len),NULL)) != NULL) {
4473             len = strlen(unix);
4474             while (unix[len-1] == '/') len--;  /* Cosmetic */
4475             sv_usepvn(libdir,unix,len);
4476         }
4477         else
4478             PerlIO_printf(Perl_error_log,
4479                           "Failed to unixify @INC element \"%s\"\n",
4480                           SvPV_nolen_const(libdir));
4481     }
4482 #endif
4483
4484         /* Do the if() outside the #ifdef to avoid warnings about an unused
4485            parameter.  */
4486         if (canrelocate) {
4487 #ifdef PERL_RELOCATABLE_INC
4488         /*
4489          * Relocatable include entries are marked with a leading .../
4490          *
4491          * The algorithm is
4492          * 0: Remove that leading ".../"
4493          * 1: Remove trailing executable name (anything after the last '/')
4494          *    from the perl path to give a perl prefix
4495          * Then
4496          * While the @INC element starts "../" and the prefix ends with a real
4497          * directory (ie not . or ..) chop that real directory off the prefix
4498          * and the leading "../" from the @INC element. ie a logical "../"
4499          * cleanup
4500          * Finally concatenate the prefix and the remainder of the @INC element
4501          * The intent is that /usr/local/bin/perl and .../../lib/perl5
4502          * generates /usr/local/lib/perl5
4503          */
4504             const char *libpath = SvPVX(libdir);
4505             STRLEN libpath_len = SvCUR(libdir);
4506             if (libpath_len >= 4 && memEQ (libpath, ".../", 4)) {
4507                 /* Game on!  */
4508                 SV * const caret_X = get_sv("\030", 0);
4509                 /* Going to use the SV just as a scratch buffer holding a C
4510                    string:  */
4511                 SV *prefix_sv;
4512                 char *prefix;
4513                 char *lastslash;
4514
4515                 /* $^X is *the* source of taint if tainting is on, hence
4516                    SvPOK() won't be true.  */
4517                 assert(caret_X);
4518                 assert(SvPOKp(caret_X));
4519                 prefix_sv = newSVpvn_flags(SvPVX(caret_X), SvCUR(caret_X),
4520                                            SvUTF8(caret_X));
4521                 /* Firstly take off the leading .../
4522                    If all else fail we'll do the paths relative to the current
4523                    directory.  */
4524                 sv_chop(libdir, libpath + 4);
4525                 /* Don't use SvPV as we're intentionally bypassing taining,
4526                    mortal copies that the mg_get of tainting creates, and
4527                    corruption that seems to come via the save stack.
4528                    I guess that the save stack isn't correctly set up yet.  */
4529                 libpath = SvPVX(libdir);
4530                 libpath_len = SvCUR(libdir);
4531
4532                 /* This would work more efficiently with memrchr, but as it's
4533                    only a GNU extension we'd need to probe for it and
4534                    implement our own. Not hard, but maybe not worth it?  */
4535
4536                 prefix = SvPVX(prefix_sv);
4537                 lastslash = strrchr(prefix, '/');
4538
4539                 /* First time in with the *lastslash = '\0' we just wipe off
4540                    the trailing /perl from (say) /usr/foo/bin/perl
4541                 */
4542                 if (lastslash) {
4543                     SV *tempsv;
4544                     while ((*lastslash = '\0'), /* Do that, come what may.  */
4545                            (libpath_len >= 3 && memEQ(libpath, "../", 3)
4546                             && (lastslash = strrchr(prefix, '/')))) {
4547                         if (lastslash[1] == '\0'
4548                             || (lastslash[1] == '.'
4549                                 && (lastslash[2] == '/' /* ends "/."  */
4550                                     || (lastslash[2] == '/'
4551                                         && lastslash[3] == '/' /* or "/.."  */
4552                                         )))) {
4553                             /* Prefix ends "/" or "/." or "/..", any of which
4554                                are fishy, so don't do any more logical cleanup.
4555                             */
4556                             break;
4557                         }
4558                         /* Remove leading "../" from path  */
4559                         libpath += 3;
4560                         libpath_len -= 3;
4561                         /* Next iteration round the loop removes the last
4562                            directory name from prefix by writing a '\0' in
4563                            the while clause.  */
4564                     }
4565                     /* prefix has been terminated with a '\0' to the correct
4566                        length. libpath points somewhere into the libdir SV.
4567                        We need to join the 2 with '/' and drop the result into
4568                        libdir.  */
4569                     tempsv = Perl_newSVpvf(aTHX_ "%s/%s", prefix, libpath);
4570                     SvREFCNT_dec(libdir);
4571                     /* And this is the new libdir.  */
4572                     libdir = tempsv;
4573                     if (PL_tainting &&
4574                         (PerlProc_getuid() != PerlProc_geteuid() ||
4575                          PerlProc_getgid() != PerlProc_getegid())) {
4576                         /* Need to taint relocated paths if running set ID  */
4577                         SvTAINTED_on(libdir);
4578                     }
4579                 }
4580                 SvREFCNT_dec(prefix_sv);
4581             }
4582 #endif
4583         }
4584     return libdir;
4585 }
4586
4587 STATIC void
4588 S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags)
4589 {
4590     dVAR;
4591 #ifndef PERL_IS_MINIPERL
4592     const U8 using_sub_dirs
4593         = (U8)flags & (INCPUSH_ADD_VERSIONED_SUB_DIRS
4594                        |INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_ADD_OLD_VERS);
4595     const U8 add_versioned_sub_dirs
4596         = (U8)flags & INCPUSH_ADD_VERSIONED_SUB_DIRS;
4597     const U8 add_archonly_sub_dirs
4598         = (U8)flags & INCPUSH_ADD_ARCHONLY_SUB_DIRS;
4599 #ifdef PERL_INC_VERSION_LIST
4600     const U8 addoldvers  = (U8)flags & INCPUSH_ADD_OLD_VERS;
4601 #endif
4602 #endif
4603     const U8 unshift     = (U8)flags & INCPUSH_UNSHIFT;
4604     const U8 push_basedir = (flags & INCPUSH_NOT_BASEDIR) ? 0 : 1;
4605     AV *const inc = GvAVn(PL_incgv);
4606
4607     PERL_ARGS_ASSERT_INCPUSH;
4608     assert(len > 0);
4609
4610     /* Could remove this vestigial extra block, if we don't mind a lot of
4611        re-indenting diff noise.  */
4612     {
4613         SV *const libdir = mayberelocate(dir, len, flags);
4614         /* Change 20189146be79a0596543441fa369c6bf7f85103f, to fix RT#6665,
4615            arranged to unshift #! line -I onto the front of @INC. However,
4616            -I can add version and architecture specific libraries, and they
4617            need to go first. The old code assumed that it was always
4618            pushing. Hence to make it work, need to push the architecture
4619            (etc) libraries onto a temporary array, then "unshift" that onto
4620            the front of @INC.  */
4621 #ifndef PERL_IS_MINIPERL
4622         AV *const av = (using_sub_dirs) ? (unshift ? newAV() : inc) : NULL;
4623
4624         /*
4625          * BEFORE pushing libdir onto @INC we may first push version- and
4626          * archname-specific sub-directories.
4627          */
4628         if (using_sub_dirs) {
4629             SV *subdir = newSVsv(libdir);
4630 #ifdef PERL_INC_VERSION_LIST
4631             /* Configure terminates PERL_INC_VERSION_LIST with a NULL */
4632             const char * const incverlist[] = { PERL_INC_VERSION_LIST };
4633             const char * const *incver;
4634 #endif
4635
4636             if (add_versioned_sub_dirs) {
4637                 /* .../version/archname if -d .../version/archname */
4638                 sv_catpvs(subdir, "/" PERL_FS_VERSION "/" ARCHNAME);
4639                 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
4640
4641                 /* .../version if -d .../version */
4642                 sv_catpvs(subdir, "/" PERL_FS_VERSION);
4643                 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
4644             }
4645
4646 #ifdef PERL_INC_VERSION_LIST
4647             if (addoldvers) {
4648                 for (incver = incverlist; *incver; incver++) {
4649                     /* .../xxx if -d .../xxx */
4650                     Perl_sv_catpvf(aTHX_ subdir, "/%s", *incver);
4651                     subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
4652                 }
4653             }
4654 #endif
4655
4656             if (add_archonly_sub_dirs) {
4657                 /* .../archname if -d .../archname */
4658                 sv_catpvs(subdir, "/" ARCHNAME);
4659                 subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir);
4660
4661             }
4662
4663             assert (SvREFCNT(subdir) == 1);
4664             SvREFCNT_dec(subdir);
4665         }
4666 #endif /* !PERL_IS_MINIPERL */
4667         /* finally add this lib directory at the end of @INC */
4668         if (unshift) {
4669 #ifdef PERL_IS_MINIPERL
4670             const U32 extra = 0;
4671 #else
4672             U32 extra = av_len(av) + 1;
4673 #endif
4674             av_unshift(inc, extra + push_basedir);
4675             if (push_basedir)
4676                 av_store(inc, extra, libdir);
4677 #ifndef PERL_IS_MINIPERL
4678             while (extra--) {
4679                 /* av owns a reference, av_store() expects to be donated a
4680                    reference, and av expects to be sane when it's cleared.
4681                    If I wanted to be naughty and wrong, I could peek inside the
4682                    implementation of av_clear(), realise that it uses
4683                    SvREFCNT_dec() too, so av's array could be a run of NULLs,
4684                    and so directly steal from it (with a memcpy() to inc, and
4685                    then memset() to NULL them out. But people copy code from the
4686                    core expecting it to be best practise, so let's use the API.
4687                    Although studious readers will note that I'm not checking any
4688                    return codes.  */
4689                 av_store(inc, extra, SvREFCNT_inc(*av_fetch(av, extra, FALSE)));
4690             }
4691             SvREFCNT_dec(av);
4692 #endif
4693         }
4694         else if (push_basedir) {
4695             av_push(inc, libdir);
4696         }
4697
4698         if (!push_basedir) {
4699             assert (SvREFCNT(libdir) == 1);
4700             SvREFCNT_dec(libdir);
4701         }
4702     }
4703 }
4704
4705 STATIC void
4706 S_incpush_use_sep(pTHX_ const char *p, STRLEN len, U32 flags)
4707 {
4708     const char *s;
4709     const char *end;
4710     /* This logic has been broken out from S_incpush(). It may be possible to
4711        simplify it.  */
4712
4713     PERL_ARGS_ASSERT_INCPUSH_USE_SEP;
4714
4715     /* perl compiled with -DPERL_RELOCATABLE_INCPUSH will ignore the len
4716      * argument to incpush_use_sep.  This allows creation of relocatable
4717      * Perl distributions that patch the binary at install time.  Those
4718      * distributions will have to provide their own relocation tools; this
4719      * is not a feature otherwise supported by core Perl.
4720      */
4721 #ifndef PERL_RELOCATABLE_INCPUSH
4722     if (!len)
4723 #endif
4724         len = strlen(p);
4725
4726     end = p + len;
4727
4728     /* Break at all separators */
4729     while ((s = (const char*)memchr(p, PERLLIB_SEP, end - p))) {
4730         if (s == p) {
4731             /* skip any consecutive separators */
4732
4733             /* Uncomment the next line for PATH semantics */
4734             /* But you'll need to write tests */
4735             /* av_push(GvAVn(PL_incgv), newSVpvs(".")); */
4736         } else {
4737             incpush(p, (STRLEN)(s - p), flags);
4738         }
4739         p = s + 1;
4740     }
4741     if (p != end)
4742         incpush(p, (STRLEN)(end - p), flags);
4743
4744 }
4745
4746 void
4747 Perl_call_list(pTHX_ I32 oldscope, AV *paramList)
4748 {
4749     dVAR;
4750     SV *atsv;
4751     volatile const line_t oldline = PL_curcop ? CopLINE(PL_curcop) : 0;
4752     CV *cv;
4753     STRLEN len;
4754     int ret;
4755     dJMPENV;
4756
4757     PERL_ARGS_ASSERT_CALL_LIST;
4758
4759     while (av_len(paramList) >= 0) {
4760         cv = MUTABLE_CV(av_shift(paramList));
4761         if (PL_savebegin) {
4762             if (paramList == PL_beginav) {
4763                 /* save PL_beginav for compiler */
4764                 Perl_av_create_and_push(aTHX_ &PL_beginav_save, MUTABLE_SV(cv));
4765             }
4766             else if (paramList == PL_checkav) {
4767                 /* save PL_checkav for compiler */
4768                 Perl_av_create_and_push(aTHX_ &PL_checkav_save, MUTABLE_SV(cv));
4769             }
4770             else if (paramList == PL_unitcheckav) {
4771                 /* save PL_unitcheckav for compiler */
4772                 Perl_av_create_and_push(aTHX_ &PL_unitcheckav_save, MUTABLE_SV(cv));
4773             }
4774         } else {
4775             if (!PL_madskills)
4776                 SAVEFREESV(cv);
4777         }
4778         JMPENV_PUSH(ret);
4779         switch (ret) {
4780         case 0:
4781 #ifdef PERL_MAD
4782             if (PL_madskills)
4783                 PL_madskills |= 16384;
4784 #endif
4785             CALL_LIST_BODY(cv);
4786 #ifdef PERL_MAD
4787             if (PL_madskills)
4788                 PL_madskills &= ~16384;
4789 #endif
4790             atsv = ERRSV;
4791             (void)SvPV_const(atsv, len);
4792             if (len) {
4793                 PL_curcop = &PL_compiling;
4794                 CopLINE_set(PL_curcop, oldline);
4795                 if (paramList == PL_beginav)
4796                     sv_catpvs(atsv, "BEGIN failed--compilation aborted");
4797                 else
4798                     Perl_sv_catpvf(aTHX_ atsv,
4799                                    "%s failed--call queue aborted",
4800                                    paramList == PL_checkav ? "CHECK"
4801                                    : paramList == PL_initav ? "INIT"
4802                                    : paramList == PL_unitcheckav ? "UNITCHECK"
4803                                    : "END");
4804                 while (PL_scopestack_ix > oldscope)
4805                     LEAVE;
4806                 JMPENV_POP;
4807                 Perl_croak(aTHX_ "%"SVf"", SVfARG(atsv));
4808             }
4809             break;
4810         case 1:
4811             STATUS_ALL_FAILURE;
4812             /* FALL THROUGH */
4813         case 2:
4814             /* my_exit() was called */
4815             while (PL_scopestack_ix > oldscope)
4816                 LEAVE;
4817             FREETMPS;
4818             SET_CURSTASH(PL_defstash);
4819             PL_curcop = &PL_compiling;
4820             CopLINE_set(PL_curcop, oldline);
4821             JMPENV_POP;
4822             my_exit_jump();
4823             /* NOTREACHED */
4824         case 3:
4825             if (PL_restartop) {
4826                 PL_curcop = &PL_compiling;
4827                 CopLINE_set(PL_curcop, oldline);
4828                 JMPENV_JUMP(3);
4829             }
4830             PerlIO_printf(Perl_error_log, "panic: restartop in call_list\n");
4831             FREETMPS;
4832             break;
4833         }
4834         JMPENV_POP;
4835     }
4836 }
4837
4838 void
4839 Perl_my_exit(pTHX_ U32 status)
4840 {
4841     dVAR;
4842     switch (status) {
4843     case 0:
4844         STATUS_ALL_SUCCESS;
4845         break;
4846     case 1:
4847         STATUS_ALL_FAILURE;
4848         break;
4849     default:
4850         STATUS_EXIT_SET(status);
4851         break;
4852     }
4853     my_exit_jump();
4854 }
4855
4856 void
4857 Perl_my_failure_exit(pTHX)
4858 {
4859     dVAR;
4860 #ifdef VMS
4861      /* We have been called to fall on our sword.  The desired exit code
4862       * should be already set in STATUS_UNIX, but could be shifted over
4863       * by 8 bits.  STATUS_UNIX_EXIT_SET will handle the cases where a
4864       * that code is set.
4865       *
4866       * If an error code has not been set, then force the issue.
4867       */
4868     if (MY_POSIX_EXIT) {
4869
4870         /* According to the die_exit.t tests, if errno is non-zero */
4871         /* It should be used for the error status. */
4872
4873         if (errno == EVMSERR) {
4874             STATUS_NATIVE = vaxc$errno;
4875         } else {
4876
4877             /* According to die_exit.t tests, if the child_exit code is */
4878             /* also zero, then we need to exit with a code of 255 */
4879             if ((errno != 0) && (errno < 256))
4880                 STATUS_UNIX_EXIT_SET(errno);
4881             else if (STATUS_UNIX < 255) {
4882                 STATUS_UNIX_EXIT_SET(255);
4883             }
4884
4885         }
4886
4887         /* The exit code could have been set by $? or vmsish which
4888          * means that it may not have fatal set.  So convert
4889          * success/warning codes to fatal with out changing
4890          * the POSIX status code.  The severity makes VMS native
4891          * status handling work, while UNIX mode programs use the
4892          * the POSIX exit codes.
4893          */
4894          if ((STATUS_NATIVE & (STS$K_SEVERE|STS$K_ERROR)) == 0) {
4895             STATUS_NATIVE &= STS$M_COND_ID;
4896             STATUS_NATIVE |= STS$K_ERROR | STS$M_INHIB_MSG;
4897          }
4898     }
4899     else {
4900         /* Traditionally Perl on VMS always expects a Fatal Error. */
4901         if (vaxc$errno & 1) {
4902
4903             /* So force success status to failure */
4904             if (STATUS_NATIVE & 1)
4905                 STATUS_ALL_FAILURE;
4906         }
4907         else {
4908             if (!vaxc$errno) {
4909                 STATUS_UNIX = EINTR; /* In case something cares */
4910                 STATUS_ALL_FAILURE;
4911             }
4912             else {
4913                 int severity;
4914                 STATUS_NATIVE = vaxc$errno; /* Should already be this */
4915
4916                 /* Encode the severity code */
4917                 severity = STATUS_NATIVE & STS$M_SEVERITY;
4918                 STATUS_UNIX = (severity ? severity : 1) << 8;
4919
4920                 /* Perl expects this to be a fatal error */
4921                 if (severity != STS$K_SEVERE)
4922                     STATUS_ALL_FAILURE;
4923             }
4924         }
4925     }
4926
4927 #else
4928     int exitstatus;
4929     if (errno & 255)
4930         STATUS_UNIX_SET(errno);
4931     else {
4932         exitstatus = STATUS_UNIX >> 8;
4933         if (exitstatus & 255)
4934             STATUS_UNIX_SET(exitstatus);
4935         else
4936             STATUS_UNIX_SET(255);
4937     }
4938 #endif
4939     my_exit_jump();
4940 }
4941
4942 STATIC void
4943 S_my_exit_jump(pTHX)
4944 {
4945     dVAR;
4946
4947     if (PL_e_script) {
4948         SvREFCNT_dec(PL_e_script);
4949         PL_e_script = NULL;
4950     }
4951
4952     POPSTACK_TO(PL_mainstack);
4953     dounwind(-1);
4954     LEAVE_SCOPE(0);
4955
4956     JMPENV_JUMP(2);
4957 }
4958
4959 static I32
4960 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen)
4961 {
4962     dVAR;
4963     const char * const p  = SvPVX_const(PL_e_script);
4964     const char *nl = strchr(p, '\n');
4965
4966     PERL_UNUSED_ARG(idx);
4967     PERL_UNUSED_ARG(maxlen);
4968
4969     nl = (nl) ? nl+1 : SvEND(PL_e_script);
4970     if (nl-p == 0) {
4971         filter_del(read_e_script);
4972         return 0;
4973     }
4974     sv_catpvn(buf_sv, p, nl-p);
4975     sv_chop(PL_e_script, nl);
4976     return 1;
4977 }
4978
4979 /*
4980  * Local variables:
4981  * c-indentation-style: bsd
4982  * c-basic-offset: 4
4983  * indent-tabs-mode: t
4984  * End:
4985  *
4986  * ex: set ts=8 sts=4 sw=4 noet:
4987  */