OpenCoverage

shell.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/shell.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* shell.c -- GNU's idea of the POSIX shell specification. */-
2-
3/* Copyright (C) 1987-2017 Free Software Foundation, Inc.-
4-
5 This file is part of GNU Bash, the Bourne Again SHell.-
6-
7 Bash is free software: you can redistribute it and/or modify-
8 it under the terms of the GNU General Public License as published by-
9 the Free Software Foundation, either version 3 of the License, or-
10 (at your option) any later version.-
11-
12 Bash is distributed in the hope that it will be useful,-
13 but WITHOUT ANY WARRANTY; without even the implied warranty of-
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
15 GNU General Public License for more details.-
16-
17 You should have received a copy of the GNU General Public License-
18 along with Bash. If not, see <http://www.gnu.org/licenses/>.-
19*/-
20-
21/*-
22 Birthdate:-
23 Sunday, January 10th, 1988.-
24 Initial author: Brian Fox-
25*/-
26#define INSTALL_DEBUG_MODE-
27-
28#include "config.h"-
29-
30#include "bashtypes.h"-
31#if !defined (_MINIX) && defined (HAVE_SYS_FILE_H)-
32# include <sys/file.h>-
33#endif-
34#include "posixstat.h"-
35#include "posixtime.h"-
36#include "bashansi.h"-
37#include <stdio.h>-
38#include <signal.h>-
39#include <errno.h>-
40#include "filecntl.h"-
41#if defined (HAVE_PWD_H)-
42# include <pwd.h>-
43#endif-
44-
45#if defined (HAVE_UNISTD_H)-
46# include <unistd.h>-
47#endif-
48-
49#include "bashintl.h"-
50-
51#define NEED_SH_SETLINEBUF_DECL /* used in externs.h */-
52-
53#include "shell.h"-
54#include "parser.h"-
55#include "flags.h"-
56#include "trap.h"-
57#include "mailcheck.h"-
58#include "builtins.h"-
59#include "builtins/common.h"-
60-
61#if defined (JOB_CONTROL)-
62#include "jobs.h"-
63#else-
64extern int running_in_background;-
65extern int initialize_job_control __P((int));-
66extern int get_tty_state __P((void));-
67#endif /* JOB_CONTROL */-
68-
69#include "input.h"-
70#include "execute_cmd.h"-
71#include "findcmd.h"-
72-
73#if defined (USING_BASH_MALLOC) && defined (DEBUG) && !defined (DISABLE_MALLOC_WRAPPERS)-
74# include <malloc/shmalloc.h>-
75#endif-
76-
77#if defined (HISTORY)-
78# include "bashhist.h"-
79# include <readline/history.h>-
80#endif-
81-
82#if defined (READLINE)-
83# include <readline/readline.h>-
84# include "bashline.h"-
85#endif-
86-
87#include <tilde/tilde.h>-
88#include <glob/strmatch.h>-
89-
90#if defined (__OPENNT)-
91# include <opennt/opennt.h>-
92#endif-
93-
94#if !defined (HAVE_GETPW_DECLS)-
95extern struct passwd *getpwuid ();-
96#endif /* !HAVE_GETPW_DECLS */-
97-
98#if !defined (errno)-
99extern int errno;-
100#endif-
101-
102#if defined (NO_MAIN_ENV_ARG)-
103extern char **environ; /* used if no third argument to main() */-
104#endif-
105-
106extern int gnu_error_format;-
107-
108/* Non-zero means that this shell has already been run; i.e. you should-
109 call shell_reinitialize () if you need to start afresh. */-
110int shell_initialized = 0;-
111int bash_argv_initialized = 0;-
112-
113COMMAND *global_command = (COMMAND *)NULL;-
114-
115/* Information about the current user. */-
116struct user_info current_user =-
117{-
118 (uid_t)-1, (uid_t)-1, (gid_t)-1, (gid_t)-1,-
119 (char *)NULL, (char *)NULL, (char *)NULL-
120};-
121-
122/* The current host's name. */-
123char *current_host_name = (char *)NULL;-
124-
125/* Non-zero means that this shell is a login shell.-
126 Specifically:-
127 0 = not login shell.-
128 1 = login shell from getty (or equivalent fake out)-
129 -1 = login shell from "--login" (or -l) flag.-
130 -2 = both from getty, and from flag.-
131 */-
132int login_shell = 0;-
133-
134/* Non-zero means that at this moment, the shell is interactive. In-
135 general, this means that the shell is at this moment reading input-
136 from the keyboard. */-
137int interactive = 0;-
138-
139/* Non-zero means that the shell was started as an interactive shell. */-
140int interactive_shell = 0;-
141-
142/* Non-zero means to send a SIGHUP to all jobs when an interactive login-
143 shell exits. */-
144int hup_on_exit = 0;-
145-
146/* Non-zero means to list status of running and stopped jobs at shell exit */-
147int check_jobs_at_exit = 0;-
148-
149/* Non-zero means to change to a directory name supplied as a command name */-
150int autocd = 0;-
151-
152/* Tells what state the shell was in when it started:-
153 0 = non-interactive shell script-
154 1 = interactive-
155 2 = -c command-
156 3 = wordexp evaluation-
157 This is a superset of the information provided by interactive_shell.-
158*/-
159int startup_state = 0;-
160int reading_shell_script = 0;-
161-
162/* Special debugging helper. */-
163int debugging_login_shell = 0;-
164-
165/* The environment that the shell passes to other commands. */-
166char **shell_environment;-
167-
168/* Non-zero when we are executing a top-level command. */-
169int executing = 0;-
170-
171/* The number of commands executed so far. */-
172int current_command_number = 1;-
173-
174/* Non-zero is the recursion depth for commands. */-
175int indirection_level = 0;-
176-
177/* The name of this shell, as taken from argv[0]. */-
178char *shell_name = (char *)NULL;-
179-
180/* time in seconds when the shell was started */-
181time_t shell_start_time;-
182-
183/* Are we running in an emacs shell window? */-
184int running_under_emacs;-
185-
186/* Do we have /dev/fd? */-
187#ifdef HAVE_DEV_FD-
188int have_devfd = HAVE_DEV_FD;-
189#else-
190int have_devfd = 0;-
191#endif-
192-
193/* The name of the .(shell)rc file. */-
194static char *bashrc_file = DEFAULT_BASHRC;-
195-
196/* Non-zero means to act more like the Bourne shell on startup. */-
197static int act_like_sh;-
198-
199/* Non-zero if this shell is being run by `su'. */-
200static int su_shell;-
201-
202/* Non-zero if we have already expanded and sourced $ENV. */-
203static int sourced_env;-
204-
205/* Is this shell running setuid? */-
206static int running_setuid;-
207-
208/* Values for the long-winded argument names. */-
209static int debugging; /* Do debugging things. */-
210static int no_rc; /* Don't execute ~/.bashrc */-
211static int no_profile; /* Don't execute .profile */-
212static int do_version; /* Display interesting version info. */-
213static int make_login_shell; /* Make this shell be a `-bash' shell. */-
214static int want_initial_help; /* --help option */-
215-
216int debugging_mode = 0; /* In debugging mode with --debugger */-
217#if defined (READLINE)-
218int no_line_editing = 0; /* non-zero -> don't do fancy line editing. */-
219#else-
220int no_line_editing = 1; /* can't have line editing without readline */-
221#endif-
222int dump_translatable_strings; /* Dump strings in $"...", don't execute. */-
223int dump_po_strings; /* Dump strings in $"..." in po format */-
224int wordexp_only = 0; /* Do word expansion only */-
225int protected_mode = 0; /* No command substitution with --wordexp */-
226-
227int pretty_print_mode = 0; /* pretty-print a shell script */-
228-
229#if defined (STRICT_POSIX)-
230int posixly_correct = 1; /* Non-zero means posix.2 superset. */-
231#else-
232int posixly_correct = 0; /* Non-zero means posix.2 superset. */-
233#endif-
234-
235/* Some long-winded argument names. These are obviously new. */-
236#define Int 1-
237#define Charp 2-
238static const struct {-
239 const char *name;-
240 int type;-
241 int *int_value;-
242 char **char_value;-
243} long_args[] = {-
244 { "debug", Int, &debugging, (char **)0x0 },-
245#if defined (DEBUGGER)-
246 { "debugger", Int, &debugging_mode, (char **)0x0 },-
247#endif-
248 { "dump-po-strings", Int, &dump_po_strings, (char **)0x0 },-
249 { "dump-strings", Int, &dump_translatable_strings, (char **)0x0 },-
250 { "help", Int, &want_initial_help, (char **)0x0 },-
251 { "init-file", Charp, (int *)0x0, &bashrc_file },-
252 { "login", Int, &make_login_shell, (char **)0x0 },-
253 { "noediting", Int, &no_line_editing, (char **)0x0 },-
254 { "noprofile", Int, &no_profile, (char **)0x0 },-
255 { "norc", Int, &no_rc, (char **)0x0 },-
256 { "posix", Int, &posixly_correct, (char **)0x0 },-
257 { "pretty-print", Int, &pretty_print_mode, (char **)0x0 },-
258#if defined (WORDEXP_OPTION)-
259 { "protected", Int, &protected_mode, (char **)0x0 },-
260#endif-
261 { "rcfile", Charp, (int *)0x0, &bashrc_file },-
262#if defined (RESTRICTED_SHELL)-
263 { "restricted", Int, &restricted, (char **)0x0 },-
264#endif-
265 { "verbose", Int, &verbose_flag, (char **)0x0 },-
266 { "version", Int, &do_version, (char **)0x0 },-
267#if defined (WORDEXP_OPTION)-
268 { "wordexp", Int, &wordexp_only, (char **)0x0 },-
269#endif-
270 { (char *)0x0, Int, (int *)0x0, (char **)0x0 }-
271};-
272-
273/* These are extern so execute_simple_command can set them, and then-
274 longjmp back to main to execute a shell script, instead of calling-
275 main () again and resulting in indefinite, possibly fatal, stack-
276 growth. */-
277procenv_t subshell_top_level;-
278int subshell_argc;-
279char **subshell_argv;-
280char **subshell_envp;-
281-
282char *exec_argv0;-
283-
284#if defined (BUFFERED_INPUT)-
285/* The file descriptor from which the shell is reading input. */-
286int default_buffered_input = -1;-
287#endif-
288-
289/* The following two variables are not static so they can show up in $-. */-
290int read_from_stdin; /* -s flag supplied */-
291int want_pending_command; /* -c flag supplied */-
292-
293/* This variable is not static so it can be bound to $BASH_EXECUTION_STRING */-
294char *command_execution_string; /* argument to -c option */-
295char *shell_script_filename; /* shell script */-
296-
297int malloc_trace_at_exit = 0;-
298-
299static int shell_reinitialized = 0;-
300-
301static FILE *default_input;-
302-
303static STRING_INT_ALIST *shopt_alist;-
304static int shopt_ind = 0, shopt_len = 0;-
305-
306static int parse_long_options __P((char **, int, int));-
307static int parse_shell_options __P((char **, int, int));-
308static int bind_args __P((char **, int, int, int));-
309-
310static void start_debugger __P((void));-
311-
312static void add_shopt_to_alist __P((char *, int));-
313static void run_shopt_alist __P((void));-
314-
315static void execute_env_file __P((char *));-
316static void run_startup_files __P((void));-
317static int open_shell_script __P((char *));-
318static void set_bash_input __P((void));-
319static int run_one_command __P((char *));-
320#if defined (WORDEXP_OPTION)-
321static int run_wordexp __P((char *));-
322#endif-
323-
324static int uidget __P((void));-
325-
326static void init_interactive __P((void));-
327static void init_noninteractive __P((void));-
328static void init_interactive_script __P((void));-
329-
330static void set_shell_name __P((char *));-
331static void shell_initialize __P((void));-
332static void shell_reinitialize __P((void));-
333-
334static void show_shell_usage __P((FILE *, int));-
335-
336#ifdef __CYGWIN__-
337static void-
338_cygwin32_check_tmp ()-
339{-
340 struct stat sb;-
341-
342 if (stat ("/tmp", &sb) < 0)-
343 internal_warning (_("could not find /tmp, please create!"));-
344 else-
345 {-
346 if (S_ISDIR (sb.st_mode) == 0)-
347 internal_warning (_("/tmp must be a valid directory name"));-
348 }-
349}-
350#endif /* __CYGWIN__ */-
351-
352#if defined (NO_MAIN_ENV_ARG)-
353/* systems without third argument to main() */-
354int-
355main (argc, argv)-
356 int argc;-
357 char **argv;-
358#else /* !NO_MAIN_ENV_ARG */-
359int-
360main (argc, argv, env)-
361 int argc;-
362 char **argv, **env;-
363#endif /* !NO_MAIN_ENV_ARG */-
364{-
365 register int i;-
366 int code, old_errexit_flag;-
367#if defined (RESTRICTED_SHELL)-
368 int saverst;-
369#endif-
370 volatile int locally_skip_execution;-
371 volatile int arg_index, top_level_arg_index;-
372#ifdef __OPENNT-
373 char **env;-
374-
375 env = environ;-
376#endif /* __OPENNT */-
377-
378 USE_VAR(argc);-
379 USE_VAR(argv);-
380 USE_VAR(env);-
381 USE_VAR(code);-
382 USE_VAR(old_errexit_flag);-
383#if defined (RESTRICTED_SHELL)-
384 USE_VAR(saverst);-
385#endif-
386-
387 /* Catch early SIGINTs. */-
388 code = setjmp_nosigs (top_level);-
389 if (code)
codeDescription
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
390 exit (2);
never executed: exit (2);
0
391-
392 xtrace_init ();-
393-
394#if defined (USING_BASH_MALLOC) && defined (DEBUG) && !defined (DISABLE_MALLOC_WRAPPERS)-
395 malloc_set_register (1); /* XXX - change to 1 for malloc debugging */-
396#endif-
397-
398 check_dev_tty ();-
399-
400#ifdef __CYGWIN__-
401 _cygwin32_check_tmp ();-
402#endif /* __CYGWIN__ */-
403-
404 /* Wait forever if we are debugging a login shell. */-
405 while (debugging_login_shell) sleep (3);
never executed: sleep (3);
debugging_login_shellDescription
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
406-
407 set_default_locale ();-
408-
409 running_setuid = uidget ();-
410-
411 if (getenv ("POSIXLY_CORRECT") || getenv ("POSIX_PEDANTIC"))
getenv ("POSIXLY_CORRECT")Description
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
getenv ("POSIX_PEDANTIC")Description
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
412 posixly_correct = 1;
never executed: posixly_correct = 1;
0
413-
414#if defined (USE_GNU_MALLOC_LIBRARY)-
415 mcheck (programming_error, (void (*) ())0);-
416#endif /* USE_GNU_MALLOC_LIBRARY */-
417-
418 if (setjmp_sigs (subshell_top_level))
__sigsetjmp ( ...p_level) , 1 )Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
15-5432
419 {-
420 argc = subshell_argc;-
421 argv = subshell_argv;-
422 env = subshell_envp;-
423 sourced_env = 0;-
424 }
executed 15 times by 1 test: end of block
Executed by:
  • Self test
15
425-
426 shell_reinitialized = 0;-
427-
428 /* Initialize `local' variables for all `invocations' of main (). */-
429 arg_index = 1;-
430 if (arg_index > argc)
arg_index > argcDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
431 arg_index = argc;
never executed: arg_index = argc;
0
432 command_execution_string = shell_script_filename = (char *)NULL;-
433 want_pending_command = locally_skip_execution = read_from_stdin = 0;-
434 default_input = stdin;-
435#if defined (BUFFERED_INPUT)-
436 default_buffered_input = -1;-
437#endif-
438-
439 /* Fix for the `infinite process creation' bug when running shell scripts-
440 from startup files on System V. */-
441 login_shell = make_login_shell = 0;-
442-
443 /* If this shell has already been run, then reinitialize it to a-
444 vanilla state. */-
445 if (shell_initialized || shell_name)
shell_initializedDescription
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
shell_nameDescription
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
446 {-
447 /* Make sure that we do not infinitely recurse as a login shell. */-
448 if (*shell_name == '-')
*shell_name == '-'Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test
0-15
449 shell_name++;
never executed: shell_name++;
0
450-
451 shell_reinitialize ();-
452 if (setjmp_nosigs (top_level))
__sigsetjmp ( ...p_level) , 0 )Description
TRUEnever evaluated
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test
0-15
453 exit (2);
never executed: exit (2);
0
454 }
executed 15 times by 1 test: end of block
Executed by:
  • Self test
15
455-
456 shell_environment = env;-
457 set_shell_name (argv[0]);-
458 shell_start_time = NOW; /* NOW now defined in general.h */-
459-
460 /* Parse argument flags from the input line. */-
461-
462 /* Find full word arguments first. */-
463 arg_index = parse_long_options (argv, arg_index, argc);-
464 -
465 if (want_initial_help)
want_initial_helpDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
466 {-
467 show_shell_usage (stdout, 1);-
468 exit (EXECUTION_SUCCESS);
never executed: exit (0);
0
469 }-
470-
471 if (do_version)
do_versionDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
472 {-
473 show_shell_version (1);-
474 exit (EXECUTION_SUCCESS);
never executed: exit (0);
0
475 }-
476-
477 echo_input_at_read = verbose_flag; /* --verbose given */-
478-
479 /* All done with full word options; do standard shell option parsing.*/-
480 this_command_name = shell_name; /* for error reporting */-
481 arg_index = parse_shell_options (argv, arg_index, argc);-
482-
483 /* If user supplied the "--login" (or -l) flag, then set and invert-
484 LOGIN_SHELL. */-
485 if (make_login_shell)
make_login_shellDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
486 {-
487 login_shell++;-
488 login_shell = -login_shell;-
489 }
never executed: end of block
0
490-
491 set_login_shell ("login_shell", login_shell != 0);-
492-
493 if (dump_po_strings)
dump_po_stringsDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
494 dump_translatable_strings = 1;
never executed: dump_translatable_strings = 1;
0
495-
496 if (dump_translatable_strings)
dump_translatable_stringsDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
497 read_but_dont_execute = 1;
never executed: read_but_dont_execute = 1;
0
498-
499 if (running_setuid && privileged_mode == 0)
running_setuidDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
privileged_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-5447
500 disable_priv_mode ();
never executed: disable_priv_mode ();
0
501-
502 /* Need to get the argument to a -c option processed in the-
503 above loop. The next arg is a command to execute, and the-
504 following args are $0...$n respectively. */-
505 if (want_pending_command)
want_pending_commandDescription
TRUEevaluated 177 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5270 times by 1 test
Evaluated by:
  • Self test
177-5270
506 {-
507 command_execution_string = argv[arg_index];-
508 if (command_execution_string == 0)
command_execution_string == 0Description
TRUEnever evaluated
FALSEevaluated 177 times by 1 test
Evaluated by:
  • Self test
0-177
509 {-
510 report_error (_("%s: option requires an argument"), "-c");-
511 exit (EX_BADUSAGE);
never executed: exit (2);
0
512 }-
513 arg_index++;-
514 }
executed 177 times by 1 test: end of block
Executed by:
  • Self test
177
515 this_command_name = (char *)NULL;-
516-
517 /* First, let the outside world know about our interactive status.-
518 A shell is interactive if the `-i' flag was given, or if all of-
519 the following conditions are met:-
520 no -c command-
521 no arguments remaining or the -s flag given-
522 standard input is a terminal-
523 standard error is a terminal-
524 Refer to Posix.2, the description of the `sh' utility. */-
525-
526 if (forced_interactive || /* -i flag */
forced_interactiveDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
2-5445
527 (!command_execution_string && /* No -c command and ... */
!command_execution_stringDescription
TRUEevaluated 5268 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 177 times by 1 test
Evaluated by:
  • Self test
177-5268
528 wordexp_only == 0 && /* No --wordexp and ... */
wordexp_only == 0Description
TRUEevaluated 5268 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5268
529 ((arg_index == argc) || /* no remaining args or... */
(arg_index == argc)Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5263 times by 1 test
Evaluated by:
  • Self test
5-5263
530 read_from_stdin) && /* -s flag with args, and */
read_from_stdinDescription
TRUEnever evaluated
FALSEevaluated 5263 times by 1 test
Evaluated by:
  • Self test
0-5263
531 isatty (fileno (stdin)) && /* Input is a terminal and */
isatty (fileno ( stdin ))Description
TRUEnever evaluated
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
0-5
532 isatty (fileno (stderr)))) /* error output is a terminal. */
isatty (fileno ( stderr ))Description
TRUEnever evaluated
FALSEnever evaluated
0
533 init_interactive ();
executed 2 times by 1 test: init_interactive ();
Executed by:
  • Self test
2
534 else-
535 init_noninteractive ();
executed 5445 times by 1 test: init_noninteractive ();
Executed by:
  • Self test
5445
536-
537 /*-
538 * Some systems have the bad habit of starting login shells with lots of open-
539 * file descriptors. For instance, most systems that have picked up the-
540 * pre-4.0 Sun YP code leave a file descriptor open each time you call one-
541 * of the getpw* functions, and it's set to be open across execs. That-
542 * means one for login, one for xterm, one for shelltool, etc. There are-
543 * also systems that open persistent FDs to other agents or files as part-
544 * of process startup; these need to be set to be close-on-exec.-
545 */-
546 if (login_shell && interactive_shell)
login_shellDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5446 times by 1 test
Evaluated by:
  • Self test
interactive_shellDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
0-5446
547 {-
548 for (i = 3; i < 20; i++)
i < 20Description
TRUEnever evaluated
FALSEnever evaluated
0
549 SET_CLOSE_ON_EXEC (i);
never executed: (fcntl ((i), 2 , 1 ));
0
550 }
never executed: end of block
0
551-
552 /* If we're in a strict Posix.2 mode, turn on interactive comments,-
553 alias expansion in non-interactive shells, and other Posix.2 things. */-
554 if (posixly_correct)
posixly_correctDescription
TRUEevaluated 17 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5430 times by 1 test
Evaluated by:
  • Self test
17-5430
555 {-
556 bind_variable ("POSIXLY_CORRECT", "y", 0);-
557 sv_strict_posix ("POSIXLY_CORRECT");-
558 }
executed 17 times by 1 test: end of block
Executed by:
  • Self test
17
559-
560 /* Now we run the shopt_alist and process the options. */-
561 if (shopt_alist)
shopt_alistDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
562 run_shopt_alist ();
never executed: run_shopt_alist ();
0
563-
564 /* From here on in, the shell must be a normal functioning shell.-
565 Variables from the environment are expected to be set, etc. */-
566 shell_initialize ();-
567-
568 set_default_lang ();-
569 set_default_locale_vars ();-
570-
571 /*-
572 * M-x term -> TERM=eterm-color INSIDE_EMACS='251,term:0.96' (eterm)-
573 * M-x shell -> TERM='dumb' INSIDE_EMACS='25.1,comint' (no line editing)-
574 *-
575 * Older versions of Emacs may set EMACS to 't' or to something like-
576 * '22.1 (term:0.96)' instead of (or in addition to) setting INSIDE_EMACS.-
577 * They may set TERM to 'eterm' instead of 'eterm-color'. They may have-
578 * a now-obsolete command that sets neither EMACS nor INSIDE_EMACS:-
579 * M-x terminal -> TERM='emacs-em7955' (line editing)-
580 */-
581 if (interactive_shell)
interactive_shellDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
2-5445
582 {-
583 char *term, *emacs, *inside_emacs;-
584 int emacs_term, in_emacs;-
585-
586 term = get_string_value ("TERM");-
587 emacs = get_string_value ("EMACS");-
588 inside_emacs = get_string_value ("INSIDE_EMACS");-
589-
590 if (inside_emacs)
inside_emacsDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
591 {-
592 emacs_term = strstr (inside_emacs, ",term:") != 0;-
593 in_emacs = 1;-
594 }
never executed: end of block
0
595 else if (emacs)
emacsDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
596 {-
597 /* Infer whether we are in an older Emacs. */-
598 emacs_term = strstr (emacs, " (term:") != 0;-
599 in_emacs = emacs_term || STREQ (emacs, "t");
never executed: __result = (((const unsigned char *) (const char *) ( emacs ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "t" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
emacs_termDescription
TRUEnever evaluated
FALSEnever evaluated
(emacs)[0] == ("t")[0]Description
TRUEnever evaluated
FALSEnever evaluated
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
600 }
never executed: end of block
0
601 else-
602 in_emacs = emacs_term = 0;
executed 2 times by 1 test: in_emacs = emacs_term = 0;
Executed by:
  • Self test
2
603-
604 /* Not sure any emacs terminal emulator sets TERM=emacs any more */-
605 no_line_editing |= STREQ (term, "emacs");
never executed: __result = (((const unsigned char *) (const char *) ( term ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "emacs" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(term)[0] == ("emacs")[0]Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2
606 no_line_editing |= in_emacs && STREQ (term, "dumb");
never executed: __result = (((const unsigned char *) (const char *) ( term ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "dumb" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
in_emacsDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
(term)[0] == ("dumb")[0]Description
TRUEnever evaluated
FALSEnever evaluated
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2
607-
608 /* running_under_emacs == 2 for `eterm' */-
609 running_under_emacs = in_emacs || STREQN (term, "emacs", 5);
never executed: __result = (((const unsigned char *) (const char *) ( term ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "emacs" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(5 == 0)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
in_emacsDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
((5 == 0) ? (1..., 5 ))) == 0))Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
(term)[0] == ("emacs")[0]Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
(__extension__..." , 5 ))) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( 5 )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( term )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( term ...size_t) ( 5 ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..._p ( "emacs" )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( "emac...size_t) ( 5 ))Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2
610 running_under_emacs += emacs_term && STREQN (term, "eterm", 5);
never executed: __result = (((const unsigned char *) (const char *) ( term ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "eterm" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(5 == 0)Description
TRUEnever evaluated
FALSEnever evaluated
emacs_termDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
((5 == 0) ? (1..., 5 ))) == 0))Description
TRUEnever evaluated
FALSEnever evaluated
(term)[0] == ("eterm")[0]Description
TRUEnever evaluated
FALSEnever evaluated
(__extension__..." , 5 ))) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( 5 )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( term )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( term ...size_t) ( 5 ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..._p ( "eterm" )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( "eter...size_t) ( 5 ))Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2
611-
612 if (running_under_emacs)
running_under_emacsDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
0-2
613 gnu_error_format = 1;
never executed: gnu_error_format = 1;
0
614 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test
2
615-
616 top_level_arg_index = arg_index;-
617 old_errexit_flag = exit_immediately_on_error;-
618-
619 /* Give this shell a place to longjmp to before executing the-
620 startup files. This allows users to press C-c to abort the-
621 lengthy startup. */-
622 code = setjmp_sigs (top_level);-
623 if (code)
codeDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
624 {-
625 if (code == EXITPROG || code == ERREXIT)
code == 3Description
TRUEnever evaluated
FALSEnever evaluated
code == 4Description
TRUEnever evaluated
FALSEnever evaluated
0
626 exit_shell (last_command_exit_value);
never executed: exit_shell (last_command_exit_value);
0
627 else-
628 {-
629#if defined (JOB_CONTROL)-
630 /* Reset job control, since run_startup_files turned it off. */-
631 set_job_control (interactive_shell);-
632#endif-
633 /* Reset value of `set -e', since it's turned off before running-
634 the startup files. */-
635 exit_immediately_on_error += old_errexit_flag;-
636 locally_skip_execution++;-
637 }
never executed: end of block
0
638 }-
639-
640 arg_index = top_level_arg_index;-
641-
642 /* Execute the start-up scripts. */-
643-
644 if (interactive_shell == 0)
interactive_shell == 0Description
TRUEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
2-5445
645 {-
646 unbind_variable ("PS1");-
647 unbind_variable ("PS2");-
648 interactive = 0;-
649#if 0-
650 /* This has already been done by init_noninteractive */-
651 expand_aliases = posixly_correct;-
652#endif-
653 }
executed 5445 times by 1 test: end of block
Executed by:
  • Self test
5445
654 else-
655 {-
656 change_flag ('i', FLAG_ON);-
657 interactive = 1;-
658 }
executed 2 times by 1 test: end of block
Executed by:
  • Self test
2
659-
660#if defined (RESTRICTED_SHELL)-
661 /* Set restricted_shell based on whether the basename of $0 indicates that-
662 the shell should be restricted or if the `-r' option was supplied at-
663 startup. */-
664 restricted_shell = shell_is_restricted (shell_name);-
665-
666 /* If the `-r' option is supplied at invocation, make sure that the shell-
667 is not in restricted mode when running the startup files. */-
668 saverst = restricted;-
669 restricted = 0;-
670#endif-
671-
672 /* Set positional parameters before running startup files. top_level_arg_index-
673 holds the index of the current argument before setting the positional-
674 parameters, so any changes performed in the startup files won't affect-
675 later option processing. */-
676 if (wordexp_only)
wordexp_onlyDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
0-5447
677 ; /* nothing yet */
never executed: ;
0
678 else if (command_execution_string)
command_execution_stringDescription
TRUEevaluated 177 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5270 times by 1 test
Evaluated by:
  • Self test
177-5270
679 arg_index = bind_args (argv, arg_index, argc, 0); /* $0 ... $n */
executed 177 times by 1 test: arg_index = bind_args (argv, arg_index, argc, 0);
Executed by:
  • Self test
177
680 else if (arg_index != argc && read_from_stdin == 0)
arg_index != argcDescription
TRUEevaluated 5265 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
read_from_stdin == 0Description
TRUEevaluated 5265 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5265
681 {-
682 shell_script_filename = argv[arg_index++];-
683 arg_index = bind_args (argv, arg_index, argc, 1); /* $1 ... $n */-
684 }
executed 5265 times by 1 test: end of block
Executed by:
  • Self test
5265
685 else-
686 arg_index = bind_args (argv, arg_index, argc, 1); /* $1 ... $n */
executed 5 times by 1 test: arg_index = bind_args (argv, arg_index, argc, 1);
Executed by:
  • Self test
5
687-
688 /* The startup files are run with `set -e' temporarily disabled. */-
689 if (locally_skip_execution == 0 && running_setuid == 0)
locally_skip_execution == 0Description
TRUEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
running_setuid == 0Description
TRUEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5447
690 {-
691 old_errexit_flag = exit_immediately_on_error;-
692 exit_immediately_on_error = 0;-
693-
694 run_startup_files ();-
695 exit_immediately_on_error += old_errexit_flag;-
696 }
executed 5446 times by 1 test: end of block
Executed by:
  • Self test
5446
697-
698 /* If we are invoked as `sh', turn on Posix mode. */-
699 if (act_like_sh)
act_like_shDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5408 times by 1 test
Evaluated by:
  • Self test
38-5408
700 {-
701 bind_variable ("POSIXLY_CORRECT", "y", 0);-
702 sv_strict_posix ("POSIXLY_CORRECT");-
703 }
executed 38 times by 1 test: end of block
Executed by:
  • Self test
38
704-
705#if defined (RESTRICTED_SHELL)-
706 /* Turn on the restrictions after executing the startup files. This-
707 means that `bash -r' or `set -r' invoked from a startup file will-
708 turn on the restrictions after the startup files are executed. */-
709 restricted = saverst || restricted;
saverstDescription
TRUEnever evaluated
FALSEevaluated 5446 times by 1 test
Evaluated by:
  • Self test
restrictedDescription
TRUEnever evaluated
FALSEevaluated 5446 times by 1 test
Evaluated by:
  • Self test
0-5446
710 if (shell_reinitialized == 0)
shell_reinitialized == 0Description
TRUEevaluated 5431 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test
15-5431
711 maybe_make_restricted (shell_name);
executed 5431 times by 1 test: maybe_make_restricted (shell_name);
Executed by:
  • Self test
5431
712#endif /* RESTRICTED_SHELL */-
713-
714#if defined (WORDEXP_OPTION)-
715 if (wordexp_only)-
716 {-
717 startup_state = 3;-
718 last_command_exit_value = run_wordexp (argv[top_level_arg_index]);-
719 exit_shell (last_command_exit_value);-
720 }-
721#endif-
722-
723 cmd_init (); /* initialize the command object caches */-
724 uwp_init ();-
725-
726 if (command_execution_string)
command_execution_stringDescription
TRUEevaluated 177 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5269 times by 1 test
Evaluated by:
  • Self test
177-5269
727 {-
728 startup_state = 2;-
729-
730 if (debugging_mode)
debugging_modeDescription
TRUEnever evaluated
FALSEevaluated 177 times by 1 test
Evaluated by:
  • Self test
0-177
731 start_debugger ();
never executed: start_debugger ();
0
732-
733#if defined (ONESHOT)-
734 executing = 1;-
735 run_one_command (command_execution_string);-
736 exit_shell (last_command_exit_value);-
737#else /* ONESHOT */-
738 with_input_from_string (command_execution_string, "-c");-
739 goto read_and_execute;-
740#endif /* !ONESHOT */-
741 }
never executed: end of block
0
742-
743 /* Get possible input filename and set up default_buffered_input or-
744 default_input as appropriate. */-
745 if (shell_script_filename)
shell_script_filenameDescription
TRUEevaluated 5264 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
5-5264
746 open_shell_script (shell_script_filename);
executed 5264 times by 1 test: open_shell_script (shell_script_filename);
Executed by:
  • Self test
5264
747 else if (interactive == 0)
interactive == 0Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5
748 {-
749 /* In this mode, bash is reading a script from stdin, which is a-
750 pipe or redirected file. */-
751#if defined (BUFFERED_INPUT)-
752 default_buffered_input = fileno (stdin); /* == 0 */-
753#else-
754 setbuf (default_input, (char *)NULL);-
755#endif /* !BUFFERED_INPUT */-
756 read_from_stdin = 1;-
757 }
executed 5 times by 1 test: end of block
Executed by:
  • Self test
5
758 else if (top_level_arg_index == argc) /* arg index before startup files */
top_level_arg_index == argcDescription
TRUEnever evaluated
FALSEnever evaluated
0
759 /* "If there are no operands and the -c option is not specified, the -s-
760 option shall be assumed." */-
761 read_from_stdin = 1;
never executed: read_from_stdin = 1;
0
762-
763 set_bash_input ();-
764-
765 if (debugging_mode && locally_skip_execution == 0 && running_setuid == 0 && (reading_shell_script || interactive_shell == 0))
debugging_modeDescription
TRUEnever evaluated
FALSEevaluated 5266 times by 1 test
Evaluated by:
  • Self test
locally_skip_execution == 0Description
TRUEnever evaluated
FALSEnever evaluated
running_setuid == 0Description
TRUEnever evaluated
FALSEnever evaluated
reading_shell_scriptDescription
TRUEnever evaluated
FALSEnever evaluated
interactive_shell == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-5266
766 start_debugger ();
never executed: start_debugger ();
0
767-
768 /* Do the things that should be done only for interactive shells. */-
769 if (interactive_shell)
interactive_shellDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5265 times by 1 test
Evaluated by:
  • Self test
1-5265
770 {-
771 /* Set up for checking for presence of mail. */-
772 reset_mail_timer ();-
773 init_mail_dates ();-
774-
775#if defined (HISTORY)-
776 /* Initialize the interactive history stuff. */-
777 bash_initialize_history ();-
778 /* Don't load the history from the history file if we've already-
779 saved some lines in this session (e.g., by putting `history -s xx'-
780 into one of the startup files). */-
781 if (shell_initialized == 0 && history_lines_this_session == 0)
shell_initialized == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
history_lines_...s_session == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
782 load_history ();
executed 1 time by 1 test: load_history ();
Executed by:
  • Self test
1
783#endif /* HISTORY */-
784-
785 /* Initialize terminal state for interactive shells after the-
786 .bash_profile and .bashrc are interpreted. */-
787 get_tty_state ();-
788 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
789-
790#if !defined (ONESHOT)-
791 read_and_execute:-
792#endif /* !ONESHOT */-
793-
794 shell_initialized = 1;-
795-
796 if (pretty_print_mode && interactive_shell)
pretty_print_modeDescription
TRUEnever evaluated
FALSEevaluated 5266 times by 1 test
Evaluated by:
  • Self test
interactive_shellDescription
TRUEnever evaluated
FALSEnever evaluated
0-5266
797 {-
798 internal_warning (_("pretty-printing mode ignored in interactive shells"));-
799 pretty_print_mode = 0;-
800 }
never executed: end of block
0
801 if (pretty_print_mode)
pretty_print_modeDescription
TRUEnever evaluated
FALSEevaluated 5266 times by 1 test
Evaluated by:
  • Self test
0-5266
802 exit_shell (pretty_print_loop ());
never executed: exit_shell (pretty_print_loop ());
0
803-
804 /* Read commands until exit condition. */-
805 reader_loop ();-
806 exit_shell (last_command_exit_value);-
807}
never executed: end of block
0
808-
809static int-
810parse_long_options (argv, arg_start, arg_end)-
811 char **argv;-
812 int arg_start, arg_end;-
813{-
814 int arg_index, longarg, i;-
815 char *arg_string;-
816-
817 arg_index = arg_start;-
818 while ((arg_index != arg_end) && (arg_string = argv[arg_index]) &&
(arg_index != arg_end)Description
TRUEevaluated 5443 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
(arg_string = argv[arg_index])Description
TRUEevaluated 5443 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5443
819 (*arg_string == '-'))
(*arg_string == '-')Description
TRUEevaluated 185 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5258 times by 1 test
Evaluated by:
  • Self test
185-5258
820 {-
821 longarg = 0;-
822-
823 /* Make --login equivalent to -login. */-
824 if (arg_string[1] == '-' && arg_string[2])
arg_string[1] == '-'Description
TRUEnever evaluated
FALSEevaluated 185 times by 1 test
Evaluated by:
  • Self test
arg_string[2]Description
TRUEnever evaluated
FALSEnever evaluated
0-185
825 {-
826 longarg = 1;-
827 arg_string++;-
828 }
never executed: end of block
0
829-
830 for (i = 0; long_args[i].name; i++)
long_args[i].nameDescription
TRUEevaluated 2960 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 185 times by 1 test
Evaluated by:
  • Self test
185-2960
831 {-
832 if (STREQ (arg_string + 1, long_args[i].name))
never executed: __result = (((const unsigned char *) (const char *) ( arg_string + 1 ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( long_args[i].name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(arg_string + ...gs[i].name)[0]Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2958 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2958
833 {-
834 if (long_args[i].type == Int)
long_args[i].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
835 *long_args[i].int_value = 1;
never executed: *long_args[i].int_value = 1;
0
836 else if (argv[++arg_index] == 0)
argv[++arg_index] == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
837 {-
838 report_error (_("%s: option requires an argument"), long_args[i].name);-
839 exit (EX_BADUSAGE);
never executed: exit (2);
0
840 }-
841 else-
842 *long_args[i].char_value = argv[arg_index];
never executed: *long_args[i].char_value = argv[arg_index];
0
843-
844 break;
never executed: break;
0
845 }-
846 }
executed 2960 times by 1 test: end of block
Executed by:
  • Self test
2960
847 if (long_args[i].name == 0)
long_args[i].name == 0Description
TRUEevaluated 185 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-185
848 {-
849 if (longarg)
longargDescription
TRUEnever evaluated
FALSEevaluated 185 times by 1 test
Evaluated by:
  • Self test
0-185
850 {-
851 report_error (_("%s: invalid option"), argv[arg_index]);-
852 show_shell_usage (stderr, 0);-
853 exit (EX_BADUSAGE);
never executed: exit (2);
0
854 }-
855 break; /* No such argument. Maybe flag arg. */
executed 185 times by 1 test: break;
Executed by:
  • Self test
185
856 }-
857-
858 arg_index++;-
859 }
never executed: end of block
0
860-
861 return (arg_index);
executed 5447 times by 1 test: return (arg_index);
Executed by:
  • Self test
5447
862}-
863-
864static int-
865parse_shell_options (argv, arg_start, arg_end)-
866 char **argv;-
867 int arg_start, arg_end;-
868{-
869 int arg_index;-
870 int arg_character, on_or_off, next_arg, i;-
871 char *o_option, *arg_string;-
872-
873 arg_index = arg_start;-
874 while (arg_index != arg_end && (arg_string = argv[arg_index]) &&
arg_index != arg_endDescription
TRUEevaluated 5639 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
(arg_string = argv[arg_index])Description
TRUEevaluated 5639 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5639
875 (*arg_string == '-' || *arg_string == '+'))
*arg_string == '-'Description
TRUEevaluated 197 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5442 times by 1 test
Evaluated by:
  • Self test
*arg_string == '+'Description
TRUEnever evaluated
FALSEevaluated 5442 times by 1 test
Evaluated by:
  • Self test
0-5442
876 {-
877 /* There are flag arguments, so parse them. */-
878 next_arg = arg_index + 1;-
879-
880 /* A single `-' signals the end of options. From the 4.3 BSD sh.-
881 An option `--' means the same thing; this is the standard-
882 getopt(3) meaning. */-
883 if (arg_string[0] == '-' &&
arg_string[0] == '-'Description
TRUEevaluated 197 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-197
884 (arg_string[1] == '\0' ||
arg_string[1] == '\0'Description
TRUEnever evaluated
FALSEevaluated 197 times by 1 test
Evaluated by:
  • Self test
0-197
885 (arg_string[1] == '-' && arg_string[2] == '\0')))
arg_string[1] == '-'Description
TRUEnever evaluated
FALSEevaluated 197 times by 1 test
Evaluated by:
  • Self test
arg_string[2] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0-197
886 return (next_arg);
never executed: return (next_arg);
0
887-
888 i = 1;-
889 on_or_off = arg_string[0];-
890 while (arg_character = arg_string[i++])
arg_character ...rg_string[i++]Description
TRUEevaluated 276 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 197 times by 1 test
Evaluated by:
  • Self test
197-276
891 {-
892 switch (arg_character)-
893 {-
894 case 'c':
executed 177 times by 1 test: case 'c':
Executed by:
  • Self test
177
895 want_pending_command = 1;-
896 break;
executed 177 times by 1 test: break;
Executed by:
  • Self test
177
897-
898 case 'l':
never executed: case 'l':
0
899 make_login_shell = 1;-
900 break;
never executed: break;
0
901-
902 case 's':
never executed: case 's':
0
903 read_from_stdin = 1;-
904 break;
never executed: break;
0
905-
906 case 'o':
executed 17 times by 1 test: case 'o':
Executed by:
  • Self test
17
907 o_option = argv[next_arg];-
908 if (o_option == 0)
o_option == 0Description
TRUEnever evaluated
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test
0-17
909 {-
910 list_minus_o_opts (-1, (on_or_off == '-') ? 0 : 1);-
911 break;
never executed: break;
0
912 }-
913 if (set_minus_o_option (on_or_off, o_option) != EXECUTION_SUCCESS)
set_minus_o_op...o_option) != 0Description
TRUEnever evaluated
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test
0-17
914 exit (EX_BADUSAGE);
never executed: exit (2);
0
915 next_arg++;-
916 break;
executed 17 times by 1 test: break;
Executed by:
  • Self test
17
917-
918 case 'O':
never executed: case 'O':
0
919 /* Since some of these can be overridden by the normal-
920 interactive/non-interactive shell initialization or-
921 initializing posix mode, we save the options and process-
922 them after initialization. */-
923 o_option = argv[next_arg];-
924 if (o_option == 0)
o_option == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
925 {-
926 shopt_listopt (o_option, (on_or_off == '-') ? 0 : 1);-
927 break;
never executed: break;
0
928 }-
929 add_shopt_to_alist (o_option, on_or_off);-
930 next_arg++;-
931 break;
never executed: break;
0
932-
933 case 'D':
never executed: case 'D':
0
934 dump_translatable_strings = 1;-
935 break;
never executed: break;
0
936-
937 default:
executed 82 times by 1 test: default:
Executed by:
  • Self test
82
938 if (change_flag (arg_character, on_or_off) == FLAG_ERROR)
change_flag (a..._or_off) == -1Description
TRUEnever evaluated
FALSEevaluated 82 times by 1 test
Evaluated by:
  • Self test
0-82
939 {-
940 report_error (_("%c%c: invalid option"), on_or_off, arg_character);-
941 show_shell_usage (stderr, 0);-
942 exit (EX_BADUSAGE);
never executed: exit (2);
0
943 }-
944 }
executed 82 times by 1 test: end of block
Executed by:
  • Self test
82
945 }-
946 /* Can't do just a simple increment anymore -- what about-
947 "bash -abouo emacs ignoreeof -hP"? */-
948 arg_index = next_arg;-
949 }
executed 197 times by 1 test: end of block
Executed by:
  • Self test
197
950-
951 return (arg_index);
executed 5447 times by 1 test: return (arg_index);
Executed by:
  • Self test
5447
952}-
953-
954/* Exit the shell with status S. */-
955void-
956exit_shell (s)-
957 int s;-
958{-
959 fflush (stdout); /* XXX */-
960 fflush (stderr);-
961-
962 /* Clean up the terminal if we are in a state where it's been modified. */-
963#if defined (READLINE)-
964 if (RL_ISSTATE (RL_STATE_TERMPREPPED) && rl_deprep_term_function)
(rl_readline_s...& (0x0000004))Description
TRUEnever evaluated
FALSEevaluated 550 times by 1 test
Evaluated by:
  • Self test
rl_deprep_term_functionDescription
TRUEnever evaluated
FALSEnever evaluated
0-550
965 (*rl_deprep_term_function) ();
never executed: (*rl_deprep_term_function) ();
0
966#endif-
967 if (read_tty_modified ())
read_tty_modified ()Description
TRUEnever evaluated
FALSEevaluated 550 times by 1 test
Evaluated by:
  • Self test
0-550
968 read_tty_cleanup ();
never executed: read_tty_cleanup ();
0
969-
970 /* Do trap[0] if defined. Allow it to override the exit status-
971 passed to us. */-
972 if (signal_is_trapped (0))
signal_is_trapped (0)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 537 times by 1 test
Evaluated by:
  • Self test
13-537
973 s = run_exit_trap ();
executed 13 times by 1 test: s = run_exit_trap ();
Executed by:
  • Self test
13
974-
975#if defined (PROCESS_SUBSTITUTION)-
976 unlink_fifo_list ();-
977#endif /* PROCESS_SUBSTITUTION */-
978-
979#if defined (HISTORY)-
980 if (remember_on_history)
remember_on_historyDescription
TRUEevaluated 9 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 541 times by 1 test
Evaluated by:
  • Self test
9-541
981 maybe_save_shell_history ();
executed 9 times by 1 test: maybe_save_shell_history ();
Executed by:
  • Self test
9
982#endif /* HISTORY */-
983-
984#if defined (COPROCESS_SUPPORT)-
985 coproc_flush ();-
986#endif-
987-
988#if defined (JOB_CONTROL)-
989 /* If the user has run `shopt -s huponexit', hangup all jobs when we exit-
990 an interactive login shell. ksh does this unconditionally. */-
991 if (interactive_shell && login_shell && hup_on_exit)
interactive_shellDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 549 times by 1 test
Evaluated by:
  • Self test
login_shellDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
hup_on_exitDescription
TRUEnever evaluated
FALSEnever evaluated
0-549
992 hangup_all_jobs ();
never executed: hangup_all_jobs ();
0
993-
994 /* If this shell is interactive, or job control is active, terminate all-
995 stopped jobs and restore the original terminal process group. Don't do-
996 this if we're in a subshell and calling exit_shell after, for example,-
997 a failed word expansion. We want to do this even if the shell is not-
998 interactive because we set the terminal's process group when job control-
999 is enabled regardless of the interactive status. */-
1000 if (subshell_environment == 0)
subshell_environment == 0Description
TRUEevaluated 546 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 4 times by 1 test
Evaluated by:
  • Self test
4-546
1001 end_job_control ();
executed 546 times by 1 test: end_job_control ();
Executed by:
  • Self test
546
1002#endif /* JOB_CONTROL */-
1003-
1004 /* Always return the exit status of the last command to our parent. */-
1005 sh_exit (s);-
1006}
never executed: end of block
0
1007-
1008/* A wrapper for exit that (optionally) can do other things, like malloc-
1009 statistics tracing. */-
1010void-
1011sh_exit (s)-
1012 int s;-
1013{-
1014#if defined (MALLOC_DEBUG) && defined (USING_BASH_MALLOC)-
1015 if (malloc_trace_at_exit)
malloc_trace_at_exitDescription
TRUEnever evaluated
FALSEevaluated 2652 times by 1 test
Evaluated by:
  • Self test
0-2652
1016 trace_malloc_stats (get_name_for_error (), (char *)NULL);
never executed: trace_malloc_stats (get_name_for_error (), (char *) ((void *)0) );
0
1017 /* mlocation_write_table (); */-
1018#endif-
1019-
1020 exit (s);
executed 2652 times by 1 test: exit (s);
Executed by:
  • Self test
2652
1021}-
1022-
1023/* Exit a subshell, which includes calling the exit trap. We don't want to-
1024 do any more cleanup, since a subshell is created as an exact copy of its-
1025 parent. */-
1026void-
1027subshell_exit (s)-
1028 int s;-
1029{-
1030 fflush (stdout);-
1031 fflush (stderr);-
1032-
1033 /* Do trap[0] if defined. Allow it to override the exit status-
1034 passed to us. */-
1035 if (signal_is_trapped (0))
signal_is_trapped (0)Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 39 times by 1 test
Evaluated by:
  • Self test
7-39
1036 s = run_exit_trap ();
executed 7 times by 1 test: s = run_exit_trap ();
Executed by:
  • Self test
7
1037-
1038 sh_exit (s);-
1039}
never executed: end of block
0
1040-
1041/* Source the bash startup files. If POSIXLY_CORRECT is non-zero, we obey-
1042 the Posix.2 startup file rules: $ENV is expanded, and if the file it-
1043 names exists, that file is sourced. The Posix.2 rules are in effect-
1044 for interactive shells only. (section 4.56.5.3) */-
1045-
1046/* Execute ~/.bashrc for most shells. Never execute it if-
1047 ACT_LIKE_SH is set, or if NO_RC is set.-
1048-
1049 If the executable file "/usr/gnu/src/bash/foo" contains:-
1050-
1051 #!/usr/gnu/bin/bash-
1052 echo hello-
1053-
1054 then:-
1055-
1056 COMMAND EXECUTE BASHRC-
1057 ---------------------------------
1058 bash -c foo NO-
1059 bash foo NO-
1060 foo NO-
1061 rsh machine ls YES (for rsh, which calls `bash -c')-
1062 rsh machine foo YES (for shell started by rsh) NO (for foo!)-
1063 echo ls | bash NO-
1064 login NO-
1065 bash YES-
1066*/-
1067-
1068static void-
1069execute_env_file (env_file)-
1070 char *env_file;-
1071{-
1072 char *fn;-
1073-
1074 if (env_file && *env_file)
env_fileDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5389 times by 1 test
Evaluated by:
  • Self test
*env_fileDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5389
1075 {-
1076 fn = expand_string_unsplit_to_string (env_file, Q_DOUBLE_QUOTES);-
1077 if (fn && *fn)
fnDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
*fnDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
1078 maybe_execute_file (fn, 1);
executed 1 time by 1 test: maybe_execute_file (fn, 1);
Executed by:
  • Self test
1
1079 FREE (fn);
executed 1 time by 1 test: sh_xfree((fn), "shell.c", 1079);
Executed by:
  • Self test
fnDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
1080 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
1081}
executed 5390 times by 1 test: end of block
Executed by:
  • Self test
5390
1082-
1083static void-
1084run_startup_files ()-
1085{-
1086#if defined (JOB_CONTROL)-
1087 int old_job_control;-
1088#endif-
1089 int sourced_login, run_by_ssh;-
1090-
1091 /* get the rshd/sshd case out of the way first. */-
1092 if (interactive_shell == 0 && no_rc == 0 && login_shell == 0 &&
interactive_shell == 0Description
TRUEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
no_rc == 0Description
TRUEevaluated 5430 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test
login_shell == 0Description
TRUEevaluated 5429 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1-5445
1093 act_like_sh == 0 && command_execution_string)
act_like_sh == 0Description
TRUEevaluated 5391 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 38 times by 1 test
Evaluated by:
  • Self test
command_execution_stringDescription
TRUEevaluated 138 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5253 times by 1 test
Evaluated by:
  • Self test
38-5391
1094 {-
1095#ifdef SSH_SOURCE_BASHRC-
1096 run_by_ssh = (find_variable ("SSH_CLIENT") != (SHELL_VAR *)0) ||-
1097 (find_variable ("SSH2_CLIENT") != (SHELL_VAR *)0);-
1098#else-
1099 run_by_ssh = 0;-
1100#endif-
1101-
1102 /* If we were run by sshd or we think we were run by rshd, execute-
1103 ~/.bashrc if we are a top-level shell. */-
1104 if ((run_by_ssh || isnetconn (fileno (stdin))) && shell_level < 2)
run_by_sshDescription
TRUEnever evaluated
FALSEevaluated 138 times by 1 test
Evaluated by:
  • Self test
isnetconn (fileno ( stdin ))Description
TRUEnever evaluated
FALSEevaluated 138 times by 1 test
Evaluated by:
  • Self test
shell_level < 2Description
TRUEnever evaluated
FALSEnever evaluated
0-138
1105 {-
1106#ifdef SYS_BASHRC-
1107# if defined (__OPENNT)-
1108 maybe_execute_file (_prefixInstallPath(SYS_BASHRC, NULL, 0), 1);-
1109# else-
1110 maybe_execute_file (SYS_BASHRC, 1);-
1111# endif-
1112#endif-
1113 maybe_execute_file (bashrc_file, 1);-
1114 return;
never executed: return;
0
1115 }-
1116 }
executed 138 times by 1 test: end of block
Executed by:
  • Self test
138
1117-
1118#if defined (JOB_CONTROL)-
1119 /* Startup files should be run without job control enabled. */-
1120 old_job_control = interactive_shell ? set_job_control (0) : 0;
interactive_shellDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
2-5445
1121#endif-
1122-
1123 sourced_login = 0;-
1124-
1125 /* A shell begun with the --login (or -l) flag that is not in posix mode-
1126 runs the login shell startup files, no matter whether or not it is-
1127 interactive. If NON_INTERACTIVE_LOGIN_SHELLS is defined, run the-
1128 startup files if argv[0][0] == '-' as well. */-
1129#if defined (NON_INTERACTIVE_LOGIN_SHELLS)-
1130 if (login_shell && posixly_correct == 0)-
1131#else-
1132 if (login_shell < 0 && posixly_correct == 0)
login_shell < 0Description
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
posixly_correct == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-5447
1133#endif-
1134 {-
1135 /* We don't execute .bashrc for login shells. */-
1136 no_rc++;-
1137-
1138 /* Execute /etc/profile and one of the personal login shell-
1139 initialization files. */-
1140 if (no_profile == 0)
no_profile == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1141 {-
1142 maybe_execute_file (SYS_PROFILE, 1);-
1143-
1144 if (act_like_sh) /* sh */
act_like_shDescription
TRUEnever evaluated
FALSEnever evaluated
0
1145 maybe_execute_file ("~/.profile", 1);
never executed: maybe_execute_file ("~/.profile", 1);
0
1146 else if ((maybe_execute_file ("~/.bash_profile", 1) == 0) &&
(maybe_execute...ile", 1) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1147 (maybe_execute_file ("~/.bash_login", 1) == 0)) /* bash */
(maybe_execute...gin", 1) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1148 maybe_execute_file ("~/.profile", 1);
never executed: maybe_execute_file ("~/.profile", 1);
0
1149 }
never executed: end of block
0
1150-
1151 sourced_login = 1;-
1152 }
never executed: end of block
0
1153-
1154 /* A non-interactive shell not named `sh' and not in posix mode reads and-
1155 executes commands from $BASH_ENV. If `su' starts a shell with `-c cmd'-
1156 and `-su' as the name of the shell, we want to read the startup files.-
1157 No other non-interactive shells read any startup files. */-
1158 if (interactive_shell == 0 && !(su_shell && login_shell))
interactive_shell == 0Description
TRUEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
su_shellDescription
TRUEnever evaluated
FALSEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
login_shellDescription
TRUEnever evaluated
FALSEnever evaluated
0-5445
1159 {-
1160 if (posixly_correct == 0 && act_like_sh == 0 && privileged_mode == 0 &&
posixly_correct == 0Description
TRUEevaluated 5428 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 17 times by 1 test
Evaluated by:
  • Self test
act_like_sh == 0Description
TRUEevaluated 5390 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 38 times by 1 test
Evaluated by:
  • Self test
privileged_mode == 0Description
TRUEevaluated 5390 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5428
1161 sourced_env++ == 0)
sourced_env++ == 0Description
TRUEevaluated 5390 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5390
1162 execute_env_file (get_string_value ("BASH_ENV"));
executed 5390 times by 1 test: execute_env_file (get_string_value ("BASH_ENV"));
Executed by:
  • Self test
5390
1163 return;
executed 5445 times by 1 test: return;
Executed by:
  • Self test
5445
1164 }-
1165-
1166 /* Interactive shell or `-su' shell. */-
1167 if (posixly_correct == 0) /* bash, sh */
posixly_correct == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-2
1168 {-
1169 if (login_shell && sourced_login++ == 0)
login_shellDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
sourced_login++ == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-2
1170 {-
1171 /* We don't execute .bashrc for login shells. */-
1172 no_rc++;-
1173-
1174 /* Execute /etc/profile and one of the personal login shell-
1175 initialization files. */-
1176 if (no_profile == 0)
no_profile == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1177 {-
1178 maybe_execute_file (SYS_PROFILE, 1);-
1179-
1180 if (act_like_sh) /* sh */
act_like_shDescription
TRUEnever evaluated
FALSEnever evaluated
0
1181 maybe_execute_file ("~/.profile", 1);
never executed: maybe_execute_file ("~/.profile", 1);
0
1182 else if ((maybe_execute_file ("~/.bash_profile", 1) == 0) &&
(maybe_execute...ile", 1) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1183 (maybe_execute_file ("~/.bash_login", 1) == 0)) /* bash */
(maybe_execute...gin", 1) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1184 maybe_execute_file ("~/.profile", 1);
never executed: maybe_execute_file ("~/.profile", 1);
0
1185 }
never executed: end of block
0
1186 }
never executed: end of block
0
1187-
1188 /* bash */-
1189 if (act_like_sh == 0 && no_rc == 0)
act_like_sh == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
no_rc == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-2
1190 {-
1191#ifdef SYS_BASHRC-
1192# if defined (__OPENNT)-
1193 maybe_execute_file (_prefixInstallPath(SYS_BASHRC, NULL, 0), 1);-
1194# else-
1195 maybe_execute_file (SYS_BASHRC, 1);-
1196# endif-
1197#endif-
1198 maybe_execute_file (bashrc_file, 1);-
1199 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
1200 /* sh */-
1201 else if (act_like_sh && privileged_mode == 0 && sourced_env++ == 0)
act_like_shDescription
TRUEnever evaluated
FALSEnever evaluated
privileged_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
sourced_env++ == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1202 execute_env_file (get_string_value ("ENV"));
never executed: execute_env_file (get_string_value ("ENV"));
0
1203 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
1204 else /* bash --posix, sh --posix */-
1205 {-
1206 /* bash and sh */-
1207 if (interactive_shell && privileged_mode == 0 && sourced_env++ == 0)
interactive_shellDescription
TRUEnever evaluated
FALSEnever evaluated
privileged_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
sourced_env++ == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1208 execute_env_file (get_string_value ("ENV"));
never executed: execute_env_file (get_string_value ("ENV"));
0
1209 }
never executed: end of block
0
1210-
1211#if defined (JOB_CONTROL)-
1212 set_job_control (old_job_control);-
1213#endif-
1214}
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
1215-
1216#if defined (RESTRICTED_SHELL)-
1217/* Return 1 if the shell should be a restricted one based on NAME or the-
1218 value of `restricted'. Don't actually do anything, just return a-
1219 boolean value. */-
1220int-
1221shell_is_restricted (name)-
1222 char *name;-
1223{-
1224 char *temp;-
1225-
1226 if (restricted)
restrictedDescription
TRUEnever evaluated
FALSEevaluated 10894 times by 1 test
Evaluated by:
  • Self test
0-10894
1227 return 1;
never executed: return 1;
0
1228 temp = base_pathname (name);-
1229 if (*temp == '-')
*temp == '-'Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 10892 times by 1 test
Evaluated by:
  • Self test
2-10892
1230 temp++;
executed 2 times by 1 test: temp++;
Executed by:
  • Self test
2
1231 return (STREQ (temp, RESTRICTED_SHELL_NAME));
executed 10894 times by 1 test: return (((temp)[0] == ("rbash")[0] && __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( temp ) && __builtin_constant_p ( "rbash" ) && (__s1_len = __builtin_strlen ( temp ), __s2_len = __builtin_strlen ( "rbash" ), (!((size_t)(const void ...(((const unsigned char *) (const char *) ( "rbash" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( "rbash" ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( temp , "rbash" )))); }) == 0));
Executed by:
  • Self test
never executed: __result = (((const unsigned char *) (const char *) ( temp ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "rbash" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-10894
1232}-
1233-
1234/* Perhaps make this shell a `restricted' one, based on NAME. If the-
1235 basename of NAME is "rbash", then this shell is restricted. The-
1236 name of the restricted shell is a configurable option, see config.h.-
1237 In a restricted shell, PATH, SHELL, ENV, and BASH_ENV are read-only-
1238 and non-unsettable.-
1239 Do this also if `restricted' is already set to 1; maybe the shell was-
1240 started with -r. */-
1241int-
1242maybe_make_restricted (name)-
1243 char *name;-
1244{-
1245 char *temp;-
1246-
1247 temp = base_pathname (name);-
1248 if (*temp == '-')
*temp == '-'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5431 times by 1 test
Evaluated by:
  • Self test
1-5431
1249 temp++;
executed 1 time by 1 test: temp++;
Executed by:
  • Self test
1
1250 if (restricted || (STREQ (temp, RESTRICTED_SHELL_NAME)))
never executed: __result = (((const unsigned char *) (const char *) ( temp ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "rbash" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
restrictedDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5431 times by 1 test
Evaluated by:
  • Self test
(temp)[0] == ("rbash")[0]Description
TRUEnever evaluated
FALSEevaluated 5431 times by 1 test
Evaluated by:
  • Self test
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-5431
1251 {-
1252#if defined (RBASH_STATIC_PATH_VALUE)-
1253 bind_variable ("PATH", RBASH_STATIC_PATH_VALUE, 0);-
1254 stupidly_hack_special_variables ("PATH"); /* clear hash table */-
1255#endif-
1256 set_var_read_only ("PATH");-
1257 set_var_read_only ("SHELL");-
1258 set_var_read_only ("ENV");-
1259 set_var_read_only ("BASH_ENV");-
1260 restricted = 1;-
1261 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
1262 return (restricted);
executed 5432 times by 1 test: return (restricted);
Executed by:
  • Self test
5432
1263}-
1264#endif /* RESTRICTED_SHELL */-
1265-
1266/* Fetch the current set of uids and gids and return 1 if we're running-
1267 setuid or setgid. */-
1268static int-
1269uidget ()-
1270{-
1271 uid_t u;-
1272-
1273 u = getuid ();-
1274 if (current_user.uid != u)
current_user.uid != uDescription
TRUEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5432
1275 {-
1276 FREE (current_user.user_name);
never executed: sh_xfree((current_user.user_name), "shell.c", 1276);
current_user.user_nameDescription
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
1277 FREE (current_user.shell);
never executed: sh_xfree((current_user.shell), "shell.c", 1277);
current_user.shellDescription
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
1278 FREE (current_user.home_dir);
never executed: sh_xfree((current_user.home_dir), "shell.c", 1278);
current_user.home_dirDescription
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
1279 current_user.user_name = current_user.shell = current_user.home_dir = (char *)NULL;-
1280 }
executed 5432 times by 1 test: end of block
Executed by:
  • Self test
5432
1281 current_user.uid = u;-
1282 current_user.gid = getgid ();-
1283 current_user.euid = geteuid ();-
1284 current_user.egid = getegid ();-
1285-
1286 /* See whether or not we are running setuid or setgid. */-
1287 return (current_user.uid != current_user.euid) ||
executed 5432 times by 1 test: return (current_user.uid != current_user.euid) || (current_user.gid != current_user.egid);
Executed by:
  • Self test
5432
1288 (current_user.gid != current_user.egid);
executed 5432 times by 1 test: return (current_user.uid != current_user.euid) || (current_user.gid != current_user.egid);
Executed by:
  • Self test
5432
1289}-
1290-
1291void-
1292disable_priv_mode ()-
1293{-
1294 int e;-
1295-
1296 if (setuid (current_user.uid) < 0)
setuid (current_user.uid) < 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test
0-10
1297 {-
1298 e = errno;-
1299 sys_error (_("cannot set uid to %d: effective uid %d"), current_user.uid, current_user.euid);-
1300#if defined (EXIT_ON_SETUID_FAILURE)-
1301 if (e == EAGAIN)-
1302 exit (e);-
1303#endif-
1304 }
never executed: end of block
0
1305 if (setgid (current_user.gid) < 0)
setgid (current_user.gid) < 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • Self test
0-10
1306 sys_error (_("cannot set gid to %d: effective gid %d"), current_user.gid, current_user.egid);
never executed: sys_error ( dcgettext (((void *)0), "cannot set gid to %d: effective gid %d" , 5) , current_user.gid, current_user.egid);
0
1307-
1308 current_user.euid = current_user.uid;-
1309 current_user.egid = current_user.gid;-
1310}
executed 10 times by 1 test: end of block
Executed by:
  • Self test
10
1311-
1312#if defined (WORDEXP_OPTION)-
1313static int-
1314run_wordexp (words)-
1315 char *words;-
1316{-
1317 int code, nw, nb;-
1318 WORD_LIST *wl, *tl, *result;-
1319-
1320 code = setjmp_nosigs (top_level);-
1321-
1322 if (code != NOT_JUMPED)-
1323 {-
1324 switch (code)-
1325 {-
1326 /* Some kind of throw to top_level has occurred. */-
1327 case FORCE_EOF:-
1328 return last_command_exit_value = 127;-
1329 case ERREXIT:-
1330 case EXITPROG:-
1331 return last_command_exit_value;-
1332 case DISCARD:-
1333 return last_command_exit_value = 1;-
1334 default:-
1335 command_error ("run_wordexp", CMDERR_BADJUMP, code, 0);-
1336 }-
1337 }-
1338-
1339 /* Run it through the parser to get a list of words and expand them */-
1340 if (words && *words)-
1341 {-
1342 with_input_from_string (words, "--wordexp");-
1343 if (parse_command () != 0)-
1344 return (126);-
1345 if (global_command == 0)-
1346 {-
1347 printf ("0\n0\n");-
1348 return (0);-
1349 }-
1350 if (global_command->type != cm_simple)-
1351 return (126);-
1352 wl = global_command->value.Simple->words;-
1353 if (protected_mode)-
1354 for (tl = wl; tl; tl = tl->next)-
1355 tl->word->flags |= W_NOCOMSUB|W_NOPROCSUB;-
1356 result = wl ? expand_words_no_vars (wl) : (WORD_LIST *)0;-
1357 }-
1358 else-
1359 result = (WORD_LIST *)0;-
1360-
1361 last_command_exit_value = 0;-
1362-
1363 if (result == 0)-
1364 {-
1365 printf ("0\n0\n");-
1366 return (0);-
1367 }-
1368-
1369 /* Count up the number of words and bytes, and print them. Don't count-
1370 the trailing NUL byte. */-
1371 for (nw = nb = 0, wl = result; wl; wl = wl->next)-
1372 {-
1373 nw++;-
1374 nb += strlen (wl->word->word);-
1375 }-
1376 printf ("%u\n%u\n", nw, nb);-
1377 /* Print each word on a separate line. This will have to be changed when-
1378 the interface to glibc is completed. */-
1379 for (wl = result; wl; wl = wl->next)-
1380 printf ("%s\n", wl->word->word);-
1381-
1382 return (0);-
1383}-
1384#endif-
1385-
1386#if defined (ONESHOT)-
1387/* Run one command, given as the argument to the -c option. Tell-
1388 parse_and_execute not to fork for a simple command. */-
1389static int-
1390run_one_command (command)-
1391 char *command;-
1392{-
1393 int code;-
1394-
1395 code = setjmp_nosigs (top_level);-
1396-
1397 if (code != NOT_JUMPED)
code != 0Description
TRUEevaluated 51 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 177 times by 1 test
Evaluated by:
  • Self test
51-177
1398 {-
1399#if defined (PROCESS_SUBSTITUTION)-
1400 unlink_fifo_list ();-
1401#endif /* PROCESS_SUBSTITUTION */-
1402 switch (code)-
1403 {-
1404 /* Some kind of throw to top_level has occurred. */-
1405 case FORCE_EOF:
executed 38 times by 1 test: case 1:
Executed by:
  • Self test
38
1406 return last_command_exit_value = 127;
executed 38 times by 1 test: return last_command_exit_value = 127;
Executed by:
  • Self test
38
1407 case ERREXIT:
executed 12 times by 1 test: case 4:
Executed by:
  • Self test
12
1408 case EXITPROG:
executed 1 time by 1 test: case 3:
Executed by:
  • Self test
1
1409 return last_command_exit_value;
executed 13 times by 1 test: return last_command_exit_value;
Executed by:
  • Self test
13
1410 case DISCARD:
never executed: case 2:
0
1411 return last_command_exit_value = 1;
never executed: return last_command_exit_value = 1;
0
1412 default:
never executed: default:
0
1413 command_error ("run_one_command", CMDERR_BADJUMP, code, 0);-
1414 }
never executed: end of block
0
1415 }-
1416 return (parse_and_execute (savestring (command), "-c", SEVAL_NOHIST));
executed 177 times by 1 test: return (parse_and_execute ((char *)strcpy (sh_xmalloc((1 + strlen (command)), "shell.c", 1416), (command)), "-c", 0x004));
Executed by:
  • Self test
177
1417}-
1418#endif /* ONESHOT */-
1419-
1420static int-
1421bind_args (argv, arg_start, arg_end, start_index)-
1422 char **argv;-
1423 int arg_start, arg_end, start_index;-
1424{-
1425 register int i;-
1426 WORD_LIST *args, *tl;-
1427-
1428 for (i = arg_start, args = tl = (WORD_LIST *)NULL; i < arg_end; i++)
i < arg_endDescription
TRUEevaluated 152 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
152-5447
1429 {-
1430 if (args == 0)
args == 0Description
TRUEevaluated 76 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 76 times by 1 test
Evaluated by:
  • Self test
76
1431 args = tl = make_word_list (make_word (argv[i]), args);
executed 76 times by 1 test: args = tl = make_word_list (make_word (argv[i]), args);
Executed by:
  • Self test
76
1432 else-
1433 {-
1434 tl->next = make_word_list (make_word (argv[i]), (WORD_LIST *)NULL);-
1435 tl = tl->next;-
1436 }
executed 76 times by 1 test: end of block
Executed by:
  • Self test
76
1437 }-
1438-
1439 if (args)
argsDescription
TRUEevaluated 76 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5371 times by 1 test
Evaluated by:
  • Self test
76-5371
1440 {-
1441 if (start_index == 0) /* bind to $0...$n for sh -c command */
start_index == 0Description
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 46 times by 1 test
Evaluated by:
  • Self test
30-46
1442 {-
1443 /* Posix.2 4.56.3 says that the first argument after sh -c command-
1444 becomes $0, and the rest of the arguments become $1...$n */-
1445 shell_name = savestring (args->word->word);-
1446 FREE (dollar_vars[0]);
executed 30 times by 1 test: sh_xfree((dollar_vars[0]), "shell.c", 1446);
Executed by:
  • Self test
dollar_vars[0]Description
TRUEevaluated 30 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-30
1447 dollar_vars[0] = savestring (args->word->word);-
1448 remember_args (args->next, 1);-
1449 if (debugging_mode)
debugging_modeDescription
TRUEnever evaluated
FALSEevaluated 30 times by 1 test
Evaluated by:
  • Self test
0-30
1450 {-
1451 push_args (args->next); /* BASH_ARGV and BASH_ARGC */-
1452 bash_argv_initialized = 1;-
1453 }
never executed: end of block
0
1454 }
executed 30 times by 1 test: end of block
Executed by:
  • Self test
30
1455 else /* bind to $1...$n for shell script */-
1456 {-
1457 remember_args (args, 1);-
1458 /* We do this unconditionally so something like -O extdebug doesn't-
1459 do it first. We're setting the definitive positional params-
1460 here. */-
1461 if (debugging_mode)
debugging_modeDescription
TRUEnever evaluated
FALSEevaluated 46 times by 1 test
Evaluated by:
  • Self test
0-46
1462 {-
1463 push_args (args); /* BASH_ARGV and BASH_ARGC */-
1464 bash_argv_initialized = 1;-
1465 }
never executed: end of block
0
1466 }
executed 46 times by 1 test: end of block
Executed by:
  • Self test
46
1467-
1468 dispose_words (args);-
1469 }
executed 76 times by 1 test: end of block
Executed by:
  • Self test
76
1470-
1471 return (i);
executed 5447 times by 1 test: return (i);
Executed by:
  • Self test
5447
1472}-
1473-
1474void-
1475unbind_args ()-
1476{-
1477 remember_args ((WORD_LIST *)NULL, 1);-
1478 pop_args (); /* Reset BASH_ARGV and BASH_ARGC */-
1479}
executed 15 times by 1 test: end of block
Executed by:
  • Self test
15
1480-
1481static void-
1482start_debugger ()-
1483{-
1484#if defined (DEBUGGER) && defined (DEBUGGER_START_FILE)-
1485 int old_errexit;-
1486 int r;-
1487-
1488 old_errexit = exit_immediately_on_error;-
1489 exit_immediately_on_error = 0;-
1490-
1491 r = force_execute_file (DEBUGGER_START_FILE, 1);-
1492 if (r < 0)
r < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1493 {-
1494 internal_warning (_("cannot start debugger; debugging mode disabled"));-
1495 debugging_mode = 0;-
1496 }
never executed: end of block
0
1497 error_trace_mode = function_trace_mode = debugging_mode;-
1498-
1499 set_shellopts ();-
1500 set_bashopts ();-
1501-
1502 exit_immediately_on_error += old_errexit;-
1503#endif-
1504}
never executed: end of block
0
1505-
1506static int-
1507open_shell_script (script_name)-
1508 char *script_name;-
1509{-
1510 int fd, e, fd_is_tty;-
1511 char *filename, *path_filename, *t;-
1512 char sample[80];-
1513 int sample_len;-
1514 struct stat sb;-
1515#if defined (ARRAY_VARS)-
1516 SHELL_VAR *funcname_v, *bash_source_v, *bash_lineno_v;-
1517 ARRAY *funcname_a, *bash_source_a, *bash_lineno_a;-
1518#endif-
1519-
1520 filename = savestring (script_name);-
1521-
1522 fd = open (filename, O_RDONLY);-
1523 if ((fd < 0) && (errno == ENOENT) && (absolute_program (filename) == 0))
(fd < 0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5263 times by 1 test
Evaluated by:
  • Self test
( (*__errno_lo...ion ()) == 2 )Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(absolute_prog...ilename) == 0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5263
1524 {-
1525 e = errno;-
1526 /* If it's not in the current directory, try looking through PATH-
1527 for it. */-
1528 path_filename = find_path_file (script_name);-
1529 if (path_filename)
path_filenameDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
0-1
1530 {-
1531 free (filename);-
1532 filename = path_filename;-
1533 fd = open (filename, O_RDONLY);-
1534 }
never executed: end of block
0
1535 else-
1536 errno = e;
executed 1 time by 1 test: (*__errno_location ()) = e;
Executed by:
  • Self test
1
1537 }-
1538-
1539 if (fd < 0)
fd < 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5263 times by 1 test
Evaluated by:
  • Self test
1-5263
1540 {-
1541 e = errno;-
1542 file_error (filename);-
1543#if defined (JOB_CONTROL)-
1544 end_job_control (); /* just in case we were run as bash -i script */-
1545#endif-
1546 sh_exit ((e == ENOENT) ? EX_NOTFOUND : EX_NOINPUT);-
1547 }
never executed: end of block
0
1548-
1549 free (dollar_vars[0]);-
1550 dollar_vars[0] = exec_argv0 ? savestring (exec_argv0) : savestring (script_name);
exec_argv0Description
TRUEnever evaluated
FALSEevaluated 5263 times by 1 test
Evaluated by:
  • Self test
0-5263
1551 if (exec_argv0)
exec_argv0Description
TRUEnever evaluated
FALSEevaluated 5263 times by 1 test
Evaluated by:
  • Self test
0-5263
1552 {-
1553 free (exec_argv0);-
1554 exec_argv0 = (char *)NULL;-
1555 }
never executed: end of block
0
1556-
1557 if (file_isdir (filename))
file_isdir (filename)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5262 times by 1 test
Evaluated by:
  • Self test
1-5262
1558 {-
1559#if defined (EISDIR)-
1560 errno = EISDIR;-
1561#else-
1562 errno = EINVAL;-
1563#endif-
1564 file_error (filename);-
1565#if defined (JOB_CONTROL)-
1566 end_job_control (); /* just in case we were run as bash -i script */-
1567#endif-
1568 sh_exit (EX_NOINPUT);-
1569 }
never executed: end of block
0
1570-
1571#if defined (ARRAY_VARS)-
1572 GET_ARRAY_FROM_VAR ("FUNCNAME", funcname_v, funcname_a);-
1573 GET_ARRAY_FROM_VAR ("BASH_SOURCE", bash_source_v, bash_source_a);-
1574 GET_ARRAY_FROM_VAR ("BASH_LINENO", bash_lineno_v, bash_lineno_a);-
1575-
1576 array_push (bash_source_a, filename);-
1577 if (bash_lineno_a)
bash_lineno_aDescription
TRUEevaluated 5262 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5262
1578 {-
1579 t = itos (executing_line_number ());-
1580 array_push (bash_lineno_a, t);-
1581 free (t);-
1582 }
executed 5262 times by 1 test: end of block
Executed by:
  • Self test
5262
1583 array_push (funcname_a, "main");-
1584#endif-
1585-
1586#ifdef HAVE_DEV_FD-
1587 fd_is_tty = isatty (fd);-
1588#else-
1589 fd_is_tty = 0;-
1590#endif-
1591-
1592 /* Only do this with non-tty file descriptors we can seek on. */-
1593 if (fd_is_tty == 0 && (lseek (fd, 0L, 1) != -1))
fd_is_tty == 0Description
TRUEevaluated 5262 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(lseek (fd, 0L, 1) != -1)Description
TRUEevaluated 5262 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5262
1594 {-
1595 /* Check to see if the `file' in `bash file' is a binary file-
1596 according to the same tests done by execute_simple_command (),-
1597 and report an error and exit if it is. */-
1598 sample_len = read (fd, sample, sizeof (sample));-
1599 if (sample_len < 0)
sample_len < 0Description
TRUEnever evaluated
FALSEevaluated 5262 times by 1 test
Evaluated by:
  • Self test
0-5262
1600 {-
1601 e = errno;-
1602 if ((fstat (fd, &sb) == 0) && S_ISDIR (sb.st_mode))
(fstat (fd, &sb) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
(((( sb.st_mod... == (0040000))Description
TRUEnever evaluated
FALSEnever evaluated
0
1603 {-
1604#if defined (EISDIR)-
1605 errno = EISDIR;-
1606 file_error (filename);-
1607#else -
1608 internal_error (_("%s: Is a directory"), filename);-
1609#endif-
1610 }
never executed: end of block
0
1611 else-
1612 {-
1613 errno = e;-
1614 file_error (filename);-
1615 }
never executed: end of block
0
1616#if defined (JOB_CONTROL)-
1617 end_job_control (); /* just in case we were run as bash -i script */-
1618#endif-
1619 exit (EX_NOEXEC);
never executed: exit (126);
0
1620 }-
1621 else if (sample_len > 0 && (check_binary_file (sample, sample_len)))
sample_len > 0Description
TRUEevaluated 5262 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
(check_binary_..., sample_len))Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5261 times by 1 test
Evaluated by:
  • Self test
0-5262
1622 {-
1623 internal_error (_("%s: cannot execute binary file"), filename);-
1624#if defined (JOB_CONTROL)-
1625 end_job_control (); /* just in case we were run as bash -i script */-
1626#endif-
1627 exit (EX_BINARY_FILE);
executed 1 time by 1 test: exit (126);
Executed by:
  • Self test
1
1628 }-
1629 /* Now rewind the file back to the beginning. */-
1630 lseek (fd, 0L, 0);-
1631 }
executed 5261 times by 1 test: end of block
Executed by:
  • Self test
5261
1632-
1633 /* Open the script. But try to move the file descriptor to a randomly-
1634 large one, in the hopes that any descriptors used by the script will-
1635 not match with ours. */-
1636 fd = move_to_high_fd (fd, 1, -1);-
1637-
1638#if defined (BUFFERED_INPUT)-
1639 default_buffered_input = fd;-
1640 SET_CLOSE_ON_EXEC (default_buffered_input);-
1641#else /* !BUFFERED_INPUT */-
1642 default_input = fdopen (fd, "r");-
1643-
1644 if (default_input == 0)-
1645 {-
1646 file_error (filename);-
1647 exit (EX_NOTFOUND);-
1648 }-
1649-
1650 SET_CLOSE_ON_EXEC (fd);-
1651 if (fileno (default_input) != fd)-
1652 SET_CLOSE_ON_EXEC (fileno (default_input));-
1653#endif /* !BUFFERED_INPUT */-
1654-
1655 /* Just about the only way for this code to be executed is if something-
1656 like `bash -i /dev/stdin' is executed. */-
1657 if (interactive_shell && fd_is_tty)
interactive_shellDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5260 times by 1 test
Evaluated by:
  • Self test
fd_is_ttyDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
0-5260
1658 {-
1659 dup2 (fd, 0);-
1660 close (fd);-
1661 fd = 0;-
1662#if defined (BUFFERED_INPUT)-
1663 default_buffered_input = 0;-
1664#else-
1665 fclose (default_input);-
1666 default_input = stdin;-
1667#endif-
1668 }
never executed: end of block
0
1669 else if (forced_interactive && fd_is_tty == 0)
forced_interactiveDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5260 times by 1 test
Evaluated by:
  • Self test
fd_is_tty == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5260
1670 /* But if a script is called with something like `bash -i scriptname',-
1671 we need to do a non-interactive setup here, since we didn't do it-
1672 before. */-
1673 init_interactive_script ();
executed 1 time by 1 test: init_interactive_script ();
Executed by:
  • Self test
1
1674-
1675 free (filename);-
1676-
1677 reading_shell_script = 1;-
1678 return (fd);
executed 5261 times by 1 test: return (fd);
Executed by:
  • Self test
5261
1679}-
1680-
1681/* Initialize the input routines for the parser. */-
1682static void-
1683set_bash_input ()-
1684{-
1685 /* Make sure the fd from which we are reading input is not in-
1686 no-delay mode. */-
1687#if defined (BUFFERED_INPUT)-
1688 if (interactive == 0)
interactive == 0Description
TRUEevaluated 5266 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5266
1689 sh_unset_nodelay_mode (default_buffered_input);
executed 5266 times by 1 test: sh_unset_nodelay_mode (default_buffered_input);
Executed by:
  • Self test
5266
1690 else-
1691#endif /* !BUFFERED_INPUT */-
1692 sh_unset_nodelay_mode (fileno (stdin));
never executed: sh_unset_nodelay_mode (fileno ( stdin ));
0
1693-
1694 /* with_input_from_stdin really means `with_input_from_readline' */-
1695 if (interactive && no_line_editing == 0)
interactiveDescription
TRUEnever evaluated
FALSEevaluated 5266 times by 1 test
Evaluated by:
  • Self test
no_line_editing == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-5266
1696 with_input_from_stdin ();
never executed: with_input_from_stdin ();
0
1697#if defined (BUFFERED_INPUT)-
1698 else if (interactive == 0)
interactive == 0Description
TRUEevaluated 5266 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5266
1699 with_input_from_buffered_stream (default_buffered_input, dollar_vars[0]);
executed 5266 times by 1 test: with_input_from_buffered_stream (default_buffered_input, dollar_vars[0]);
Executed by:
  • Self test
5266
1700#endif /* BUFFERED_INPUT */-
1701 else-
1702 with_input_from_stream (default_input, dollar_vars[0]);
never executed: with_input_from_stream (default_input, dollar_vars[0]);
0
1703}-
1704-
1705/* Close the current shell script input source and forget about it. This is-
1706 extern so execute_cmd.c:initialize_subshell() can call it. If CHECK_ZERO-
1707 is non-zero, we close default_buffered_input even if it's the standard-
1708 input (fd 0). */-
1709void-
1710unset_bash_input (check_zero)-
1711 int check_zero;-
1712{-
1713#if defined (BUFFERED_INPUT)-
1714 if ((check_zero && default_buffered_input >= 0) ||
check_zeroDescription
TRUEnever evaluated
FALSEevaluated 6639 times by 1 test
Evaluated by:
  • Self test
default_buffered_input >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0-6639
1715 (check_zero == 0 && default_buffered_input > 0))
check_zero == 0Description
TRUEevaluated 6639 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
default_buffered_input > 0Description
TRUEevaluated 4868 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1771 times by 1 test
Evaluated by:
  • Self test
0-6639
1716 {-
1717 close_buffered_fd (default_buffered_input);-
1718 default_buffered_input = bash_input.location.buffered_fd = -1;-
1719 bash_input.type = st_none; /* XXX */-
1720 }
executed 4868 times by 1 test: end of block
Executed by:
  • Self test
4868
1721#else /* !BUFFERED_INPUT */-
1722 if (default_input)-
1723 {-
1724 fclose (default_input);-
1725 default_input = (FILE *)NULL;-
1726 }-
1727#endif /* !BUFFERED_INPUT */-
1728}
executed 6639 times by 1 test: end of block
Executed by:
  • Self test
6639
1729 -
1730-
1731#if !defined (PROGRAM)-
1732# define PROGRAM "bash"-
1733#endif-
1734-
1735static void-
1736set_shell_name (argv0)-
1737 char *argv0;-
1738{-
1739 /* Here's a hack. If the name of this shell is "sh", then don't do-
1740 any startup files; just try to be more like /bin/sh. */-
1741 shell_name = argv0 ? base_pathname (argv0) : PROGRAM;
argv0Description
TRUEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5447
1742-
1743 if (argv0 && *argv0 == '-')
argv0Description
TRUEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
*argv0 == '-'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5446 times by 1 test
Evaluated by:
  • Self test
0-5447
1744 {-
1745 if (*shell_name == '-')
*shell_name == '-'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-1
1746 shell_name++;
executed 1 time by 1 test: shell_name++;
Executed by:
  • Self test
1
1747 login_shell = 1;-
1748 }
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
1749-
1750 if (shell_name[0] == 's' && shell_name[1] == 'h' && shell_name[2] == '\0')
shell_name[0] == 's'Description
TRUEevaluated 40 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5407 times by 1 test
Evaluated by:
  • Self test
shell_name[1] == 'h'Description
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 2 times by 1 test
Evaluated by:
  • Self test
shell_name[2] == '\0'Description
TRUEevaluated 38 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5407
1751 act_like_sh++;
executed 38 times by 1 test: act_like_sh++;
Executed by:
  • Self test
38
1752 if (shell_name[0] == 's' && shell_name[1] == 'u' && shell_name[2] == '\0')
shell_name[0] == 's'Description
TRUEevaluated 40 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5407 times by 1 test
Evaluated by:
  • Self test
shell_name[1] == 'u'Description
TRUEnever evaluated
FALSEevaluated 40 times by 1 test
Evaluated by:
  • Self test
shell_name[2] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0-5407
1753 su_shell++;
never executed: su_shell++;
0
1754-
1755 shell_name = argv0 ? argv0 : PROGRAM;
argv0Description
TRUEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-5447
1756 FREE (dollar_vars[0]);
executed 15 times by 1 test: sh_xfree((dollar_vars[0]), "shell.c", 1756);
Executed by:
  • Self test
dollar_vars[0]Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
15-5432
1757 dollar_vars[0] = savestring (shell_name);-
1758-
1759 /* A program may start an interactive shell with-
1760 "execl ("/bin/bash", "-", NULL)".-
1761 If so, default the name of this shell to our name. */-
1762 if (!shell_name || !*shell_name || (shell_name[0] == '-' && !shell_name[1]))
!shell_nameDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
!*shell_nameDescription
TRUEnever evaluated
FALSEevaluated 5447 times by 1 test
Evaluated by:
  • Self test
shell_name[0] == '-'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5446 times by 1 test
Evaluated by:
  • Self test
!shell_name[1]Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
0-5447
1763 shell_name = PROGRAM;
never executed: shell_name = "bash";
0
1764}
executed 5447 times by 1 test: end of block
Executed by:
  • Self test
5447
1765-
1766static void-
1767init_interactive ()-
1768{-
1769 expand_aliases = interactive_shell = startup_state = 1;-
1770 interactive = 1;-
1771#if defined (HISTORY)-
1772 remember_on_history = enable_history_list = 1; /* XXX */-
1773 histexp_flag = history_expansion; /* XXX */-
1774#endif-
1775}
executed 2 times by 1 test: end of block
Executed by:
  • Self test
2
1776-
1777static void-
1778init_noninteractive ()-
1779{-
1780#if defined (HISTORY)-
1781 bash_history_reinit (0);-
1782#endif /* HISTORY */-
1783 interactive_shell = startup_state = interactive = 0;-
1784 expand_aliases = posixly_correct; /* XXX - was 0 not posixly_correct */-
1785 no_line_editing = 1;-
1786#if defined (JOB_CONTROL)-
1787 /* Even if the shell is not interactive, enable job control if the -i or-
1788 -m option is supplied at startup. */-
1789 set_job_control (forced_interactive||jobs_m_flag);-
1790#endif /* JOB_CONTROL */-
1791}
executed 5446 times by 1 test: end of block
Executed by:
  • Self test
5446
1792-
1793static void-
1794init_interactive_script ()-
1795{-
1796 init_noninteractive ();-
1797 expand_aliases = interactive_shell = startup_state = 1;-
1798#if defined (HISTORY)-
1799 remember_on_history = enable_history_list = 1; /* XXX */-
1800#endif-
1801}
executed 1 time by 1 test: end of block
Executed by:
  • Self test
1
1802-
1803void-
1804get_current_user_info ()-
1805{-
1806 struct passwd *entry;-
1807-
1808 /* Don't fetch this more than once. */-
1809 if (current_user.user_name == 0)
current_user.user_name == 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-8
1810 {-
1811#if defined (__TANDEM)-
1812 entry = getpwnam (getlogin ());-
1813#else-
1814 entry = getpwuid (current_user.uid);-
1815#endif-
1816 if (entry)
entryDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-8
1817 {-
1818 current_user.user_name = savestring (entry->pw_name);-
1819 current_user.shell = (entry->pw_shell && entry->pw_shell[0])
entry->pw_shellDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
entry->pw_shell[0]Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-8
1820 ? savestring (entry->pw_shell)-
1821 : savestring ("/bin/sh");-
1822 current_user.home_dir = savestring (entry->pw_dir);-
1823 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test
8
1824 else-
1825 {-
1826 current_user.user_name = _("I have no name!");-
1827 current_user.user_name = savestring (current_user.user_name);-
1828 current_user.shell = savestring ("/bin/sh");-
1829 current_user.home_dir = savestring ("/");-
1830 }
never executed: end of block
0
1831#if defined (HAVE_GETPWENT)-
1832 endpwent ();-
1833#endif-
1834 }
executed 8 times by 1 test: end of block
Executed by:
  • Self test
8
1835}
executed 8 times by 1 test: end of block
Executed by:
  • Self test
8
1836-
1837/* Do whatever is necessary to initialize the shell.-
1838 Put new initializations in here. */-
1839static void-
1840shell_initialize ()-
1841{-
1842 char hostname[256];-
1843 int should_be_restricted;-
1844-
1845 /* Line buffer output for stderr and stdout. */-
1846 if (shell_initialized == 0)
shell_initialized == 0Description
TRUEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test
15-5432
1847 {-
1848 sh_setlinebuf (stderr);-
1849 sh_setlinebuf (stdout);-
1850 }
executed 5432 times by 1 test: end of block
Executed by:
  • Self test
5432
1851-
1852 /* Sort the array of shell builtins so that the binary search in-
1853 find_shell_builtin () works correctly. */-
1854 initialize_shell_builtins ();-
1855-
1856 /* Initialize the trap signal handlers before installing our own-
1857 signal handlers. traps.c:restore_original_signals () is responsible-
1858 for restoring the original default signal handlers. That function-
1859 is called when we make a new child. */-
1860 initialize_traps ();-
1861 initialize_signals (0);-
1862-
1863 /* It's highly unlikely that this will change. */-
1864 if (current_host_name == 0)
current_host_name == 0Description
TRUEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 15 times by 1 test
Evaluated by:
  • Self test
15-5432
1865 {-
1866 /* Initialize current_host_name. */-
1867 if (gethostname (hostname, 255) < 0)
gethostname (h...name, 255) < 0Description
TRUEnever evaluated
FALSEevaluated 5432 times by 1 test
Evaluated by:
  • Self test
0-5432
1868 current_host_name = "??host??";
never executed: current_host_name = "??host??";
0
1869 else-
1870 current_host_name = savestring (hostname);
executed 5432 times by 1 test: current_host_name = (char *)strcpy (sh_xmalloc((1 + strlen (hostname)), "shell.c", 1870), (hostname));
Executed by:
  • Self test
5432
1871 }-
1872-
1873 /* Initialize the stuff in current_user that comes from the password-
1874 file. We don't need to do this right away if the shell is not-
1875 interactive. */-
1876 if (interactive_shell)
interactive_shellDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5445 times by 1 test
Evaluated by:
  • Self test
2-5445
1877 get_current_user_info ();
executed 2 times by 1 test: get_current_user_info ();
Executed by:
  • Self test
2
1878-
1879 /* Initialize our interface to the tilde expander. */-
1880 tilde_initialize ();-
1881-
1882#if defined (RESTRICTED_SHELL)-
1883 should_be_restricted = shell_is_restricted (shell_name);-
1884#endif-
1885-
1886 /* Initialize internal and environment variables. Don't import shell-
1887 functions from the environment if we are running in privileged or-
1888 restricted mode or if the shell is running setuid. */-
1889#if defined (RESTRICTED_SHELL)-
1890 initialize_shell_variables (shell_environment, privileged_mode||restricted||should_be_restricted||running_setuid);-
1891#else-
1892 initialize_shell_variables (shell_environment, privileged_mode||running_setuid);-
1893#endif-
1894-
1895 /* Initialize the data structures for storing and running jobs. */-
1896 initialize_job_control (jobs_m_flag);-
1897-
1898 /* Initialize input streams to null. */-
1899 initialize_bash_input ();-
1900-
1901 initialize_flags ();-
1902-
1903 /* Initialize the shell options. Don't import the shell options-
1904 from the environment variables $SHELLOPTS or $BASHOPTS if we are-
1905 running in privileged or restricted mode or if the shell is running-
1906 setuid. */-
1907#if defined (RESTRICTED_SHELL)-
1908 initialize_shell_options (privileged_mode||restricted||should_be_restricted||running_setuid);-
1909 initialize_bashopts (privileged_mode||restricted||should_be_restricted||running_setuid);-
1910#else-
1911 initialize_shell_options (privileged_mode||running_setuid);-
1912 initialize_bashopts (privileged_mode||running_setuid);-
1913#endif-
1914}
executed 5447 times by 1 test: end of block
Executed by:
  • Self test
5447
1915-
1916/* Function called by main () when it appears that the shell has already-
1917 had some initialization performed. This is supposed to reset the world-
1918 back to a pristine state, as if we had been exec'ed. */-
1919static void-
1920shell_reinitialize ()-
1921{-
1922 /* The default shell prompts. */-
1923 primary_prompt = PPROMPT;-
1924 secondary_prompt = SPROMPT;-
1925-
1926 /* Things that get 1. */-
1927 current_command_number = 1;-
1928-
1929 /* We have decided that the ~/.bashrc file should not be executed-
1930 for the invocation of each shell script. If the variable $ENV-
1931 (or $BASH_ENV) is set, its value is used as the name of a file-
1932 to source. */-
1933 no_rc = no_profile = 1;-
1934-
1935 /* Things that get 0. */-
1936 login_shell = make_login_shell = interactive = executing = 0;-
1937 debugging = do_version = line_number = last_command_exit_value = 0;-
1938 forced_interactive = interactive_shell = 0;-
1939 subshell_environment = running_in_background = 0;-
1940 expand_aliases = 0;-
1941 bash_argv_initialized = 0;-
1942-
1943 /* XXX - should we set jobs_m_flag to 0 here? */-
1944-
1945#if defined (HISTORY)-
1946 bash_history_reinit (enable_history_list = 0);-
1947#endif /* HISTORY */-
1948-
1949#if defined (RESTRICTED_SHELL)-
1950 restricted = 0;-
1951#endif /* RESTRICTED_SHELL */-
1952-
1953 /* Ensure that the default startup file is used. (Except that we don't-
1954 execute this file for reinitialized shells). */-
1955 bashrc_file = DEFAULT_BASHRC;-
1956-
1957 /* Delete all variables and functions. They will be reinitialized when-
1958 the environment is parsed. */-
1959 delete_all_contexts (shell_variables);-
1960 delete_all_variables (shell_functions);-
1961-
1962 reinit_special_variables ();-
1963-
1964#if defined (READLINE)-
1965 bashline_reinitialize ();-
1966#endif-
1967-
1968 shell_reinitialized = 1;-
1969}
executed 15 times by 1 test: end of block
Executed by:
  • Self test
15
1970-
1971static void-
1972show_shell_usage (fp, extra)-
1973 FILE *fp;-
1974 int extra;-
1975{-
1976 int i;-
1977 char *set_opts, *s, *t;-
1978-
1979 if (extra)
extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
1980 fprintf (fp, _("GNU bash, version %s-(%s)\n"), shell_version_string (), MACHTYPE);
never executed: fprintf (fp, dcgettext (((void *)0), "GNU bash, version %s-(%s)\n" , 5) , shell_version_string (), "x86_64-pc-linux-gnu");
0
1981 fprintf (fp, _("Usage:\t%s [GNU long option] [option] ...\n\t%s [GNU long option] [option] script-file ...\n"),-
1982 shell_name, shell_name);-
1983 fputs (_("GNU long options:\n"), fp);-
1984 for (i = 0; long_args[i].name; i++)
long_args[i].nameDescription
TRUEnever evaluated
FALSEnever evaluated
0
1985 fprintf (fp, "\t--%s\n", long_args[i].name);
never executed: fprintf (fp, "\t--%s\n", long_args[i].name);
0
1986-
1987 fputs (_("Shell options:\n"), fp);-
1988 fputs (_("\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"), fp);-
1989-
1990 for (i = 0, set_opts = 0; shell_builtins[i].name; i++)
shell_builtins[i].nameDescription
TRUEnever evaluated
FALSEnever evaluated
0
1991 if (STREQ (shell_builtins[i].name, "set"))
never executed: __result = (((const unsigned char *) (const char *) ( shell_builtins[i].name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "set" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(shell_builtin... == ("set")[0]Description
TRUEnever evaluated
FALSEnever evaluated
__extension__ ... )))); }) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1992 set_opts = savestring (shell_builtins[i].short_doc);
never executed: set_opts = (char *)strcpy (sh_xmalloc((1 + strlen (shell_builtins[i].short_doc)), "shell.c", 1992), (shell_builtins[i].short_doc));
0
1993 if (set_opts)
set_optsDescription
TRUEnever evaluated
FALSEnever evaluated
0
1994 {-
1995 s = strchr (set_opts, '[');
__builtin_constant_p ( '[' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con...p ( set_opts )Description
TRUEnever evaluated
FALSEnever evaluated
( '[' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1996 if (s == 0)
s == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1997 s = set_opts;
never executed: s = set_opts;
0
1998 while (*++s == '-')
*++s == '-'Description
TRUEnever evaluated
FALSEnever evaluated
0
1999 ;
never executed: ;
0
2000 t = strchr (s, ']');
__builtin_constant_p ( ']' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_constant_p ( s )Description
TRUEnever evaluated
FALSEnever evaluated
( ']' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
2001 if (t)
tDescription
TRUEnever evaluated
FALSEnever evaluated
0
2002 *t = '\0';
never executed: *t = '\0';
0
2003 fprintf (fp, _("\t-%s or -o option\n"), s);-
2004 free (set_opts);-
2005 }
never executed: end of block
0
2006-
2007 if (extra)
extraDescription
TRUEnever evaluated
FALSEnever evaluated
0
2008 {-
2009 fprintf (fp, _("Type `%s -c \"help set\"' for more information about shell options.\n"), shell_name);-
2010 fprintf (fp, _("Type `%s -c help' for more information about shell builtin commands.\n"), shell_name);-
2011 fprintf (fp, _("Use the `bashbug' command to report bugs.\n"));-
2012 fprintf (fp, "\n");-
2013 fprintf (fp, _("bash home page: <http://www.gnu.org/software/bash>\n"));-
2014 fprintf (fp, _("General help using GNU software: <http://www.gnu.org/gethelp/>\n"));-
2015 }
never executed: end of block
0
2016}
never executed: end of block
0
2017-
2018static void-
2019add_shopt_to_alist (opt, on_or_off)-
2020 char *opt;-
2021 int on_or_off;-
2022{-
2023 if (shopt_ind >= shopt_len)
shopt_ind >= shopt_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
2024 {-
2025 shopt_len += 8;-
2026 shopt_alist = (STRING_INT_ALIST *)xrealloc (shopt_alist, shopt_len * sizeof (shopt_alist[0]));-
2027 }
never executed: end of block
0
2028 shopt_alist[shopt_ind].word = opt;-
2029 shopt_alist[shopt_ind].token = on_or_off;-
2030 shopt_ind++;-
2031}
never executed: end of block
0
2032-
2033static void-
2034run_shopt_alist ()-
2035{-
2036 register int i;-
2037-
2038 for (i = 0; i < shopt_ind; i++)
i < shopt_indDescription
TRUEnever evaluated
FALSEnever evaluated
0
2039 if (shopt_setopt (shopt_alist[i].word, (shopt_alist[i].token == '-')) != EXECUTION_SUCCESS)
shopt_setopt (... == '-')) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2040 exit (EX_BADUSAGE);
never executed: exit (2);
0
2041 free (shopt_alist);-
2042 shopt_alist = 0;-
2043 shopt_ind = shopt_len = 0;-
2044}
never executed: end of block
0
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2