]> git.ipfire.org Git - thirdparty/bash.git/blame - shell.h
Bash-5.1 patch 16: fix interpretation of multiple instances of ! in [[ conditional...
[thirdparty/bash.git] / shell.h
CommitLineData
726f6388
JA
1/* shell.h -- The data structures used by the shell */
2
8868edaf 3/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
726f6388
JA
4
5 This file is part of GNU Bash, the Bourne Again SHell.
6
3185942a
JA
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.
726f6388 11
3185942a
JA
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.
726f6388 16
3185942a
JA
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*/
726f6388 20
f73dda09 21#ifdef HAVE_CONFIG_H
726f6388 22#include "config.h"
f73dda09 23#endif
ccc6cda3
JA
24
25#include "bashjmp.h"
26
726f6388 27#include "command.h"
28ef6c31 28#include "syntax.h"
726f6388
JA
29#include "general.h"
30#include "error.h"
31#include "variables.h"
f73dda09 32#include "arrayfunc.h"
726f6388
JA
33#include "quit.h"
34#include "maxpath.h"
35#include "unwind_prot.h"
36#include "dispose_cmd.h"
37#include "make_cmd.h"
7117c2d2 38#include "ocache.h"
726f6388 39#include "subst.h"
ccc6cda3
JA
40#include "sig.h"
41#include "pathnames.h"
726f6388
JA
42#include "externs.h"
43
44extern int EOF_Reached;
45
46#define NO_PIPE -1
47#define REDIRECT_BOTH -2
726f6388
JA
48
49#define NO_VARIABLE -1
50
726f6388
JA
51/* Values that can be returned by execute_command (). */
52#define EXECUTION_FAILURE 1
53#define EXECUTION_SUCCESS 0
54
55/* Usage messages by builtins result in a return status of 2. */
ccc6cda3
JA
56#define EX_BADUSAGE 2
57
495aee44
CR
58#define EX_MISCERROR 2
59
ccc6cda3 60/* Special exit statuses used by the shell, internally and externally. */
0001803f
CR
61#define EX_RETRYFAIL 124
62#define EX_WEXPCOMSUB 125
ccc6cda3
JA
63#define EX_BINARY_FILE 126
64#define EX_NOEXEC 126
65#define EX_NOINPUT 126
66#define EX_NOTFOUND 127
726f6388 67
ccc6cda3
JA
68#define EX_SHERRBASE 256 /* all special error values are > this. */
69
70#define EX_BADSYNTAX 257 /* shell syntax error */
71#define EX_USAGE 258 /* syntax error in usage */
72#define EX_REDIRFAIL 259 /* redirection failed */
73#define EX_BADASSIGN 260 /* variable assignment error */
74#define EX_EXPFAIL 261 /* word expansion failed */
d233b485 75#define EX_DISKFALLBACK 262 /* fall back to disk command from builtin */
726f6388 76
ccc6cda3 77/* Flag values that control parameter pattern substitution. */
b80f6443
JA
78#define MATCH_ANY 0x000
79#define MATCH_BEG 0x001
80#define MATCH_END 0x002
ccc6cda3 81
b80f6443 82#define MATCH_TYPEMASK 0x003
ccc6cda3 83
b80f6443
JA
84#define MATCH_GLOBREP 0x010
85#define MATCH_QUOTED 0x020
a0c0a00f
CR
86#define MATCH_ASSIGNRHS 0x040
87#define MATCH_STARSUB 0x080
726f6388 88
ccc6cda3 89/* Some needed external declarations. */
726f6388
JA
90extern char **shell_environment;
91extern WORD_LIST *rest_of_args;
92
93/* Generalized global variables. */
d233b485
CR
94extern char *command_execution_string;
95
b80f6443 96extern int debugging_mode;
726f6388 97extern int executing, login_shell;
f73dda09 98extern int interactive, interactive_shell;
7117c2d2 99extern int startup_state;
d233b485
CR
100extern int reading_shell_script;
101extern int shell_initialized;
102extern int bash_argv_initialized;
0001803f 103extern int subshell_environment;
d233b485
CR
104extern int current_command_number;
105extern int indirection_level;
f1be666c 106extern int shell_compatibility_level;
d233b485
CR
107extern int running_under_emacs;
108
109extern int posixly_correct;
110extern int no_line_editing;
111
112extern char *shell_name;
113extern char *current_host_name;
114
115extern int subshell_argc;
116extern char **subshell_argv;
117extern char **subshell_envp;
118
119/* variables managed using shopt */
120extern int hup_on_exit;
121extern int check_jobs_at_exit;
122extern int autocd;
123extern int check_window_size;
124
125/* from version.c */
126extern int build_version, patch_level;
127extern char *dist_version, *release_status;
726f6388 128
ac50fbac 129extern int locale_mb_cur_max;
d233b485 130extern int locale_utf8locale;
ac50fbac 131
726f6388
JA
132/* Structure to pass around that holds a bitmap of file descriptors
133 to close, and the size of that structure. Used in execute_cmd.c. */
134struct fd_bitmap {
f73dda09 135 int size;
726f6388
JA
136 char *bitmap;
137};
138
139#define FD_BITMAP_SIZE 32
140
141#define CTLESC '\001'
142#define CTLNUL '\177'
143
144/* Information about the current user. */
145struct user_info {
d166f048
JA
146 uid_t uid, euid;
147 gid_t gid, egid;
726f6388
JA
148 char *user_name;
149 char *shell; /* shell from the password file */
150 char *home_dir;
151};
152
153extern struct user_info current_user;
f73dda09
JA
154
155/* Force gcc to not clobber X on a longjmp(). Old versions of gcc mangle
156 this badly. */
7117c2d2 157#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 8)
f73dda09
JA
158# define USE_VAR(x) ((void) &(x))
159#else
160# define USE_VAR(x)
161#endif
b80f6443 162
a0c0a00f
CR
163#define HEREDOC_MAX 16
164
b80f6443
JA
165/* Structure in which to save partial parsing state when doing things like
166 PROMPT_COMMAND and bash_execute_unix_command execution. */
167
168typedef struct _sh_parser_state_t {
169
170 /* parsing state */
171 int parser_state;
172 int *token_state;
173
b4839c27
CR
174 char *token;
175 int token_buffer_size;
176
b80f6443
JA
177 /* input line state -- line number saved elsewhere */
178 int input_line_terminator;
179 int eof_encountered;
180
181#if defined (HANDLE_MULTIBYTE)
182 /* Nothing right now for multibyte state, but might want something later. */
183#endif
184
495aee44
CR
185 char **prompt_string_pointer;
186
b80f6443
JA
187 /* history state affecting or modified by the parser */
188 int current_command_line_count;
189#if defined (HISTORY)
190 int remember_on_history;
191 int history_expansion_inhibited;
192#endif
193
194 /* execution state possibly modified by the parser */
195 int last_command_exit_value;
196#if defined (ARRAY_VARS)
197 ARRAY *pipestatus;
198#endif
199 sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
200
201 /* flags state affecting the parser */
202 int expand_aliases;
203 int echo_input_at_read;
daefb2c5 204 int need_here_doc;
a0c0a00f 205 int here_doc_first_line;
daefb2c5 206
a0c0a00f
CR
207 /* structures affecting the parser */
208 REDIRECT *redir_stack[HEREDOC_MAX];
b80f6443
JA
209} sh_parser_state_t;
210
b4839c27
CR
211typedef struct _sh_input_line_state_t {
212 char *input_line;
ac50fbac
CR
213 size_t input_line_index;
214 size_t input_line_size;
215 size_t input_line_len;
8868edaf
CR
216#if defined (HANDLE_MULTIBYTE)
217 char *input_property;
218 size_t input_propsize;
219#endif
b4839c27
CR
220} sh_input_line_state_t;
221
b80f6443 222/* Let's try declaring these here. */
8868edaf 223extern char *parser_remaining_input PARAMS((void));
ca6a2ba4 224
8868edaf
CR
225extern sh_parser_state_t *save_parser_state PARAMS((sh_parser_state_t *));
226extern void restore_parser_state PARAMS((sh_parser_state_t *));
b4839c27 227
8868edaf
CR
228extern sh_input_line_state_t *save_input_line_state PARAMS((sh_input_line_state_t *));
229extern void restore_input_line_state PARAMS((sh_input_line_state_t *));