File Coverage

miniperlmain.c
Criterion Covered Total %
statement 20 22 90.9
branch 6 10 60.0
condition n/a
subroutine n/a
total 26 32 81.2


line stmt bran cond sub time code
1           /* -*- buffer-read-only: t -*-
2           !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3           This file is built by regen/miniperlmain.pl and ExtUtils::Miniperl.
4           Any changes made here will be lost!
5           */
6            
7           /* miniperlmain.c
8           *
9           * Copyright (C) 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
10           * 2004, 2005, 2006, 2007, by Larry Wall and others
11           *
12           * You may distribute under the terms of either the GNU General Public
13           * License or the Artistic License, as specified in the README file.
14           *
15           */
16            
17           /*
18           * The Road goes ever on and on
19           * Down from the door where it began.
20           *
21           * [Bilbo on p.35 of _The Lord of the Rings_, I/i: "A Long-Expected Party"]
22           * [Frodo on p.73 of _The Lord of the Rings_, I/iii: "Three Is Company"]
23           */
24            
25           /* This file contains the main() function for the perl interpreter.
26           * Note that miniperlmain.c contains main() for the 'miniperl' binary,
27           * while perlmain.c contains main() for the 'perl' binary.
28           *
29           * Miniperl is like perl except that it does not support dynamic loading,
30           * and in fact is used to build the dynamic modules needed for the 'real'
31           * perl executable.
32           */
33            
34           #ifdef OEMVS
35           #ifdef MYMALLOC
36           /* sbrk is limited to first heap segment so make it big */
37           #pragma runopts(HEAP(8M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON))
38           #else
39           #pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON))
40           #endif
41           #endif
42            
43           #define PERL_IN_MINIPERLMAIN_C
44           #include "EXTERN.h"
45           #include "perl.h"
46           #include "XSUB.h"
47            
48           static void xs_init (pTHX);
49           static PerlInterpreter *my_perl;
50            
51           #if defined(PERL_GLOBAL_STRUCT_PRIVATE)
52           /* The static struct perl_vars* may seem counterproductive since the
53           * whole idea PERL_GLOBAL_STRUCT_PRIVATE was to avoid statics, but note
54           * that this static is not in the shared perl library, the globals PL_Vars
55           * and PL_VarsPtr will stay away. */
56           static struct perl_vars* my_plvarsp;
57           struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; }
58           #endif
59            
60           #ifdef NO_ENV_ARRAY_IN_MAIN
61           extern char **environ;
62           int
63           main(int argc, char **argv)
64           #else
65           int
66 4034         main(int argc, char **argv, char **env)
67           #endif
68           {
69           int exitstatus, i;
70           #ifdef PERL_GLOBAL_STRUCT
71           struct perl_vars *my_vars = init_global_struct();
72           # ifdef PERL_GLOBAL_STRUCT_PRIVATE
73           my_plvarsp = my_vars;
74           # endif
75           #endif /* PERL_GLOBAL_STRUCT */
76           #ifndef NO_ENV_ARRAY_IN_MAIN
77           PERL_UNUSED_ARG(env);
78           #endif
79           #ifndef PERL_USE_SAFE_PUTENV
80 4034         PL_use_safe_putenv = FALSE;
81           #endif /* PERL_USE_SAFE_PUTENV */
82            
83           /* if user wants control of gprof profiling off by default */
84           /* noop unless Configure is given -Accflags=-DPERL_GPROF_CONTROL */
85           PERL_GPROF_MONCONTROL(0);
86            
87           #ifdef NO_ENV_ARRAY_IN_MAIN
88           PERL_SYS_INIT3(&argc,&argv,&environ);
89           #else
90 4034         PERL_SYS_INIT3(&argc,&argv,&env);
91           #endif
92            
93           #if defined(USE_ITHREADS)
94           /* XXX Ideally, this should really be happening in perl_alloc() or
95           * perl_construct() to keep libperl.a transparently fork()-safe.
96           * It is currently done here only because Apache/mod_perl have
97           * problems due to lack of a call to cancel pthread_atfork()
98           * handlers when shared objects that contain the handlers may
99           * be dlclose()d. This forces applications that embed perl to
100           * call PTHREAD_ATFORK() explicitly, but if and only if it hasn't
101           * been called at least once before in the current process.
102           * --GSAR 2001-07-20 */
103           PTHREAD_ATFORK(Perl_atfork_lock,
104           Perl_atfork_unlock,
105           Perl_atfork_unlock);
106           #endif
107            
108 4034 50       if (!PL_do_undump) {
109 4034         my_perl = perl_alloc();
110 4034 50       if (!my_perl)
111 0         exit(1);
112 4034         perl_construct(my_perl);
113 4034         PL_perl_destruct_level = 0;
114           }
115 4034         PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
116 4034         exitstatus = perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
117 4034 50       if (!exitstatus)
118 4034         perl_run(my_perl);
119            
120           #ifndef PERL_MICRO
121           /* Unregister our signal handler before destroying my_perl */
122 276329 100       for (i = 1; PL_sig_name[i]; i++) {
123 274312 50       if (rsignal_state(PL_sig_num[i]) == (Sighandler_t) PL_csighandlerp) {
124 0         rsignal(PL_sig_num[i], (Sighandler_t) SIG_DFL);
125           }
126           }
127           #endif
128            
129 4034         exitstatus = perl_destruct(my_perl);
130            
131 4034         perl_free(my_perl);
132            
133           #if defined(USE_ENVIRON_ARRAY) && defined(PERL_TRACK_MEMPOOL) && !defined(NO_ENV_ARRAY_IN_MAIN)
134           /*
135           * The old environment may have been freed by perl_free()
136           * when PERL_TRACK_MEMPOOL is defined, but without having
137           * been restored by perl_destruct() before (this is only
138           * done if destruct_level > 0).
139           *
140           * It is important to have a valid environment for atexit()
141           * routines that are eventually called.
142           */
143           environ = env;
144           #endif
145            
146 4034         PERL_SYS_TERM();
147            
148           #ifdef PERL_GLOBAL_STRUCT
149           free_global_struct(my_vars);
150           # ifdef PERL_GLOBAL_STRUCT_PRIVATE
151           my_plvarsp = NULL;
152           /* Remember, functions registered with atexit() can run after this point,
153           and may access "global" variables, and hence end up calling
154           Perl_GetVarsPrivate() */
155           #endif
156           #endif /* PERL_GLOBAL_STRUCT */
157            
158 4034         exit(exitstatus);
159           return exitstatus;
160           }
161            
162           /* Register any extra external extensions */
163            
164            
165           static void
166 4034         xs_init(pTHX)
167           {
168           dXSUB_SYS;
169           PERL_UNUSED_CONTEXT;
170 4034         }
171            
172           /* ex: set ro: */