]> git.ipfire.org Git - thirdparty/bash.git/blame - shell.h
Bash-4.1 patchlevel 11
[thirdparty/bash.git] / shell.h
CommitLineData
726f6388
JA
1/* shell.h -- The data structures used by the shell */
2
3185942a 3/* Copyright (C) 1993-2009 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
58/* Special exit statuses used by the shell, internally and externally. */
0001803f
CR
59#define EX_RETRYFAIL 124
60#define EX_WEXPCOMSUB 125
ccc6cda3
JA
61#define EX_BINARY_FILE 126
62#define EX_NOEXEC 126
63#define EX_NOINPUT 126
64#define EX_NOTFOUND 127
726f6388 65
ccc6cda3
JA
66#define EX_SHERRBASE 256 /* all special error values are > this. */
67
68#define EX_BADSYNTAX 257 /* shell syntax error */
69#define EX_USAGE 258 /* syntax error in usage */
70#define EX_REDIRFAIL 259 /* redirection failed */
71#define EX_BADASSIGN 260 /* variable assignment error */
72#define EX_EXPFAIL 261 /* word expansion failed */
726f6388 73
ccc6cda3 74/* Flag values that control parameter pattern substitution. */
b80f6443
JA
75#define MATCH_ANY 0x000
76#define MATCH_BEG 0x001
77#define MATCH_END 0x002
ccc6cda3 78
b80f6443 79#define MATCH_TYPEMASK 0x003
ccc6cda3 80
b80f6443
JA
81#define MATCH_GLOBREP 0x010
82#define MATCH_QUOTED 0x020
83#define MATCH_STARSUB 0x040
726f6388 84
ccc6cda3 85/* Some needed external declarations. */
726f6388
JA
86extern char **shell_environment;
87extern WORD_LIST *rest_of_args;
88
89/* Generalized global variables. */
b80f6443 90extern int debugging_mode;
726f6388 91extern int executing, login_shell;
f73dda09 92extern int interactive, interactive_shell;
7117c2d2 93extern int startup_state;
0001803f 94extern int subshell_environment;
f1be666c 95extern int shell_compatibility_level;
726f6388
JA
96
97/* Structure to pass around that holds a bitmap of file descriptors
98 to close, and the size of that structure. Used in execute_cmd.c. */
99struct fd_bitmap {
f73dda09 100 int size;
726f6388
JA
101 char *bitmap;
102};
103
104#define FD_BITMAP_SIZE 32
105
106#define CTLESC '\001'
107#define CTLNUL '\177'
108
109/* Information about the current user. */
110struct user_info {
d166f048
JA
111 uid_t uid, euid;
112 gid_t gid, egid;
726f6388
JA
113 char *user_name;
114 char *shell; /* shell from the password file */
115 char *home_dir;
116};
117
118extern struct user_info current_user;
f73dda09
JA
119
120/* Force gcc to not clobber X on a longjmp(). Old versions of gcc mangle
121 this badly. */
7117c2d2 122#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 8)
f73dda09
JA
123# define USE_VAR(x) ((void) &(x))
124#else
125# define USE_VAR(x)
126#endif
b80f6443
JA
127
128/* Structure in which to save partial parsing state when doing things like
129 PROMPT_COMMAND and bash_execute_unix_command execution. */
130
131typedef struct _sh_parser_state_t {
132
133 /* parsing state */
134 int parser_state;
135 int *token_state;
136
137 /* input line state -- line number saved elsewhere */
138 int input_line_terminator;
139 int eof_encountered;
140
141#if defined (HANDLE_MULTIBYTE)
142 /* Nothing right now for multibyte state, but might want something later. */
143#endif
144
145 /* history state affecting or modified by the parser */
146 int current_command_line_count;
147#if defined (HISTORY)
148 int remember_on_history;
149 int history_expansion_inhibited;
150#endif
151
152 /* execution state possibly modified by the parser */
153 int last_command_exit_value;
154#if defined (ARRAY_VARS)
155 ARRAY *pipestatus;
156#endif
157 sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
158
159 /* flags state affecting the parser */
160 int expand_aliases;
161 int echo_input_at_read;
162
163} sh_parser_state_t;
164
165/* Let's try declaring these here. */
166extern sh_parser_state_t *save_parser_state __P((sh_parser_state_t *));
167extern void restore_parser_state __P((sh_parser_state_t *));