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