]> git.ipfire.org Git - thirdparty/bash.git/blame - shell.h
Bash-5.2 patch 26: fix typo when specifying readline's custom color prefix
[thirdparty/bash.git] / shell.h
CommitLineData
726f6388
JA
1/* shell.h -- The data structures used by the shell */
2
74091dd4 3/* Copyright (C) 1993-2021 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
74091dd4 88#define MATCH_EXPREP 0x100 /* for pattern substitution, expand replacement */
726f6388 89
ccc6cda3 90/* Some needed external declarations. */
726f6388
JA
91extern char **shell_environment;
92extern WORD_LIST *rest_of_args;
93
94/* Generalized global variables. */
d233b485
CR
95extern char *command_execution_string;
96
b80f6443 97extern int debugging_mode;
726f6388 98extern int executing, login_shell;
f73dda09 99extern int interactive, interactive_shell;
7117c2d2 100extern int startup_state;
d233b485
CR
101extern int reading_shell_script;
102extern int shell_initialized;
103extern int bash_argv_initialized;
0001803f 104extern int subshell_environment;
d233b485
CR
105extern int current_command_number;
106extern int indirection_level;
f1be666c 107extern int shell_compatibility_level;
d233b485
CR
108extern int running_under_emacs;
109
110extern int posixly_correct;
111extern int no_line_editing;
112
113extern char *shell_name;
114extern char *current_host_name;
115
116extern int subshell_argc;
117extern char **subshell_argv;
118extern char **subshell_envp;
119
120/* variables managed using shopt */
121extern int hup_on_exit;
122extern int check_jobs_at_exit;
123extern int autocd;
124extern int check_window_size;
125
126/* from version.c */
127extern int build_version, patch_level;
128extern char *dist_version, *release_status;
726f6388 129
ac50fbac 130extern int locale_mb_cur_max;
d233b485 131extern int locale_utf8locale;
ac50fbac 132
726f6388
JA
133/* Structure to pass around that holds a bitmap of file descriptors
134 to close, and the size of that structure. Used in execute_cmd.c. */
135struct fd_bitmap {
f73dda09 136 int size;
726f6388
JA
137 char *bitmap;
138};
139
140#define FD_BITMAP_SIZE 32
141
142#define CTLESC '\001'
143#define CTLNUL '\177'
144
145/* Information about the current user. */
146struct user_info {
d166f048
JA
147 uid_t uid, euid;
148 gid_t gid, egid;
726f6388
JA
149 char *user_name;
150 char *shell; /* shell from the password file */
151 char *home_dir;
152};
153
154extern struct user_info current_user;
f73dda09
JA
155
156/* Force gcc to not clobber X on a longjmp(). Old versions of gcc mangle
157 this badly. */
7117c2d2 158#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 8)
f73dda09
JA
159# define USE_VAR(x) ((void) &(x))
160#else
161# define USE_VAR(x)
162#endif
b80f6443 163
a0c0a00f
CR
164#define HEREDOC_MAX 16
165
b80f6443
JA
166/* Structure in which to save partial parsing state when doing things like
167 PROMPT_COMMAND and bash_execute_unix_command execution. */
168
74091dd4
CR
169typedef struct _sh_parser_state_t
170{
b80f6443
JA
171 /* parsing state */
172 int parser_state;
173 int *token_state;
174
b4839c27 175 char *token;
74091dd4
CR
176 size_t token_buffer_size;
177 int eof_token;
b4839c27 178
b80f6443
JA
179 /* input line state -- line number saved elsewhere */
180 int input_line_terminator;
181 int eof_encountered;
74091dd4 182 int eol_lookahead;
b80f6443
JA
183
184#if defined (HANDLE_MULTIBYTE)
185 /* Nothing right now for multibyte state, but might want something later. */
186#endif
187
495aee44
CR
188 char **prompt_string_pointer;
189
b80f6443
JA
190 /* history state affecting or modified by the parser */
191 int current_command_line_count;
192#if defined (HISTORY)
193 int remember_on_history;
194 int history_expansion_inhibited;
195#endif
196
197 /* execution state possibly modified by the parser */
198 int last_command_exit_value;
199#if defined (ARRAY_VARS)
200 ARRAY *pipestatus;
201#endif
202 sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
203
204 /* flags state affecting the parser */
205 int expand_aliases;
206 int echo_input_at_read;
daefb2c5 207 int need_here_doc;
a0c0a00f 208 int here_doc_first_line;
daefb2c5 209
74091dd4
CR
210 int esacs_needed;
211 int expecting_in;
212
a0c0a00f 213 /* structures affecting the parser */
74091dd4 214 void *pushed_strings;
a0c0a00f 215 REDIRECT *redir_stack[HEREDOC_MAX];
b80f6443
JA
216} sh_parser_state_t;
217
74091dd4
CR
218typedef struct _sh_input_line_state_t
219{
b4839c27 220 char *input_line;
ac50fbac
CR
221 size_t input_line_index;
222 size_t input_line_size;
223 size_t input_line_len;
8868edaf
CR
224#if defined (HANDLE_MULTIBYTE)
225 char *input_property;
226 size_t input_propsize;
227#endif
b4839c27
CR
228} sh_input_line_state_t;
229
b80f6443 230/* Let's try declaring these here. */
74091dd4
CR
231extern void shell_ungets PARAMS((char *));
232extern void rewind_input_string PARAMS((void));
233
8868edaf 234extern char *parser_remaining_input PARAMS((void));
ca6a2ba4 235
8868edaf
CR
236extern sh_parser_state_t *save_parser_state PARAMS((sh_parser_state_t *));
237extern void restore_parser_state PARAMS((sh_parser_state_t *));
b4839c27 238
8868edaf
CR
239extern sh_input_line_state_t *save_input_line_state PARAMS((sh_input_line_state_t *));
240extern void restore_input_line_state PARAMS((sh_input_line_state_t *));