1 | /* shell.h -- The data structures used by the shell */ |
---|
2 | |
---|
3 | /* Copyright (C) 1993 Free Software Foundation, Inc. |
---|
4 | |
---|
5 | This file is part of GNU Bash, the Bourne Again SHell. |
---|
6 | |
---|
7 | Bash is free software; you can redistribute it and/or modify it under |
---|
8 | the terms of the GNU General Public License as published by the Free |
---|
9 | Software Foundation; either version 2, or (at your option) any later |
---|
10 | version. |
---|
11 | |
---|
12 | Bash is distributed in the hope that it will be useful, but WITHOUT ANY |
---|
13 | WARRANTY; without even the implied warranty of MERCHANTABILITY or |
---|
14 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
---|
15 | for more details. |
---|
16 | |
---|
17 | You should have received a copy of the GNU General Public License along |
---|
18 | with Bash; see the file COPYING. If not, write to the Free Software |
---|
19 | Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ |
---|
20 | |
---|
21 | #ifdef HAVE_CONFIG_H |
---|
22 | #include "config.h" |
---|
23 | #endif |
---|
24 | |
---|
25 | #include "bashjmp.h" |
---|
26 | |
---|
27 | #include "command.h" |
---|
28 | #include "syntax.h" |
---|
29 | #include "general.h" |
---|
30 | #include "error.h" |
---|
31 | #include "variables.h" |
---|
32 | #include "arrayfunc.h" |
---|
33 | #include "quit.h" |
---|
34 | #include "maxpath.h" |
---|
35 | #include "unwind_prot.h" |
---|
36 | #include "dispose_cmd.h" |
---|
37 | #include "make_cmd.h" |
---|
38 | #include "ocache.h" |
---|
39 | #include "subst.h" |
---|
40 | #include "sig.h" |
---|
41 | #include "pathnames.h" |
---|
42 | #include "externs.h" |
---|
43 | #include "version.h" |
---|
44 | |
---|
45 | extern int EOF_Reached; |
---|
46 | |
---|
47 | #define NO_PIPE -1 |
---|
48 | #define REDIRECT_BOTH -2 |
---|
49 | |
---|
50 | #define NO_VARIABLE -1 |
---|
51 | |
---|
52 | /* Values that can be returned by execute_command (). */ |
---|
53 | #define EXECUTION_FAILURE 1 |
---|
54 | #define EXECUTION_SUCCESS 0 |
---|
55 | |
---|
56 | /* Usage messages by builtins result in a return status of 2. */ |
---|
57 | #define EX_BADUSAGE 2 |
---|
58 | |
---|
59 | /* Special exit statuses used by the shell, internally and externally. */ |
---|
60 | #define EX_BINARY_FILE 126 |
---|
61 | #define EX_NOEXEC 126 |
---|
62 | #define EX_NOINPUT 126 |
---|
63 | #define EX_NOTFOUND 127 |
---|
64 | |
---|
65 | #define EX_SHERRBASE 256 /* all special error values are > this. */ |
---|
66 | |
---|
67 | #define EX_BADSYNTAX 257 /* shell syntax error */ |
---|
68 | #define EX_USAGE 258 /* syntax error in usage */ |
---|
69 | #define EX_REDIRFAIL 259 /* redirection failed */ |
---|
70 | #define EX_BADASSIGN 260 /* variable assignment error */ |
---|
71 | #define EX_EXPFAIL 261 /* word expansion failed */ |
---|
72 | |
---|
73 | /* Flag values that control parameter pattern substitution. */ |
---|
74 | #define MATCH_ANY 0x0 |
---|
75 | #define MATCH_BEG 0x1 |
---|
76 | #define MATCH_END 0x2 |
---|
77 | |
---|
78 | #define MATCH_TYPEMASK 0x3 |
---|
79 | |
---|
80 | #define MATCH_GLOBREP 0x10 |
---|
81 | #define MATCH_QUOTED 0x20 |
---|
82 | |
---|
83 | /* Some needed external declarations. */ |
---|
84 | extern char **shell_environment; |
---|
85 | extern WORD_LIST *rest_of_args; |
---|
86 | |
---|
87 | /* Generalized global variables. */ |
---|
88 | extern int executing, login_shell; |
---|
89 | extern int interactive, interactive_shell; |
---|
90 | extern int startup_state; |
---|
91 | |
---|
92 | /* Structure to pass around that holds a bitmap of file descriptors |
---|
93 | to close, and the size of that structure. Used in execute_cmd.c. */ |
---|
94 | struct fd_bitmap { |
---|
95 | int size; |
---|
96 | char *bitmap; |
---|
97 | }; |
---|
98 | |
---|
99 | #define FD_BITMAP_SIZE 32 |
---|
100 | |
---|
101 | #define CTLESC '\001' |
---|
102 | #define CTLNUL '\177' |
---|
103 | |
---|
104 | /* Information about the current user. */ |
---|
105 | struct user_info { |
---|
106 | uid_t uid, euid; |
---|
107 | gid_t gid, egid; |
---|
108 | char *user_name; |
---|
109 | char *shell; /* shell from the password file */ |
---|
110 | char *home_dir; |
---|
111 | }; |
---|
112 | |
---|
113 | extern struct user_info current_user; |
---|
114 | |
---|
115 | /* Force gcc to not clobber X on a longjmp(). Old versions of gcc mangle |
---|
116 | this badly. */ |
---|
117 | #if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ > 8) |
---|
118 | # define USE_VAR(x) ((void) &(x)) |
---|
119 | #else |
---|
120 | # define USE_VAR(x) |
---|
121 | #endif |
---|