Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/bash/src/builtins/command.def |
Source code | Switch to Preprocessed file |
Line | Source | Count | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | This file is command.def, from which is created command.c. | - | ||||||||||||
2 | It implements the builtin "command" in Bash. | - | ||||||||||||
3 | - | |||||||||||||
4 | Copyright (C) 1987-2015 Free Software Foundation, Inc. | - | ||||||||||||
5 | - | |||||||||||||
6 | This file is part of GNU Bash, the Bourne Again SHell. | - | ||||||||||||
7 | - | |||||||||||||
8 | Bash is free software: you can redistribute it and/or modify | - | ||||||||||||
9 | it under the terms of the GNU General Public License as published by | - | ||||||||||||
10 | the Free Software Foundation, either version 3 of the License, or | - | ||||||||||||
11 | (at your option) any later version. | - | ||||||||||||
12 | - | |||||||||||||
13 | Bash is distributed in the hope that it will be useful, | - | ||||||||||||
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | - | ||||||||||||
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | - | ||||||||||||
16 | GNU General Public License for more details. | - | ||||||||||||
17 | - | |||||||||||||
18 | You should have received a copy of the GNU General Public License | - | ||||||||||||
19 | along with Bash. If not, see <http://www.gnu.org/licenses/>. | - | ||||||||||||
20 | - | |||||||||||||
21 | $PRODUCES command.c | - | ||||||||||||
22 | - | |||||||||||||
23 | $BUILTIN command | - | ||||||||||||
24 | $FUNCTION command_builtin | - | ||||||||||||
25 | $SHORT_DOC command [-pVv] command [arg ...] | - | ||||||||||||
26 | Execute a simple command or display information about commands. | - | ||||||||||||
27 | - | |||||||||||||
28 | Runs COMMAND with ARGS suppressing shell function lookup, or display | - | ||||||||||||
29 | information about the specified COMMANDs. Can be used to invoke commands | - | ||||||||||||
30 | on disk when a function with the same name exists. | - | ||||||||||||
31 | - | |||||||||||||
32 | Options: | - | ||||||||||||
33 | -p use a default value for PATH that is guaranteed to find all of | - | ||||||||||||
34 | the standard utilities | - | ||||||||||||
35 | -v print a description of COMMAND similar to the `type' builtin | - | ||||||||||||
36 | -V print a more verbose description of each COMMAND | - | ||||||||||||
37 | - | |||||||||||||
38 | Exit Status: | - | ||||||||||||
39 | Returns exit status of COMMAND, or failure if COMMAND is not found. | - | ||||||||||||
40 | $END | - | ||||||||||||
41 | - | |||||||||||||
42 | #include <config.h> | - | ||||||||||||
43 | - | |||||||||||||
44 | #if defined (HAVE_UNISTD_H) | - | ||||||||||||
45 | # ifdef _MINIX | - | ||||||||||||
46 | # include <sys/types.h> | - | ||||||||||||
47 | # endif | - | ||||||||||||
48 | # include <unistd.h> | - | ||||||||||||
49 | #endif | - | ||||||||||||
50 | - | |||||||||||||
51 | #include "../bashansi.h" | - | ||||||||||||
52 | - | |||||||||||||
53 | #include "../shell.h" | - | ||||||||||||
54 | #include "../execute_cmd.h" | - | ||||||||||||
55 | #include "../flags.h" | - | ||||||||||||
56 | #include "bashgetopt.h" | - | ||||||||||||
57 | #include "common.h" | - | ||||||||||||
58 | - | |||||||||||||
59 | #if defined (_CS_PATH) && defined (HAVE_CONFSTR) && !HAVE_DECL_CONFSTR | - | ||||||||||||
60 | extern size_t confstr __P((int, char *, size_t)); | - | ||||||||||||
61 | #endif | - | ||||||||||||
62 | - | |||||||||||||
63 | /* Run the commands mentioned in LIST without paying attention to shell | - | ||||||||||||
64 | functions. */ | - | ||||||||||||
65 | int | - | ||||||||||||
66 | command_builtin (list) | - | ||||||||||||
67 | WORD_LIST *list; | - | ||||||||||||
68 | { | - | ||||||||||||
69 | int result, verbose, use_standard_path, opt; | - | ||||||||||||
70 | COMMAND *command; | - | ||||||||||||
71 | - | |||||||||||||
72 | verbose = use_standard_path = 0; | - | ||||||||||||
73 | reset_internal_getopt (); | - | ||||||||||||
74 | while ((opt = internal_getopt (list, "pvV")) != -1)
| 70-111 | ||||||||||||
75 | { | - | ||||||||||||
76 | switch (opt) | - | ||||||||||||
77 | { | - | ||||||||||||
78 | case 'p': executed 35 times by 1 test: case 'p': Executed by:
| 35 | ||||||||||||
79 | use_standard_path = CDESC_STDPATH; | - | ||||||||||||
80 | break; executed 35 times by 1 test: break; Executed by:
| 35 | ||||||||||||
81 | case 'V': executed 10 times by 1 test: case 'V': Executed by:
| 10 | ||||||||||||
82 | verbose = CDESC_SHORTDESC|CDESC_ABSPATH; /* look in common.h for constants */ | - | ||||||||||||
83 | break; executed 10 times by 1 test: break; Executed by:
| 10 | ||||||||||||
84 | case 'v': executed 24 times by 1 test: case 'v': Executed by:
| 24 | ||||||||||||
85 | verbose = CDESC_REUSABLE; /* ditto */ | - | ||||||||||||
86 | break; executed 24 times by 1 test: break; Executed by:
| 24 | ||||||||||||
87 | CASE_HELPOPT; never executed: return (258); never executed: case -99: | 0 | ||||||||||||
88 | default: executed 1 time by 1 test: default: Executed by:
| 1 | ||||||||||||
89 | builtin_usage (); | - | ||||||||||||
90 | return (EX_USAGE); executed 1 time by 1 test: return (258); Executed by:
| 1 | ||||||||||||
91 | } | - | ||||||||||||
92 | } | - | ||||||||||||
93 | list = loptend; | - | ||||||||||||
94 | - | |||||||||||||
95 | if (list == 0)
| 9-102 | ||||||||||||
96 | return (EXECUTION_SUCCESS); executed 9 times by 1 test: return (0); Executed by:
| 9 | ||||||||||||
97 | - | |||||||||||||
98 | #if defined (RESTRICTED_SHELL) | - | ||||||||||||
99 | if (use_standard_path && restricted)
| 1-67 | ||||||||||||
100 | { | - | ||||||||||||
101 | sh_restricted ("-p"); | - | ||||||||||||
102 | return (EXECUTION_FAILURE); executed 1 time by 1 test: return (1); Executed by:
| 1 | ||||||||||||
103 | } | - | ||||||||||||
104 | #endif | - | ||||||||||||
105 | - | |||||||||||||
106 | if (verbose)
| 34-67 | ||||||||||||
107 | { | - | ||||||||||||
108 | int found, any_found; | - | ||||||||||||
109 | - | |||||||||||||
110 | for (any_found = 0; list; list = list->next)
| 34 | ||||||||||||
111 | { | - | ||||||||||||
112 | found = describe_command (list->word->word, verbose|use_standard_path); | - | ||||||||||||
113 | - | |||||||||||||
114 | if (found == 0 && verbose != CDESC_REUSABLE)
| 0-26 | ||||||||||||
115 | sh_notfound (list->word->word); never executed: sh_notfound (list->word->word); | 0 | ||||||||||||
116 | - | |||||||||||||
117 | any_found += found; | - | ||||||||||||
118 | } executed 34 times by 1 test: end of block Executed by:
| 34 | ||||||||||||
119 | - | |||||||||||||
120 | return (any_found ? EXECUTION_SUCCESS : EXECUTION_FAILURE); executed 34 times by 1 test: return (any_found ? 0 : 1); Executed by:
| 34 | ||||||||||||
121 | } | - | ||||||||||||
122 | - | |||||||||||||
123 | begin_unwind_frame ("command_builtin"); | - | ||||||||||||
124 | - | |||||||||||||
125 | #define COMMAND_BUILTIN_FLAGS (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION | CMD_COMMAND_BUILTIN | (use_standard_path ? CMD_STDPATH : 0)) | - | ||||||||||||
126 | - | |||||||||||||
127 | /* We don't want this to be reparsed (consider command echo 'foo &'), so | - | ||||||||||||
128 | just make a simple_command structure and call execute_command with it. */ | - | ||||||||||||
129 | command = make_bare_simple_command (); | - | ||||||||||||
130 | command->value.Simple->words = (WORD_LIST *)copy_word_list (list); | - | ||||||||||||
131 | command->value.Simple->redirects = (REDIRECT *)NULL; | - | ||||||||||||
132 | command->flags |= COMMAND_BUILTIN_FLAGS; | - | ||||||||||||
133 | command->value.Simple->flags |= COMMAND_BUILTIN_FLAGS; | - | ||||||||||||
134 | - | |||||||||||||
135 | add_unwind_protect ((char *)dispose_command, command); | - | ||||||||||||
136 | result = execute_command (command); | - | ||||||||||||
137 | - | |||||||||||||
138 | run_unwind_frame ("command_builtin"); | - | ||||||||||||
139 | - | |||||||||||||
140 | return (result); executed 64 times by 1 test: return (result); Executed by:
| 64 | ||||||||||||
141 | } | - | ||||||||||||
Source code | Switch to Preprocessed file |