Imported from ../bash-2.05a.tar.gz.
This commit is contained in:
parent
28ef6c316f
commit
f73dda092b
303 changed files with 37069 additions and 28812 deletions
4
AUTHORS
4
AUTHORS
|
|
@ -153,8 +153,8 @@ lib/doc-support/getopt.c Roland McGrath
|
||||||
lib/doc-support/getopt1.c Roland McGrath
|
lib/doc-support/getopt1.c Roland McGrath
|
||||||
lib/glob/ChangeLog Brian Fox, Chet Ramey
|
lib/glob/ChangeLog Brian Fox, Chet Ramey
|
||||||
lib/glob/Makefile.in Brian Fox, Chet Ramey
|
lib/glob/Makefile.in Brian Fox, Chet Ramey
|
||||||
lib/glob/fnmatch.c Roland McGrath, Brian Fox, Chet Ramey
|
lib/glob/strmatch.c Roland McGrath, Brian Fox, Chet Ramey
|
||||||
lib/glob/fnmatch.h Roland McGrath, Brian Fox, Chet Ramey
|
lib/glob/strmatch.h Roland McGrath, Brian Fox, Chet Ramey
|
||||||
lib/glob/glob.c Richard Stallman, Roland McGrath, Brian Fox, Chet Ramey
|
lib/glob/glob.c Richard Stallman, Roland McGrath, Brian Fox, Chet Ramey
|
||||||
lib/glob/glob.h Chet Ramey
|
lib/glob/glob.h Chet Ramey
|
||||||
lib/glob/ndir.h Doug Gwyn, Richard Stallman
|
lib/glob/ndir.h Doug Gwyn, Richard Stallman
|
||||||
|
|
|
||||||
530
CHANGES
530
CHANGES
|
|
@ -1,3 +1,533 @@
|
||||||
|
This document details the changes between this version, bash-2.05a-release,
|
||||||
|
and the previous version, bash-2.05a-rc1.
|
||||||
|
|
||||||
|
1. Changes to Bash
|
||||||
|
|
||||||
|
a. Fixed the `printf' builtin so that the variable name supplied as an
|
||||||
|
argument to a %n conversion must be a valid shell identifier.
|
||||||
|
|
||||||
|
b. Improved the random number generator slightly.
|
||||||
|
|
||||||
|
c. Changes to configuration to not put -I/usr/include into $CFLAGS, since
|
||||||
|
it messes up some includes.
|
||||||
|
|
||||||
|
d. Corrected description of POSIXLY_CORRECT in man page and info manual.
|
||||||
|
|
||||||
|
e. Fixed a couple of cases of incorrect function prototypes that sneaked
|
||||||
|
through and caused compilation problems.
|
||||||
|
|
||||||
|
f. A few changes to avoid potential core dumps in the programmable completion
|
||||||
|
code.
|
||||||
|
|
||||||
|
g. Fixed a configure problem that could cause a non-existent file to show
|
||||||
|
up in LIBOBJS.
|
||||||
|
|
||||||
|
h. Fixed a configure problem that could cause siglist.o to not be built when
|
||||||
|
required.
|
||||||
|
|
||||||
|
i. Changes to the strtoimax and strtoumax replacement functions to work
|
||||||
|
around buggy compilers.
|
||||||
|
|
||||||
|
j. Fixed a problem with the snprintf replacement function that could
|
||||||
|
potentially cause a core dump.
|
||||||
|
|
||||||
|
2. Changes to Readline
|
||||||
|
|
||||||
|
a. Fixed a locale-specific problem in the vi-mode `goto mark' command.
|
||||||
|
|
||||||
|
b. Fixed Makefile to not put -I/usr/include into CFLAGS, since it can cause
|
||||||
|
include file problems.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
This document details the changes between this version, bash-2.05a-rc1,
|
||||||
|
and the previous version, bash-2.05a-beta1.
|
||||||
|
|
||||||
|
1. Changes to Bash
|
||||||
|
|
||||||
|
a. Fixed the snprintf replacement to correctly implement the `alternate form'
|
||||||
|
of the %g and %G conversions.
|
||||||
|
|
||||||
|
b. Fixed snprintf to correctly handle the optional precision with the %g and
|
||||||
|
%G conversions.
|
||||||
|
|
||||||
|
c. Fixed the arithmetic evaluation code to correct the values of `@' and `_'
|
||||||
|
when translating base-64 constants (they were backwards).
|
||||||
|
|
||||||
|
d. New library functions for formatting long and long long ints.
|
||||||
|
|
||||||
|
e. Fixed a few places where negative array subscripts could have occurred,
|
||||||
|
mostly as the result of systems using signed characters.
|
||||||
|
|
||||||
|
f. Fixed a few places that assumed a pid_t was no wider than an int.
|
||||||
|
|
||||||
|
g. Fixed the `maildir' mail checking code to work on systems where a
|
||||||
|
`struct stat' doesn't include an `st_blocks' member.
|
||||||
|
|
||||||
|
h. Fixed snprintf to make `unsigned long long' conversion formats (%llu)
|
||||||
|
work better.
|
||||||
|
|
||||||
|
i. Fixed snprintf to not print a sign when asked to do an unsigned conversion.
|
||||||
|
|
||||||
|
j. Made configure changes to avoid compiling empty source files in lib/sh.
|
||||||
|
|
||||||
|
k. New replacement functions (if necessary) for strtoull, strtoll, strtoimax,
|
||||||
|
strtoumax.
|
||||||
|
|
||||||
|
l. The `printf' builtin now handles the `ll' and `j' length modifiers
|
||||||
|
directly, since they can affect the type and width of the argument
|
||||||
|
passed to printf(3).
|
||||||
|
|
||||||
|
m. Renamed a number of the bash-specific autoconf macros in aclocal.m4 to
|
||||||
|
have more sytematic naming, with accompanying changes to configure.in.
|
||||||
|
|
||||||
|
n. Fixed snprintf to handle long doubles and the %a/%A conversions by
|
||||||
|
falling back to sprintf, as long as sprintf supports them.
|
||||||
|
|
||||||
|
o. Fixed return value from vsnprintf/snprintf to be the number of characters
|
||||||
|
that would have been printed, even if that number exceeds the buffer
|
||||||
|
size passed as an argument.
|
||||||
|
|
||||||
|
p. Bash no longer attempts to define its own versions of some ctype macros
|
||||||
|
if they are implemented as functions in libc but not as macros in
|
||||||
|
<ctype.h>.
|
||||||
|
|
||||||
|
q. Changed the variable printing code (used by `set', `export', etc.) to
|
||||||
|
not use the $'...' syntax when in posix mode, since that caused
|
||||||
|
interoperability problems with other shells (most notably with autoconf).
|
||||||
|
When not in posix mode, it uses $'...' if the string to be printed
|
||||||
|
contains non-printing characters and regular single quotes otherwise.
|
||||||
|
|
||||||
|
r. snprintf now recognizes the %F conversion.
|
||||||
|
|
||||||
|
s. Fixed a bug that could cause the wrong status to be returned by a shell
|
||||||
|
function when the shell is compiled without job control and a null
|
||||||
|
command containing a command substutition was executed in the function.
|
||||||
|
|
||||||
|
t. When in posix mode, the default value for MAILCHECK is 600.
|
||||||
|
|
||||||
|
u. Bash only initializes FUNCNAME, GROUPS, and DIRSTACK as special variables
|
||||||
|
if they're not in the initial environment.
|
||||||
|
|
||||||
|
v. If SECONDS appears in the initial environment with a valid integer value,
|
||||||
|
bash uses that as the starting value, as if an assignment had been
|
||||||
|
performed.
|
||||||
|
|
||||||
|
w. Bash no longer auto-exports HOME, PATH, SHELL, or TERM, even though it
|
||||||
|
gives them default values if they don't appear in the initial environment.
|
||||||
|
|
||||||
|
x. Bash no longer auto-exports HOSTNAME, HOSTTYPE, MACHTYPE, or OSTYPE,
|
||||||
|
even if it assigns them default values.
|
||||||
|
|
||||||
|
y. Bash no longer removes the export attribute from SSH_CLIENT or SSH2_CLIENT
|
||||||
|
if they appear in the initial environment.
|
||||||
|
|
||||||
|
z. Bash no longer attempts to discover if it's being run by sshd in order to
|
||||||
|
run the startup files. If the SSH_SOURCE_BASHRC is uncommented in
|
||||||
|
config-top.h it will attempt to do so as previously, but that's commented
|
||||||
|
out in the distributed version.
|
||||||
|
|
||||||
|
aa. Fixed a typo in the code that tests for LC_NUMERIC.
|
||||||
|
|
||||||
|
bb. The POSIXLY_CORRECT shell variable and its effects are now documented.
|
||||||
|
|
||||||
|
cc. Some changes to several of the support shell scripts included in the
|
||||||
|
definitions to try to avoid race conditions and attacks.
|
||||||
|
|
||||||
|
dd. Several changes to avoid warnings from `gcc -Wall'.
|
||||||
|
|
||||||
|
ee. Fixed a problem with the `unset' builtin that could cause incorrect
|
||||||
|
results if asked to unset a variable and an array subscript in the
|
||||||
|
same command.
|
||||||
|
|
||||||
|
ff. A few changes to the shell's temporary file creation code to avoid
|
||||||
|
potential file descriptor leaks and to prefer the system's idea of
|
||||||
|
the temporary directory to use.
|
||||||
|
|
||||||
|
gg. Fixes to build with the C alloca in lib/malloc/alloca.c if the system
|
||||||
|
requires it but the shell has been configured --without-bash-malloc.
|
||||||
|
|
||||||
|
hh. Updated the documentation to note that only interactive shells resend
|
||||||
|
SIGHUP to all jobs before exiting.
|
||||||
|
|
||||||
|
ii. Fixes to only pass unquoted tilde words to tilde_expand, rather than
|
||||||
|
rely on tilde_expand or getpwnam(3) to handle the quotes (MacOS 10.x
|
||||||
|
will remove backslashes in any login name passed to getpwnam(3)).
|
||||||
|
|
||||||
|
jj. Small change from Paul Eggert to make LINENO right in commands run with
|
||||||
|
`bash -c'.
|
||||||
|
|
||||||
|
2. New Features in Bash
|
||||||
|
|
||||||
|
a. The `printf' builtin now handles the %a and %A conversions if they're
|
||||||
|
implemented by printf(3).
|
||||||
|
|
||||||
|
b. The `printf' builtin now handles the %F conversion (just about like %f).
|
||||||
|
|
||||||
|
c. The `printf' builtin now handles the %n conversion like printf(3). The
|
||||||
|
corresponding argument is the name of a shell variable to which the
|
||||||
|
value is assigned.
|
||||||
|
|
||||||
|
3. Changes to Readline
|
||||||
|
|
||||||
|
a. Fixed a few places where negative array subscripts could have occurred.
|
||||||
|
|
||||||
|
b. Fixed the vi-mode code to use a better method to determine the bounds of
|
||||||
|
the array used to hold the marks.
|
||||||
|
|
||||||
|
c. Fixed the defines in chardefs.h to work better when chars are signed.
|
||||||
|
|
||||||
|
d. Fixed configure.in to use the new names for bash autoconf macros.
|
||||||
|
|
||||||
|
e. Readline no longer attempts to define its own versions of some ctype
|
||||||
|
macros if they are implemented as functions in libc but not as macros in
|
||||||
|
<ctype.h>.
|
||||||
|
|
||||||
|
f. Fixed a problem where rl_backward could possibly set point to before
|
||||||
|
the beginning of the line.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
This document details the changes between this version, bash-2.05a-beta1,
|
||||||
|
and the previous version, bash-2.05a-alpha1.
|
||||||
|
|
||||||
|
1. Changes to Bash
|
||||||
|
|
||||||
|
a. Fixed a bug in the evalution of arithmetic `for' statements when the
|
||||||
|
expanded expression is NULL.
|
||||||
|
|
||||||
|
b. Fixed an unassigned variable problem in the redirection printing code.
|
||||||
|
|
||||||
|
c. Added more prototypes to extern function declarations in the header
|
||||||
|
files and to static function declarations in C source files.
|
||||||
|
|
||||||
|
d. Make sure called functions have a prototype in scope, to get the arguments
|
||||||
|
and return values right instead of casting. Removed extern function
|
||||||
|
declarations from C source files that were already included in header
|
||||||
|
files.
|
||||||
|
|
||||||
|
e. Changed some function arguments to use function typedefs in general.h so
|
||||||
|
the prototypes can be checked. The only use of Function and VFunction
|
||||||
|
now is for unwind-protects.
|
||||||
|
|
||||||
|
f. More const changes to function arguments and appropriate variables.
|
||||||
|
|
||||||
|
g. Changed the mail checking support to handle `maildir'-style mail
|
||||||
|
directories.
|
||||||
|
|
||||||
|
h. Augmented the bash malloc to pass in the file and line number information
|
||||||
|
for each malloc, realloc, and free. This should result in better error
|
||||||
|
messages.
|
||||||
|
|
||||||
|
i. The `old' gnu malloc is no longer a configuration option.
|
||||||
|
|
||||||
|
j. Augmented the bash malloc with optional tracing and registering allocated
|
||||||
|
and freed memory.
|
||||||
|
|
||||||
|
k. Prompt string decoding now saves and restores the value of $? when it
|
||||||
|
expands the prompt string, so command substitutions don't change $?.
|
||||||
|
|
||||||
|
i. Array indices are now `long', since shell arithmetic is performed as long,
|
||||||
|
and the internal arrayind_t type is used consistently.
|
||||||
|
|
||||||
|
j. Some more `unsigned char *' fixes from Paul Eggert.
|
||||||
|
|
||||||
|
k. Fixed a bad call to builtin_error that could cause core dumps when making
|
||||||
|
local variables.
|
||||||
|
|
||||||
|
l. `return' may no longer be used to terminate a `select' command, for
|
||||||
|
compatibility with ksh.
|
||||||
|
|
||||||
|
m. Changed code that reads octal numbers to do a better job of detecting
|
||||||
|
overflows.
|
||||||
|
|
||||||
|
n. The time formatting code no longer uses absolute indices into a buffer,
|
||||||
|
because the buffer size changes depending on the size of a `time_t'.
|
||||||
|
|
||||||
|
o. `umask' now prints four digits when printing in octal mode, for
|
||||||
|
compatibility with other shells.
|
||||||
|
|
||||||
|
p. Lots of changes to the `printf' builtin from Paul Eggert: it handles `L'
|
||||||
|
formats and long doubles better, and internal functions have been
|
||||||
|
simpified where appropriate.
|
||||||
|
|
||||||
|
q. Some `time_t' fixes for machines were a time_t is bigger than a long.
|
||||||
|
|
||||||
|
r. Replaced some bash-specific autoconf macros with standard equivalents.
|
||||||
|
|
||||||
|
s. Improvmed the code that constructs temporary filenames to make the
|
||||||
|
generated names a bit more random.
|
||||||
|
|
||||||
|
t. Added code that checks for ascii before calling any of the is* ctype
|
||||||
|
functions.
|
||||||
|
|
||||||
|
u. Changed some places where a `char' was used as an array subscript to use
|
||||||
|
`unsigned char', since a `char' can be negative if it's signed by default.
|
||||||
|
|
||||||
|
v. Lots of changes to the `ulimit' builtin from Paul Eggert to add support
|
||||||
|
for the new POSIX-200x RLIM_SAVED_CUR and RLIM_SAVED_MAX values and
|
||||||
|
simplify the code.
|
||||||
|
|
||||||
|
w. `ulimit' now prints the description of a resource in any error message
|
||||||
|
relating to fetching or setting that resource's limits.
|
||||||
|
|
||||||
|
x. The `snprintf' replacement now computes maximum values at compile
|
||||||
|
time rather than using huge constants for things like long long.
|
||||||
|
|
||||||
|
y. Interactive shells now ignore `set -n'.
|
||||||
|
|
||||||
|
z. Changed the malloc bookkeeping information so that it's now 8 bytes
|
||||||
|
instead of 12 on most 32-bit machines (saving 4 bytes per allocation),
|
||||||
|
restoring 8-byte alignment.
|
||||||
|
|
||||||
|
aa. The malloc error reporting code now attempts to print the file and line
|
||||||
|
number of the call that caused the error.
|
||||||
|
|
||||||
|
bb. Changed the redirection error reporting code to catch EBADF errors and
|
||||||
|
report the file descriptor number rather than the file being redirected
|
||||||
|
to or from (e.g., things like `exec 4242<x' where 4242 is an out-of-range
|
||||||
|
file descriptor).
|
||||||
|
|
||||||
|
cc. `printf', `echo -e', and the $'...' code now process only two hex digits
|
||||||
|
after a `\x' escape sequence for compatibility with other shells, and
|
||||||
|
the documentation was changed to note that the octal and hex escape
|
||||||
|
sequences result in an eight-bit value rather than strict ASCII.
|
||||||
|
|
||||||
|
2. Changes to Readline
|
||||||
|
|
||||||
|
a. The completion code now attempts to do a better job of preserving the
|
||||||
|
case of the word the user typed if ignoring case in completions.
|
||||||
|
|
||||||
|
b. Readline defaults to not echoing the input and lets the terminal
|
||||||
|
initialization code enable echoing if there is a controlling terminal.
|
||||||
|
|
||||||
|
c. The key binding code now processes only two hex digits after a `\x'
|
||||||
|
escape sequence, and the documentation was changed to note that the
|
||||||
|
octal and hex escape sequences result in an eight-bit value rather
|
||||||
|
than strict ASCII.
|
||||||
|
|
||||||
|
3. New Features in Bash
|
||||||
|
|
||||||
|
a. The builtin `ulimit' now takes two new non-numeric arguments: `hard',
|
||||||
|
meaning the current hard limit, and `soft', meaning the current soft
|
||||||
|
limit, in addition to `unlimited'
|
||||||
|
|
||||||
|
b. `ulimit' now prints the option letter associated with a particular
|
||||||
|
resource when printing more than one limit.
|
||||||
|
|
||||||
|
c. `ulimit' prints `hard' or `soft' when a value is not `unlimited' but is
|
||||||
|
one of RLIM_SAVED_MAX or RLIM_SAVED_CUR, respectively.
|
||||||
|
|
||||||
|
4. New Features in Readline
|
||||||
|
|
||||||
|
a. New bindable variable `history-preserve-point'. If set, the history
|
||||||
|
code attempts to place the user at the same location on each history
|
||||||
|
line retrived with previous-history or next-history.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
This document details the changes between this version, bash-2.05a-alpha1,
|
||||||
|
and the previous version, bash-2.05-release.
|
||||||
|
|
||||||
|
1. Changes to Bash
|
||||||
|
|
||||||
|
a. Better checks in the redirection code for write errors.
|
||||||
|
|
||||||
|
b. bashbug now uses $TMPDIR, defaulting to /tmp, and uses mktemp(1) more
|
||||||
|
portably.
|
||||||
|
|
||||||
|
c. System-specific configuration changes for: Interix, OpenBSD, FreeBSD,
|
||||||
|
MacOS X.
|
||||||
|
|
||||||
|
d. Some more `const' cleanups through the code.
|
||||||
|
|
||||||
|
e. Fixed a typo in the /dev/fd redirection code, better checks for valid
|
||||||
|
numeric fds in /dev/fd.
|
||||||
|
|
||||||
|
f. Fixed many parts of the shell to handle integer overflow more gracefully
|
||||||
|
and to do more stringent checks for valid numbers.
|
||||||
|
|
||||||
|
g. Fixed mksignames to include config.h.
|
||||||
|
|
||||||
|
h. Fixed an uninitialized variable problem that could cause the shell to core
|
||||||
|
dump when replacing characters in a string.
|
||||||
|
|
||||||
|
i. New mechanism for updating the patch level when official patches are
|
||||||
|
released (patchlevel.h).
|
||||||
|
|
||||||
|
j. configure.in changed to no longer require external files _distribution and
|
||||||
|
_patchlevel.
|
||||||
|
|
||||||
|
k. Fixed non-interactive shell initialization problem when bash started as
|
||||||
|
`bash -i filename'.
|
||||||
|
|
||||||
|
l. Fixed printf builtin conversion error handling to be POSIX.2-conformant.
|
||||||
|
|
||||||
|
m. autoconf-2.52 is now used to build configure; autoconf-2.50 or newer is
|
||||||
|
required. Some of the bash-specific macros were removed, since they are
|
||||||
|
now standard.
|
||||||
|
|
||||||
|
n. Startup files and files read with source or `.' are no longer required to
|
||||||
|
be regular files.
|
||||||
|
|
||||||
|
o. Fixed core dump in builtin printf when user-supplied precision or field
|
||||||
|
width is 0.
|
||||||
|
|
||||||
|
p. Fixed builtin printf to treat a negative field width as a positive field
|
||||||
|
width with left-justification.
|
||||||
|
|
||||||
|
r. New unwind-protect implementation from Paul Eggert.
|
||||||
|
|
||||||
|
s. Fixed an inadvertently-unclosed comment in the bash completion code that
|
||||||
|
caused programmable completions to not add trailing slashes or spaces to
|
||||||
|
completions.
|
||||||
|
|
||||||
|
t. Fixed the process substitution code to cope better when stdin is closed.
|
||||||
|
|
||||||
|
v. Fixes, mostly from Paul Eggert, for a few possible buffer overflows in
|
||||||
|
the shell.
|
||||||
|
|
||||||
|
w. Fixes from Paul Eggert to avoid most of the type casts in the shell code,
|
||||||
|
and use more appropriate types for a number of variables.
|
||||||
|
|
||||||
|
x. Command substition no longer inherits the DEBUG trap.
|
||||||
|
|
||||||
|
y. Some fixes to the process substition code on machines without /dev/fd so
|
||||||
|
that named pipes are not removed inappropriately.
|
||||||
|
|
||||||
|
z. The loadable `getconf' builtin is now much more complete, and will become
|
||||||
|
part of the shell in the future.
|
||||||
|
|
||||||
|
aa. The select command no longer terminates on a `return', so it can be used
|
||||||
|
to return from an enclosing function (as ksh does it).
|
||||||
|
|
||||||
|
bb. Fixed the extended pattern matching code to behave better when presented
|
||||||
|
with incorrectly-formed patterns.
|
||||||
|
|
||||||
|
cc. Some changes were made with the intent of making cross-compilation easier.
|
||||||
|
|
||||||
|
dd. The network code (/dev/tcp and /dev/udp redirections) uses getaddrinfo(3)
|
||||||
|
if it's available, which adds support for IPv6.
|
||||||
|
|
||||||
|
ee. Subshells of login shells no longer source ~/.bash_logout when they exit.
|
||||||
|
|
||||||
|
ff. Fixes so that subshells don't exit inappropriately if the -e option has
|
||||||
|
been set.
|
||||||
|
|
||||||
|
gg. Restricted shells no longer allow functions to be exported.
|
||||||
|
|
||||||
|
hh. Changes to the pattern matching code so extended pattern matching works
|
||||||
|
on systems with deficient shared library implementations, like MacOS X.
|
||||||
|
|
||||||
|
ii. Better error messages when a script with a leading `#!interp' fails
|
||||||
|
to execute because of problems with `interp'.
|
||||||
|
|
||||||
|
jj. Fixed `compgen' to handle the `-o default' option better.
|
||||||
|
|
||||||
|
kk. Fixed the job control code to force an asynchronous process's standard
|
||||||
|
input to /dev/null only if job control is not active.
|
||||||
|
|
||||||
|
ll. Fixed a possible infinite recursion problem when `fc ""=abc' (a null
|
||||||
|
pattern) is used to re-execute a previous command.
|
||||||
|
|
||||||
|
mm. Fixed `declare [-a] var=value' to assign VALUE to element 0 if VAR is an
|
||||||
|
array variable. Similarly for `declare [-a] var[N]=value'. This is like
|
||||||
|
ksh93.
|
||||||
|
|
||||||
|
nn. Fixed a bug that caused `read -a aname' to work even if ANAME had been
|
||||||
|
declared readonly.
|
||||||
|
|
||||||
|
oo. Fixed a possible integer overflow problem when constructing names for
|
||||||
|
temporary files.
|
||||||
|
|
||||||
|
2. New Features in Bash
|
||||||
|
|
||||||
|
a. Added support for DESTDIR installation root prefix, so you can do a
|
||||||
|
`make install DESTDIR=bash-root' and do easier binary packaging.
|
||||||
|
|
||||||
|
b. Added support for builtin printf "'" flag character as per latest POSIX
|
||||||
|
drafts.
|
||||||
|
|
||||||
|
c. Support for POSIX.2 printf(1) length specifiers `j', `t', and `z' (from
|
||||||
|
ISO C99).
|
||||||
|
|
||||||
|
d. New autoconf macro, RL_LIB_READLINE_VERSION, for use by other applications
|
||||||
|
(bash doesn't use very much of what it returns).
|
||||||
|
|
||||||
|
e. `set [-+]o nolog' is recognized as required by the latest POSIX drafts,
|
||||||
|
but ignored.
|
||||||
|
|
||||||
|
f. New read-only `shopt' option: login_shell. Set to non-zero value if the
|
||||||
|
shell is a login shell.
|
||||||
|
|
||||||
|
g. New `\A' prompt string escape sequence; expands to time in 24 HH:MM format.
|
||||||
|
|
||||||
|
h. New `-A group/-g' option to complete and compgen; does group name
|
||||||
|
completion.
|
||||||
|
|
||||||
|
i. New `-t' option to `hash' to list hash values for each filename argument.
|
||||||
|
|
||||||
|
j. New [-+]O invocation option to set and unset `shopt' options at startup.
|
||||||
|
|
||||||
|
k. configure's `--with-installed-readline' option now takes an optional
|
||||||
|
`=PATH' suffix to set the root of the tree where readline is installed
|
||||||
|
to PATH.
|
||||||
|
|
||||||
|
l. The ksh-like `ERR' trap has been added. The `ERR' trap will be run
|
||||||
|
whenever the shell would have exited if the -e option were enabled.
|
||||||
|
It is not inherited by shell functions.
|
||||||
|
|
||||||
|
m. `readonly', `export', and `declare' now print variables which have been
|
||||||
|
given attributes but not set by assigning a value as just a command and
|
||||||
|
a variable name (like `export foo') when listing, as the latest POSIX
|
||||||
|
drafts require.
|
||||||
|
|
||||||
|
n. `bashbug' now requires that the subject be changed from the default.
|
||||||
|
|
||||||
|
o. configure has a new `--enable-largefile' option, like other GNU utilities.
|
||||||
|
|
||||||
|
p. `for' loops now allow empty word lists after `in', like the latest POSIX
|
||||||
|
drafts require.
|
||||||
|
|
||||||
|
3. Changes to Readline
|
||||||
|
|
||||||
|
a. More `const' and type casting fixes.
|
||||||
|
|
||||||
|
b. Changed rl_message() to use vsnprintf(3) (if available) to fix buffer
|
||||||
|
overflow problems.
|
||||||
|
|
||||||
|
c. The completion code no longer appends a `/' or ` ' to a match when
|
||||||
|
completing a symbolic link that resolves to a directory name, unless
|
||||||
|
the match does not add anything to the word being completed. This
|
||||||
|
means that a tab will complete the word up to the full name, but not
|
||||||
|
add anything, and a subsequent tab will add a slash.
|
||||||
|
|
||||||
|
d. Fixed a trivial typo that made the vi-mode `dT' command not work.
|
||||||
|
|
||||||
|
e. Fixed the tty code so that ^S and ^Q can be inserted with rl_quoted_insert.
|
||||||
|
|
||||||
|
f. Fixed the tty code so that ^V works more than once.
|
||||||
|
|
||||||
|
g. Changed the use of __P((...)) for function prototypes to PARAMS((...))
|
||||||
|
because the use of __P in typedefs conflicted g++ and glibc.
|
||||||
|
|
||||||
|
4. New Features in Readline
|
||||||
|
|
||||||
|
a. Added extern declaration for rl_get_termcap to readline.h, making it a
|
||||||
|
public function (it was always there, just not in readline.h).
|
||||||
|
|
||||||
|
b. New #defines in readline.h: RL_READLINE_VERSION, currently 0x0402,
|
||||||
|
RL_VERSION_MAJOR, currently 4, and RL_VERSION_MINOR, currently 2.
|
||||||
|
|
||||||
|
c. New readline variable: rl_readline_version, mirrors RL_READLINE_VERSION.
|
||||||
|
|
||||||
|
d. New bindable boolean readline variable: match-hidden-files. Controls
|
||||||
|
completion of files beginning with a `.' (on Unix). Enabled by default.
|
||||||
|
|
||||||
|
e. The history expansion code now allows any character to terminate a
|
||||||
|
`:first-' modifier, like csh.
|
||||||
|
|
||||||
|
f. The incremental search code remembers the last search string and uses
|
||||||
|
it if ^R^R is typed without a search string.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
This document details the changes between this version, bash-2.05-release,
|
This document details the changes between this version, bash-2.05-release,
|
||||||
and the previous version, bash-2.05-beta2.
|
and the previous version, bash-2.05-beta2.
|
||||||
|
|
||||||
|
|
|
||||||
25
COMPAT
25
COMPAT
|
|
@ -1,7 +1,9 @@
|
||||||
This document details the incompatibilites between this version of bash,
|
This document details the incompatibilites between this version of bash,
|
||||||
bash-2.05, and the previous widely-available version, bash-1.14 (which
|
bash-2.05a, and the previous widely-available version, bash-1.14 (which
|
||||||
is still the `standard' version for many Linux distributions). These
|
is still the `standard' version for many Linux distributions). These
|
||||||
were discovered by users of bash-2.x, so this list is not comprehensive.
|
were discovered by users of bash-2.x, so this list is not comprehensive.
|
||||||
|
Some of these incompatibilities occur between the current version and
|
||||||
|
versions 2.0 and above.
|
||||||
|
|
||||||
1. Bash now uses a new quoting syntax, $"...", to do locale-specific
|
1. Bash now uses a new quoting syntax, $"...", to do locale-specific
|
||||||
string translation. Users who have relied on the (undocumented)
|
string translation. Users who have relied on the (undocumented)
|
||||||
|
|
@ -132,14 +134,7 @@ were discovered by users of bash-2.x, so this list is not comprehensive.
|
||||||
|
|
||||||
alias -x='chmod a-x' --> alias -- -x='chmod a-x'
|
alias -x='chmod a-x' --> alias -- -x='chmod a-x'
|
||||||
|
|
||||||
13. There was a bug in bash-1.14 and previous versions that caused it to
|
13. The behavior of range specificiers within bracket matching expressions
|
||||||
accept as valid syntax for loops of the form
|
|
||||||
|
|
||||||
for f in ; do ... ; done
|
|
||||||
|
|
||||||
This should be a syntax error, and bash-2.x treats it as such.
|
|
||||||
|
|
||||||
14. The behavior of range specificiers within bracket matching expressions
|
|
||||||
in the pattern matcher (e.g., [A-Z]) depends on the current locale,
|
in the pattern matcher (e.g., [A-Z]) depends on the current locale,
|
||||||
specifically the value of the LC_COLLATE environment variable. Setting
|
specifically the value of the LC_COLLATE environment variable. Setting
|
||||||
this variable to C or POSIX will result in the traditional ASCII behavior
|
this variable to C or POSIX will result in the traditional ASCII behavior
|
||||||
|
|
@ -183,7 +178,7 @@ were discovered by users of bash-2.x, so this list is not comprehensive.
|
||||||
with `z' and still allow individual users to change the collation order.
|
with `z' and still allow individual users to change the collation order.
|
||||||
Users may put the above command into their own profiles as well, of course.
|
Users may put the above command into their own profiles as well, of course.
|
||||||
|
|
||||||
15. Bash versions up to 1.14.7 included an undocumented `-l' operator to
|
14. Bash versions up to 1.14.7 included an undocumented `-l' operator to
|
||||||
the `test/[' builtin. It was a unary operator that expanded to the
|
the `test/[' builtin. It was a unary operator that expanded to the
|
||||||
length of its string argument. This let you do things like
|
length of its string argument. This let you do things like
|
||||||
|
|
||||||
|
|
@ -198,3 +193,13 @@ were discovered by users of bash-2.x, so this list is not comprehensive.
|
||||||
This operator is not part of the POSIX standard, because one can (and
|
This operator is not part of the POSIX standard, because one can (and
|
||||||
should) use ${#variable} to get the length of a variable's value.
|
should) use ${#variable} to get the length of a variable's value.
|
||||||
Bash-2.x does not support it.
|
Bash-2.x does not support it.
|
||||||
|
|
||||||
|
15. Bash no longer auto-exports the HOME, PATH, SHELL, TERM, HOSTNAME,
|
||||||
|
HOSTTYPE, MACHTYPE, or OSTYPE variables.
|
||||||
|
|
||||||
|
16. Bash no longer initializes the FUNCNAME, GROUPS, or DIRSTACK variables
|
||||||
|
to have special behavior if they appear in the initial environment.
|
||||||
|
|
||||||
|
17. Bash no longer removes the export attribute from the SSH_CLIENT or
|
||||||
|
SSH2_CLIENT variables, and no longer attempts to discover whether or
|
||||||
|
not it has been invoked by sshd in order to run the startup files.
|
||||||
|
|
|
||||||
12263
CWRU/changelog
12263
CWRU/changelog
File diff suppressed because it is too large
Load diff
|
|
@ -1,25 +0,0 @@
|
||||||
This patch is from Brian Fox, in reply to an email message from
|
|
||||||
"Marcin 'Qrczak' Kowalczyk" <qrczak@knm.org.pl>, who wrote:
|
|
||||||
|
|
||||||
I think that bash should accept such a syntax:
|
|
||||||
|
|
||||||
for var in ; do command; done
|
|
||||||
|
|
||||||
Of course it should do nothing. It would simplify some scripts.
|
|
||||||
|
|
||||||
Here is a patch for those who wish it:
|
|
||||||
|
|
||||||
*** parse.y.~1~ Wed Mar 4 09:39:46 1998
|
|
||||||
--- parse.y Mon Jul 13 14:40:23 1998
|
|
||||||
***************
|
|
||||||
*** 495,500 ****
|
|
||||||
--- 495,504 ----
|
|
||||||
{ $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9); }
|
|
||||||
| FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'
|
|
||||||
{ $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9); }
|
|
||||||
+ | FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE
|
|
||||||
+ { $$ = make_for_command ($2, (WORD_LIST *)NULL, $8); }
|
|
||||||
+ | FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}'
|
|
||||||
+ { $$ = make_for_command ($2, (WORD_LIST *)NULL, $8); }
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
@ -1,175 +0,0 @@
|
||||||
# DP: From: Miquel van Smoorenburg <miquels@cistron.nl>
|
|
||||||
# DP: A patch that adds support for Maildir type mailboxes.
|
|
||||||
|
|
||||||
--- ./mailcheck.c.orig Wed Feb 4 21:30:33 1998
|
|
||||||
+++ ./mailcheck.c Sun Nov 14 15:35:07 1999
|
|
||||||
@@ -21,8 +21,10 @@
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
+#include <errno.h>
|
|
||||||
#include "bashtypes.h"
|
|
||||||
#include "posixstat.h"
|
|
||||||
+#include "posixdir.h"
|
|
||||||
#ifndef _MINIX
|
|
||||||
# include <sys/param.h>
|
|
||||||
#endif
|
|
||||||
@@ -37,6 +39,8 @@
|
|
||||||
#include "mailcheck.h"
|
|
||||||
#include <tilde/tilde.h>
|
|
||||||
|
|
||||||
+#include "mailstat.c"
|
|
||||||
+
|
|
||||||
#ifndef NOW
|
|
||||||
#define NOW ((time_t)time ((time_t *)0))
|
|
||||||
#endif
|
|
||||||
@@ -131,7 +135,7 @@
|
|
||||||
struct stat finfo;
|
|
||||||
|
|
||||||
file = mailfiles[i]->name;
|
|
||||||
- if (stat (file, &finfo) == 0)
|
|
||||||
+ if (mailstat (file, &finfo) == 0)
|
|
||||||
{
|
|
||||||
mailfiles[i]->access_time = finfo.st_atime;
|
|
||||||
mailfiles[i]->mod_time = finfo.st_mtime;
|
|
||||||
@@ -155,7 +159,7 @@
|
|
||||||
i = find_mail_file (filename);
|
|
||||||
if (i >= 0)
|
|
||||||
{
|
|
||||||
- if (stat (filename, &finfo) == 0)
|
|
||||||
+ if (mailstat (filename, &finfo) == 0)
|
|
||||||
{
|
|
||||||
mailfiles[i]->mod_time = finfo.st_mtime;
|
|
||||||
mailfiles[i]->access_time = finfo.st_atime;
|
|
||||||
@@ -221,7 +225,7 @@
|
|
||||||
file = mailfiles[i]->name;
|
|
||||||
mtime = mailfiles[i]->mod_time;
|
|
||||||
|
|
||||||
- if ((stat (file, &finfo) == 0) && (finfo.st_size > 0))
|
|
||||||
+ if ((mailstat (file, &finfo) == 0) && (finfo.st_size > 0))
|
|
||||||
return (mtime != finfo.st_mtime);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
@@ -239,7 +243,7 @@
|
|
||||||
file = mailfiles[i]->name;
|
|
||||||
atime = mailfiles[i]->access_time;
|
|
||||||
|
|
||||||
- if ((stat (file, &finfo) == 0) && (finfo.st_size > 0))
|
|
||||||
+ if ((mailstat (file, &finfo) == 0) && (finfo.st_size > 0))
|
|
||||||
return (atime != finfo.st_atime);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
@@ -257,7 +261,7 @@
|
|
||||||
file = mailfiles[i]->name;
|
|
||||||
size = mailfiles[i]->file_size;
|
|
||||||
|
|
||||||
- return ((stat (file, &finfo) == 0) && (finfo.st_size > size));
|
|
||||||
+ return ((mailstat (file, &finfo) == 0) && (finfo.st_size > size));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Take an element from $MAILPATH and return the portion from
|
|
||||||
|
|
||||||
|
|
||||||
diff -ruN bash-2.01.1.b4/mailstat.c bash-2.01.1/mailstat.c
|
|
||||||
--- bash-2.01.1.b4/mailstat.c Thu Jan 1 01:00:00 1970
|
|
||||||
+++ bash-2.01.1/mailstat.c Wed Jun 2 12:05:04 1999
|
|
||||||
@@ -0,0 +1,98 @@
|
|
||||||
+/*
|
|
||||||
+ * Stat a file. If it's a maildir, check all messages
|
|
||||||
+ * in the maildir and present the grand total as a file.
|
|
||||||
+ * The fields in the 'struct stat' are from the mail directory.
|
|
||||||
+ * The following fields are emulated:
|
|
||||||
+ *
|
|
||||||
+ * st_nlink always 1
|
|
||||||
+ * st_size total number of bytes in all files
|
|
||||||
+ * st_blocks total number of messages
|
|
||||||
+ * st_atime access time of newest file in maildir
|
|
||||||
+ * st_mtime modify time of newest file in maildir
|
|
||||||
+ * st_mode S_IFDIR changed to S_IFREG
|
|
||||||
+ *
|
|
||||||
+ * This is good enough for most mail-checking applications.
|
|
||||||
+ */
|
|
||||||
+int
|
|
||||||
+mailstat(char *path, struct stat *st)
|
|
||||||
+{
|
|
||||||
+ DIR *dd;
|
|
||||||
+ struct dirent *fn;
|
|
||||||
+ struct stat st_ret, st_tmp;
|
|
||||||
+ static struct stat st_new_last, st_ret_last;
|
|
||||||
+ char dir[PATH_MAX * 2];
|
|
||||||
+ char file[PATH_MAX * 2];
|
|
||||||
+ int i, l;
|
|
||||||
+ time_t atime = 0, mtime = 0;
|
|
||||||
+
|
|
||||||
+ /* First see if it's a directory. */
|
|
||||||
+ if ((i = stat(path, st)) != 0 || !S_ISDIR(st->st_mode))
|
|
||||||
+ return i;
|
|
||||||
+ if (strlen(path) > sizeof(dir) - 5) {
|
|
||||||
+ errno = ENAMETOOLONG;
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ st_ret = *st;
|
|
||||||
+ st_ret.st_nlink = 1;
|
|
||||||
+ st_ret.st_size = 0;
|
|
||||||
+ st_ret.st_blocks = 0;
|
|
||||||
+ st_ret.st_mode &= ~S_IFDIR;
|
|
||||||
+ st_ret.st_mode |= S_IFREG;
|
|
||||||
+
|
|
||||||
+ /* See if cur/ is present */
|
|
||||||
+ sprintf(dir, "%s/cur", path);
|
|
||||||
+ if (stat(dir, &st_tmp) || !S_ISDIR(st_tmp.st_mode)) return 0;
|
|
||||||
+ st_ret.st_atime = st_tmp.st_atime;
|
|
||||||
+
|
|
||||||
+ /* See if tmp/ is present */
|
|
||||||
+ sprintf(dir, "%s/tmp", path);
|
|
||||||
+ if (stat(dir, &st_tmp) || !S_ISDIR(st_tmp.st_mode)) return 0;
|
|
||||||
+ st_ret.st_mtime = st_tmp.st_mtime;
|
|
||||||
+
|
|
||||||
+ /* And new/ */
|
|
||||||
+ sprintf(dir, "%s/new", path);
|
|
||||||
+ if (stat(dir, &st_tmp) || !S_ISDIR(st_tmp.st_mode)) return 0;
|
|
||||||
+ st_ret.st_mtime = st_tmp.st_mtime;
|
|
||||||
+
|
|
||||||
+ /* Optimization - if new/ didn't change, nothing else did. */
|
|
||||||
+ if (st_tmp.st_dev == st_new_last.st_dev &&
|
|
||||||
+ st_tmp.st_ino == st_new_last.st_ino &&
|
|
||||||
+ st_tmp.st_atime == st_new_last.st_atime &&
|
|
||||||
+ st_tmp.st_mtime == st_new_last.st_mtime) {
|
|
||||||
+ *st = st_ret_last;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ st_new_last = st_tmp;
|
|
||||||
+
|
|
||||||
+ /* Loop over new/ and cur/ */
|
|
||||||
+ for (i = 0; i < 2; i++) {
|
|
||||||
+ sprintf(dir, "%s/%s", path, i ? "cur" : "new");
|
|
||||||
+ sprintf(file, "%s/", dir);
|
|
||||||
+ l = strlen(file);
|
|
||||||
+ if ((dd = opendir(dir)) == NULL)
|
|
||||||
+ return 0;
|
|
||||||
+ while ((fn = readdir(dd)) != NULL) {
|
|
||||||
+ if (fn->d_name[0] == '.' ||
|
|
||||||
+ strlen(fn->d_name) + l >= sizeof(file))
|
|
||||||
+ continue;
|
|
||||||
+ strcpy(file + l, fn->d_name);
|
|
||||||
+ if (stat(file, &st_tmp) != 0)
|
|
||||||
+ continue;
|
|
||||||
+ st_ret.st_size += st_tmp.st_size;
|
|
||||||
+ st_ret.st_blocks++;
|
|
||||||
+ if (st_tmp.st_atime != st_tmp.st_mtime &&
|
|
||||||
+ st_tmp.st_atime > atime)
|
|
||||||
+ atime = st_tmp.st_atime;
|
|
||||||
+ if (st_tmp.st_mtime > mtime)
|
|
||||||
+ mtime = st_tmp.st_mtime;
|
|
||||||
+ }
|
|
||||||
+ closedir(dd);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (atime) st_ret.st_atime = atime;
|
|
||||||
+ if (mtime) st_ret.st_mtime = mtime;
|
|
||||||
+
|
|
||||||
+ *st = st_ret_last = st_ret;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
|
|
||||||
45
INSTALL
45
INSTALL
|
|
@ -50,15 +50,7 @@ considered for the next release.
|
||||||
The file `configure.in' is used to create `configure' by a program
|
The file `configure.in' is used to create `configure' by a program
|
||||||
called Autoconf. You only need `configure.in' if you want to change it
|
called Autoconf. You only need `configure.in' if you want to change it
|
||||||
or regenerate `configure' using a newer version of Autoconf. If you do
|
or regenerate `configure' using a newer version of Autoconf. If you do
|
||||||
this, make sure you are using Autoconf version 2.10 or newer.
|
this, make sure you are using Autoconf version 2.50 or newer.
|
||||||
|
|
||||||
If you need to change `configure.in' or regenerate `configure', you
|
|
||||||
will need to create two files: `_distribution' and `_patchlevel'.
|
|
||||||
`_distribution' should contain the major and minor version numbers of
|
|
||||||
the Bash distribution, for example `2.01'. `_patchlevel' should
|
|
||||||
contain the patch level of the Bash distribution, `0' for example. The
|
|
||||||
script `support/mkconffiles' has been provided to automate the creation
|
|
||||||
of these files.
|
|
||||||
|
|
||||||
You can remove the program binaries and object files from the source
|
You can remove the program binaries and object files from the source
|
||||||
code directory by typing `make clean'. To also remove the files that
|
code directory by typing `make clean'. To also remove the files that
|
||||||
|
|
@ -118,7 +110,9 @@ Installation Names
|
||||||
|
|
||||||
By default, `make install' will install into `/usr/local/bin',
|
By default, `make install' will install into `/usr/local/bin',
|
||||||
`/usr/local/man', etc. You can specify an installation prefix other
|
`/usr/local/man', etc. You can specify an installation prefix other
|
||||||
than `/usr/local' by giving `configure' the option `--prefix=PATH'.
|
than `/usr/local' by giving `configure' the option `--prefix=PATH', or
|
||||||
|
by specifying a value for the `DESTDIR' `make' variable when running
|
||||||
|
`make install'.
|
||||||
|
|
||||||
You can specify separate installation prefixes for
|
You can specify separate installation prefixes for
|
||||||
architecture-specific files and architecture-independent files. If you
|
architecture-specific files and architecture-independent files. If you
|
||||||
|
|
@ -130,12 +124,12 @@ Specifying the System Type
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
There may be some features `configure' can not figure out
|
There may be some features `configure' can not figure out
|
||||||
automatically, but needs to determine by the type of host Bash will run
|
automatically, but need to determine by the type of host Bash will run
|
||||||
on. Usually `configure' can figure that out, but if it prints a
|
on. Usually `configure' can figure that out, but if it prints a
|
||||||
message saying it can not guess the host type, give it the
|
message saying it can not guess the host type, give it the
|
||||||
`--host=TYPE' option. `TYPE' can either be a short name for the system
|
`--host=TYPE' option. `TYPE' can either be a short name for the system
|
||||||
type, such as `sun4', or a canonical name with three fields:
|
type, such as `sun4', or a canonical name with three fields:
|
||||||
`CPU-COMPANY-SYSTEM' (e.g., `sparc-sun-sunos4.1.2').
|
`CPU-COMPANY-SYSTEM' (e.g., `i386-unknown-freebsd4.2').
|
||||||
|
|
||||||
See the file `support/config.sub' for the possible values of each field.
|
See the file `support/config.sub' for the possible values of each field.
|
||||||
|
|
||||||
|
|
@ -210,21 +204,22 @@ the Bash `configure' recognizes.
|
||||||
be supplied if your system has an inadequate or incomplete termcap
|
be supplied if your system has an inadequate or incomplete termcap
|
||||||
database.
|
database.
|
||||||
|
|
||||||
`--with-glibc-malloc'
|
|
||||||
Use the GNU libc version of `malloc' in `lib/malloc/gmalloc.c'.
|
|
||||||
This is not the version of `malloc' that appears in glibc version
|
|
||||||
2, but a modified version of the `malloc' from glibc version 1.
|
|
||||||
This is somewhat slower than the default `malloc', but wastes less
|
|
||||||
space on a per-allocation basis, and will return memory to the
|
|
||||||
operating system under certain circumstances.
|
|
||||||
|
|
||||||
`--with-gnu-malloc'
|
`--with-gnu-malloc'
|
||||||
A synonym for `--with-bash-malloc'.
|
A synonym for `--with-bash-malloc'.
|
||||||
|
|
||||||
`--with-installed-readline'
|
`--with-installed-readline[=PREFIX]'
|
||||||
Define this to make Bash link with a locally-installed version of
|
Define this to make Bash link with a locally-installed version of
|
||||||
Readline rather than the version in `lib/readline'. This works
|
Readline rather than the version in `lib/readline'. This works
|
||||||
only with Readline 4.1 and later versions.
|
only with Readline 4.2 and later versions. If PREFIX is `yes' or
|
||||||
|
not supplied, `configure' uses the values of the make variables
|
||||||
|
`includedir' and `libdir', which are subdirectories of `prefix' by
|
||||||
|
default, to find the installed version of Readline if it is not in
|
||||||
|
the standard system include and library directories. If PREFIX is
|
||||||
|
`no', Bash links with the version in `lib/readline'. If PREFIX is
|
||||||
|
set to any other value, `configure' treats it as a directory
|
||||||
|
pathname and looks for the installed version of Readline in
|
||||||
|
subdirectories of that directory (include files in
|
||||||
|
PREFIX/`include' and the library in PREFIX/`lib').
|
||||||
|
|
||||||
`--with-purify'
|
`--with-purify'
|
||||||
Define this to use the Purify memory allocation checker from
|
Define this to use the Purify memory allocation checker from
|
||||||
|
|
@ -237,6 +232,12 @@ the Bash `configure' recognizes.
|
||||||
There are several `--enable-' options that alter how Bash is compiled
|
There are several `--enable-' options that alter how Bash is compiled
|
||||||
and linked, rather than changing run-time features.
|
and linked, rather than changing run-time features.
|
||||||
|
|
||||||
|
`--enable-largefile'
|
||||||
|
Enable support for large files
|
||||||
|
(http://www.sas.com/standards/large_file/x_open.20Mar96.html) if
|
||||||
|
the operating system requires special compiler options to build
|
||||||
|
programs which can access large files.
|
||||||
|
|
||||||
`--enable-profiling'
|
`--enable-profiling'
|
||||||
This builds a Bash binary that produces profiling information to be
|
This builds a Bash binary that produces profiling information to be
|
||||||
processed by `gprof' each time it is executed.
|
processed by `gprof' each time it is executed.
|
||||||
|
|
|
||||||
44
MANIFEST
44
MANIFEST
|
|
@ -55,6 +55,7 @@ config-bot.h f
|
||||||
config.h.in f
|
config.h.in f
|
||||||
aclocal.m4 f
|
aclocal.m4 f
|
||||||
array.c f
|
array.c f
|
||||||
|
arrayfunc.c f
|
||||||
eval.c f
|
eval.c f
|
||||||
print_cmd.c f
|
print_cmd.c f
|
||||||
general.c f
|
general.c f
|
||||||
|
|
@ -100,8 +101,11 @@ alias.h f
|
||||||
builtins.h f
|
builtins.h f
|
||||||
bashhist.h f
|
bashhist.h f
|
||||||
bashline.h f
|
bashline.h f
|
||||||
|
conftypes.h f
|
||||||
|
patchlevel.h f
|
||||||
variables.h f
|
variables.h f
|
||||||
array.h f
|
array.h f
|
||||||
|
arrayfunc.h f
|
||||||
jobs.h f
|
jobs.h f
|
||||||
findcmd.h f
|
findcmd.h f
|
||||||
hashlib.h f
|
hashlib.h f
|
||||||
|
|
@ -134,10 +138,10 @@ redir.h f
|
||||||
bashtypes.h f
|
bashtypes.h f
|
||||||
mailcheck.h f
|
mailcheck.h f
|
||||||
pathnames.h f
|
pathnames.h f
|
||||||
|
xmalloc.h f
|
||||||
y.tab.c f
|
y.tab.c f
|
||||||
y.tab.h f
|
y.tab.h f
|
||||||
parser-built f
|
parser-built f
|
||||||
builtins/ChangeLog f
|
|
||||||
builtins/Makefile.in f
|
builtins/Makefile.in f
|
||||||
builtins/alias.def f
|
builtins/alias.def f
|
||||||
builtins/bind.def f
|
builtins/bind.def f
|
||||||
|
|
@ -198,6 +202,7 @@ cross-build/x86-beos.cache f
|
||||||
cross-build/beos-sig.h f
|
cross-build/beos-sig.h f
|
||||||
cross-build/opennt.cache f
|
cross-build/opennt.cache f
|
||||||
include/ansi_stdlib.h f
|
include/ansi_stdlib.h f
|
||||||
|
include/chartypes.h f
|
||||||
include/filecntl.h f
|
include/filecntl.h f
|
||||||
include/maxpath.h f
|
include/maxpath.h f
|
||||||
include/memalloc.h f
|
include/memalloc.h f
|
||||||
|
|
@ -209,11 +214,11 @@ include/posixwait.h f
|
||||||
include/shtty.h f
|
include/shtty.h f
|
||||||
include/stdc.h f
|
include/stdc.h f
|
||||||
include/systimes.h f
|
include/systimes.h f
|
||||||
|
include/typemax.h f
|
||||||
include/unionwait.h f
|
include/unionwait.h f
|
||||||
lib/glob/ChangeLog f
|
|
||||||
lib/glob/Makefile.in f
|
lib/glob/Makefile.in f
|
||||||
lib/glob/fnmatch.c f
|
lib/glob/strmatch.c f
|
||||||
lib/glob/fnmatch.h f
|
lib/glob/strmatch.h f
|
||||||
lib/glob/glob.c f
|
lib/glob/glob.c f
|
||||||
lib/glob/glob.h f
|
lib/glob/glob.h f
|
||||||
lib/glob/collsyms.h f
|
lib/glob/collsyms.h f
|
||||||
|
|
@ -222,12 +227,17 @@ lib/glob/doc/glob.texi f
|
||||||
lib/glob/ndir.h f
|
lib/glob/ndir.h f
|
||||||
lib/malloc/Makefile.in f
|
lib/malloc/Makefile.in f
|
||||||
lib/malloc/getpagesize.h f
|
lib/malloc/getpagesize.h f
|
||||||
|
lib/malloc/imalloc.h f
|
||||||
|
lib/malloc/mstats.h f
|
||||||
|
lib/malloc/shmalloc.h f
|
||||||
|
lib/malloc/table.h f
|
||||||
lib/malloc/alloca.c f
|
lib/malloc/alloca.c f
|
||||||
lib/malloc/malloc.c f
|
lib/malloc/malloc.c f
|
||||||
lib/malloc/gmalloc.c f
|
lib/malloc/stats.c f
|
||||||
|
lib/malloc/table.c f
|
||||||
|
lib/malloc/trace.c f
|
||||||
lib/malloc/xmalloc.c f
|
lib/malloc/xmalloc.c f
|
||||||
lib/malloc/ogmalloc.c f
|
lib/malloc/xleaktrace f 755
|
||||||
lib/malloc/omalloc.c f
|
|
||||||
lib/malloc/stub.c f
|
lib/malloc/stub.c f
|
||||||
lib/malloc/i386-alloca.s f
|
lib/malloc/i386-alloca.s f
|
||||||
lib/malloc/x386-alloca.s f
|
lib/malloc/x386-alloca.s f
|
||||||
|
|
@ -307,10 +317,13 @@ lib/readline/examples/Inputrc f
|
||||||
lib/sh/Makefile.in f
|
lib/sh/Makefile.in f
|
||||||
lib/sh/clktck.c f
|
lib/sh/clktck.c f
|
||||||
lib/sh/clock.c f
|
lib/sh/clock.c f
|
||||||
|
lib/sh/fmtullong.c f
|
||||||
|
lib/sh/fmtulong.c f
|
||||||
lib/sh/getcwd.c f
|
lib/sh/getcwd.c f
|
||||||
lib/sh/getenv.c f
|
lib/sh/getenv.c f
|
||||||
lib/sh/inet_aton.c f
|
lib/sh/inet_aton.c f
|
||||||
lib/sh/itos.c f
|
lib/sh/itos.c f
|
||||||
|
lib/sh/mailstat.c f
|
||||||
lib/sh/makepath.c f
|
lib/sh/makepath.c f
|
||||||
lib/sh/netopen.c f
|
lib/sh/netopen.c f
|
||||||
lib/sh/oslib.c f
|
lib/sh/oslib.c f
|
||||||
|
|
@ -320,6 +333,7 @@ lib/sh/rename.c f
|
||||||
lib/sh/setlinebuf.c f
|
lib/sh/setlinebuf.c f
|
||||||
lib/sh/shquote.c f
|
lib/sh/shquote.c f
|
||||||
lib/sh/shtty.c f
|
lib/sh/shtty.c f
|
||||||
|
lib/sh/snprintf.c f
|
||||||
lib/sh/spell.c f
|
lib/sh/spell.c f
|
||||||
lib/sh/strcasecmp.c f
|
lib/sh/strcasecmp.c f
|
||||||
lib/sh/strerror.c f
|
lib/sh/strerror.c f
|
||||||
|
|
@ -328,8 +342,12 @@ lib/sh/stringlist.c f
|
||||||
lib/sh/stringvec.c f
|
lib/sh/stringvec.c f
|
||||||
lib/sh/strpbrk.c f
|
lib/sh/strpbrk.c f
|
||||||
lib/sh/strtod.c f
|
lib/sh/strtod.c f
|
||||||
|
lib/sh/strtoimax.c f
|
||||||
lib/sh/strtol.c f
|
lib/sh/strtol.c f
|
||||||
|
lib/sh/strtoll.c f
|
||||||
lib/sh/strtoul.c f
|
lib/sh/strtoul.c f
|
||||||
|
lib/sh/strtoull.c f
|
||||||
|
lib/sh/strtoumax.c f
|
||||||
lib/sh/strtrans.c f
|
lib/sh/strtrans.c f
|
||||||
lib/sh/times.c f
|
lib/sh/times.c f
|
||||||
lib/sh/timeval.c f
|
lib/sh/timeval.c f
|
||||||
|
|
@ -359,7 +377,6 @@ lib/termcap/grot/configure.in f
|
||||||
lib/termcap/grot/COPYING f
|
lib/termcap/grot/COPYING f
|
||||||
lib/termcap/grot/README f
|
lib/termcap/grot/README f
|
||||||
lib/tilde/README f
|
lib/tilde/README f
|
||||||
lib/tilde/ChangeLog f
|
|
||||||
lib/tilde/Makefile.in f
|
lib/tilde/Makefile.in f
|
||||||
lib/tilde/doc/tilde.texi f
|
lib/tilde/doc/tilde.texi f
|
||||||
lib/tilde/doc/Makefile f
|
lib/tilde/doc/Makefile f
|
||||||
|
|
@ -378,8 +395,6 @@ CWRU/README f
|
||||||
CWRU/POSIX.NOTES f
|
CWRU/POSIX.NOTES f
|
||||||
CWRU/changelog f
|
CWRU/changelog f
|
||||||
CWRU/sh-redir-hack f
|
CWRU/sh-redir-hack f
|
||||||
CWRU/empty-for-wordlist f
|
|
||||||
CWRU/maildir-patch f
|
|
||||||
CWRU/mh-folder-comp f
|
CWRU/mh-folder-comp f
|
||||||
doc/FAQ f
|
doc/FAQ f
|
||||||
doc/Makefile.in f
|
doc/Makefile.in f
|
||||||
|
|
@ -395,6 +410,7 @@ doc/bashref.info f
|
||||||
doc/article.ms f
|
doc/article.ms f
|
||||||
doc/htmlpost.sh f 755
|
doc/htmlpost.sh f 755
|
||||||
support/Makefile.in f
|
support/Makefile.in f
|
||||||
|
support/bashversion.c f
|
||||||
support/config.guess f
|
support/config.guess f
|
||||||
support/config.sub f
|
support/config.sub f
|
||||||
support/printenv.sh f 755
|
support/printenv.sh f 755
|
||||||
|
|
@ -427,6 +443,7 @@ examples/complete/complete-examples f
|
||||||
examples/complete/complete.ianmac f
|
examples/complete/complete.ianmac f
|
||||||
examples/complete/complete2.ianmac f
|
examples/complete/complete2.ianmac f
|
||||||
examples/complete/complete.freebsd f
|
examples/complete/complete.freebsd f
|
||||||
|
examples/complete/complete.gnu-longopt f
|
||||||
examples/loadables/README f
|
examples/loadables/README f
|
||||||
examples/loadables/template.c f
|
examples/loadables/template.c f
|
||||||
examples/loadables/Makefile.in f
|
examples/loadables/Makefile.in f
|
||||||
|
|
@ -434,9 +451,9 @@ examples/loadables/necho.c f
|
||||||
examples/loadables/hello.c f
|
examples/loadables/hello.c f
|
||||||
examples/loadables/print.c f
|
examples/loadables/print.c f
|
||||||
examples/loadables/realpath.c f
|
examples/loadables/realpath.c f
|
||||||
examples/loadables/sprintf.c f
|
|
||||||
examples/loadables/sleep.c f
|
examples/loadables/sleep.c f
|
||||||
examples/loadables/truefalse.c f
|
examples/loadables/truefalse.c f
|
||||||
|
examples/loadables/getconf.h f
|
||||||
examples/loadables/getconf.c f
|
examples/loadables/getconf.c f
|
||||||
examples/loadables/finfo.c f
|
examples/loadables/finfo.c f
|
||||||
examples/loadables/cat.c f
|
examples/loadables/cat.c f
|
||||||
|
|
@ -469,6 +486,9 @@ examples/functions/autoload.v2 f
|
||||||
examples/functions/autoload.v3 f
|
examples/functions/autoload.v3 f
|
||||||
examples/functions/basename f
|
examples/functions/basename f
|
||||||
examples/functions/basename2 f
|
examples/functions/basename2 f
|
||||||
|
examples/functions/coproc.bash f
|
||||||
|
examples/functions/coshell.README f
|
||||||
|
examples/functions/coshell.bash f
|
||||||
examples/functions/csh-compat f
|
examples/functions/csh-compat f
|
||||||
examples/functions/dirfuncs f
|
examples/functions/dirfuncs f
|
||||||
examples/functions/dirname f
|
examples/functions/dirname f
|
||||||
|
|
@ -737,6 +757,8 @@ tests/tilde.right f
|
||||||
tests/trap.tests f
|
tests/trap.tests f
|
||||||
tests/trap.right f
|
tests/trap.right f
|
||||||
tests/trap1.sub f 755
|
tests/trap1.sub f 755
|
||||||
|
tests/trap2.sub f 755
|
||||||
|
tests/trap2a.sub f 755
|
||||||
tests/type.tests f
|
tests/type.tests f
|
||||||
tests/type.right f
|
tests/type.right f
|
||||||
tests/varenv.right f
|
tests/varenv.right f
|
||||||
|
|
|
||||||
462
Makefile.in
462
Makefile.in
|
|
@ -1,4 +1,4 @@
|
||||||
# Makefile for bash-2.05, version 2.120
|
# Makefile for bash-2.05a, version 2.128
|
||||||
#
|
#
|
||||||
# Copyright (C) 1996 Free Software Foundation, Inc.
|
# Copyright (C) 1996 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
|
@ -31,13 +31,16 @@ includedir = @includedir@
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
manpfx = man
|
manpfx = man
|
||||||
|
|
||||||
man1ext = 1
|
man1ext = .1
|
||||||
man1dir = $(mandir)/$(manpfx)$(man1ext)
|
man1dir = $(mandir)/$(manpfx)1
|
||||||
man3ext = 3
|
man3ext = .3
|
||||||
man3dir = $(mandir)/$(manpfx)$(man3ext)
|
man3dir = $(mandir)/$(manpfx)3
|
||||||
|
|
||||||
htmldir = @htmldir@
|
htmldir = @htmldir@
|
||||||
|
|
||||||
|
# Support an alternate destination root directory for package building
|
||||||
|
DESTDIR =
|
||||||
|
|
||||||
topdir = @top_srcdir@
|
topdir = @top_srcdir@
|
||||||
BUILD_DIR = @BUILD_DIR@
|
BUILD_DIR = @BUILD_DIR@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
|
|
@ -73,11 +76,16 @@ PURIFY = @PURIFY@
|
||||||
$(RM) $@
|
$(RM) $@
|
||||||
$(CC) $(CCFLAGS) -c $<
|
$(CC) $(CCFLAGS) -c $<
|
||||||
|
|
||||||
# The name of this program and some version information.
|
|
||||||
EXEEXT = @EXEEXT@
|
EXEEXT = @EXEEXT@
|
||||||
|
OBJEXT = @OBJEXT@
|
||||||
|
|
||||||
|
# The name of this program and some version information.
|
||||||
|
VERSPROG = bashversion$(EXEEXT)
|
||||||
|
VERSOBJ = bashversion.$(OBJEXT)
|
||||||
|
|
||||||
Program = bash$(EXEEXT)
|
Program = bash$(EXEEXT)
|
||||||
Version = @BASHVERS@
|
Version = @BASHVERS@
|
||||||
PatchLevel = @BASHPATCH@
|
PatchLevel = `$(BUILD_DIR)/$(VERSPROG) -p`
|
||||||
RELSTATUS = release
|
RELSTATUS = release
|
||||||
|
|
||||||
Machine = @host_cpu@
|
Machine = @host_cpu@
|
||||||
|
|
@ -86,7 +94,8 @@ VENDOR = @host_vendor@
|
||||||
MACHTYPE = @host@
|
MACHTYPE = @host@
|
||||||
|
|
||||||
# comment out for release
|
# comment out for release
|
||||||
# DEBUG = -DDEBUG
|
#DEBUG = -DDEBUG
|
||||||
|
#MALLOC_DEBUG = -DMALLOC_DEBUG
|
||||||
|
|
||||||
THIS_SH = $(BUILD_DIR)/$(Program)
|
THIS_SH = $(BUILD_DIR)/$(Program)
|
||||||
|
|
||||||
|
|
@ -110,15 +119,18 @@ LOCAL_LDFLAGS = @LOCAL_LDFLAGS@
|
||||||
|
|
||||||
SYSTEM_FLAGS = -DPROGRAM='"$(Program)"' -DCONF_HOSTTYPE='"$(Machine)"' -DCONF_OSTYPE='"$(OS)"' -DCONF_MACHTYPE='"$(MACHTYPE)"' -DCONF_VENDOR='"$(VENDOR)"'
|
SYSTEM_FLAGS = -DPROGRAM='"$(Program)"' -DCONF_HOSTTYPE='"$(Machine)"' -DCONF_OSTYPE='"$(OS)"' -DCONF_MACHTYPE='"$(MACHTYPE)"' -DCONF_VENDOR='"$(VENDOR)"'
|
||||||
|
|
||||||
CCFLAGS = $(PROFILE_FLAGS) $(SYSTEM_FLAGS) $(LOCAL_DEFS) \
|
CCFLAGS_FOR_BUILD = $(PROFILE_FLAGS) $(SYSTEM_FLAGS) $(LOCAL_DEFS) \
|
||||||
$(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS)
|
$(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES)
|
||||||
|
|
||||||
INCLUDES = -I. @RL_INCLUDE@ -I$(srcdir) -I$(BASHINCDIR) -I$(LIBSRC) -I$(includedir)
|
CCFLAGS = $(CCFLAGS_FOR_BUILD) $(CFLAGS)
|
||||||
|
|
||||||
GCC_LINT_FLAGS = -ansi -Wall -Wshadow -Wpointer-arith -Wcast-qual \
|
INCLUDES = -I. @RL_INCLUDE@ -I$(srcdir) -I$(BASHINCDIR) -I$(LIBSRC)
|
||||||
-Wwrite-strings -Werror -Wstrict-prototypes \
|
|
||||||
-Wmissing-prototypes -Wno-implicit
|
GCC_LINT_FLAGS = -Wall -Wshadow -Wpointer-arith -Wcast-qual \
|
||||||
GCC_LINT_CFLAGS = $(CCFLAGS) $(GCC_LINT_FLAGS)
|
-Wcast-align -Wstrict-prototypes -Wconversion \
|
||||||
|
-Wmissing-prototypes -Wtraditional -Wredundant-decls -pedantic
|
||||||
|
|
||||||
|
GCC_LINT_CFLAGS = $(CCFLAGS_FOR_BUILD) $(GCC_LINT_FLAGS)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Support libraries
|
# Support libraries
|
||||||
|
|
@ -129,7 +141,7 @@ dot = .
|
||||||
LIBSUBDIR = lib
|
LIBSUBDIR = lib
|
||||||
LIBSRC = $(srcdir)/$(LIBSUBDIR)
|
LIBSRC = $(srcdir)/$(LIBSUBDIR)
|
||||||
|
|
||||||
SUBDIR_INCLUDES = -I. @RL_INCLUDE@ -I$(topdir) -I$(topdir)/$(LIBSUBDIR) -I$(includedir)
|
SUBDIR_INCLUDES = -I. @RL_INCLUDE@ -I$(topdir) -I$(topdir)/$(LIBSUBDIR)
|
||||||
|
|
||||||
# the bash library
|
# the bash library
|
||||||
# the library is a mix of functions that the C library does not provide on
|
# the library is a mix of functions that the C library does not provide on
|
||||||
|
|
@ -153,7 +165,11 @@ SHLIB_SOURCE = ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \
|
||||||
${SH_LIBSRC}/pathphys.c ${SH_LIBSRC}/stringlist.c \
|
${SH_LIBSRC}/pathphys.c ${SH_LIBSRC}/stringlist.c \
|
||||||
${SH_LIBSRC}/stringvec.c ${SH_LIBSRC}/tmpfile.c \
|
${SH_LIBSRC}/stringvec.c ${SH_LIBSRC}/tmpfile.c \
|
||||||
${SH_LIBSRC}/spell.c ${SH_LIBSRC}/strtrans.c \
|
${SH_LIBSRC}/spell.c ${SH_LIBSRC}/strtrans.c \
|
||||||
${SH_LIBSRC}/strindex.c ${SH_LIBSRC}/shquote.c
|
${SH_LIBSRC}/strindex.c ${SH_LIBSRC}/shquote.c \
|
||||||
|
${SH_LIBSRC}/snprintf.c ${SH_LIBSRC}/mailstat.c \
|
||||||
|
${SH_LIBSRC}/fmtulong.c ${SH_LIBSRC}/fmtullong.c \
|
||||||
|
${SH_LIBSRC}/strtoll.c ${SH_LIBSRC}/strtoull.c \
|
||||||
|
${SH_LIBSRC}/strtoimax.c ${SH_LIBSRC}/strtoumax.c
|
||||||
|
|
||||||
SHLIB_LIB = -lsh
|
SHLIB_LIB = -lsh
|
||||||
SHLIB_LIBNAME = libsh.a
|
SHLIB_LIBNAME = libsh.a
|
||||||
|
|
@ -167,6 +183,8 @@ RL_LIBDOC = $(RL_LIBSRC)/doc
|
||||||
RL_LIBDIR = @RL_LIBDIR@
|
RL_LIBDIR = @RL_LIBDIR@
|
||||||
RL_ABSSRC = ${topdir}/$(RL_LIBDIR)
|
RL_ABSSRC = ${topdir}/$(RL_LIBDIR)
|
||||||
|
|
||||||
|
RL_INCLUDEDIR = @RL_INCLUDEDIR@
|
||||||
|
|
||||||
READLINE_LIB = @READLINE_LIB@
|
READLINE_LIB = @READLINE_LIB@
|
||||||
READLINE_LIBRARY = $(RL_LIBDIR)/libreadline.a
|
READLINE_LIBRARY = $(RL_LIBDIR)/libreadline.a
|
||||||
READLINE_LDFLAGS = -L${RL_LIBDIR}
|
READLINE_LDFLAGS = -L${RL_LIBDIR}
|
||||||
|
|
@ -252,9 +270,9 @@ GLOB_LIBRARY = $(GLOB_LIBDIR)/libglob.a
|
||||||
GLOB_LDFLAGS = -L$(GLOB_LIBDIR)
|
GLOB_LDFLAGS = -L$(GLOB_LIBDIR)
|
||||||
GLOB_DEP = $(GLOB_LIBRARY)
|
GLOB_DEP = $(GLOB_LIBRARY)
|
||||||
|
|
||||||
GLOB_SOURCE = $(GLOB_LIBSRC)/glob.c $(GLOB_LIBSRC)/fnmatch.c \
|
GLOB_SOURCE = $(GLOB_LIBSRC)/glob.c $(GLOB_LIBSRC)/strmatch.c \
|
||||||
$(GLOB_LIBSRC)/glob.h $(GLOB_LIBSRC)/fnmatch.h
|
$(GLOB_LIBSRC)/glob.h $(GLOB_LIBSRC)/strmatch.h
|
||||||
GLOB_OBJ = $(GLOB_LIBDIR)/glob.o $(GLOB_LIBDIR)/fnmatch.o
|
GLOB_OBJ = $(GLOB_LIBDIR)/glob.o $(GLOB_LIBDIR)/strmatch.o
|
||||||
|
|
||||||
# The source, object and documentation for the GNU Tilde library.
|
# The source, object and documentation for the GNU Tilde library.
|
||||||
TILDE_LIBSRC = $(LIBSRC)/tilde
|
TILDE_LIBSRC = $(LIBSRC)/tilde
|
||||||
|
|
@ -280,17 +298,20 @@ ALLOC_LIBDIR = $(dot)/$(LIBSUBDIR)/malloc
|
||||||
ALLOC_ABSSRC = ${topdir}/$(ALLOC_LIBDIR)
|
ALLOC_ABSSRC = ${topdir}/$(ALLOC_LIBDIR)
|
||||||
|
|
||||||
MALLOC_SRC = @MALLOC_SRC@
|
MALLOC_SRC = @MALLOC_SRC@
|
||||||
MALLOC_SOURCE = ${ALLOC_LIBSRC}/${MALLOC_SRC}
|
MALLOC_OTHERSRC = ${ALLOC_LIBSRC}/trace.c ${ALLOC_LIBSRC}/stats.c \
|
||||||
MALLOC_CFLAGS = -DRCHECK -Dbotch=programming_error
|
${ALLOC_LIBSRC}/table.c
|
||||||
|
MALLOC_SOURCE = ${ALLOC_LIBSRC}/${MALLOC_SRC} ${MALLOC_OTHERSRC}
|
||||||
|
MALLOC_CFLAGS = -DRCHECK -Dbotch=programming_error ${MALLOC_DEBUG}
|
||||||
|
|
||||||
MALLOC_LIB = -lmalloc
|
MALLOC_LIB = @MALLOC_LIB@
|
||||||
MALLOC_LIBRARY = $(ALLOC_LIBDIR)/libmalloc.a
|
MALLOC_LIBRARY = @MALLOC_LIBRARY@
|
||||||
MALLOC_LDFLAGS = -L$(ALLOC_LIBDIR)
|
MALLOC_LDFLAGS = @MALLOC_LDFLAGS@
|
||||||
MALLOC_DEP = $(MALLOC_LIBRARY)
|
MALLOC_DEP = @MALLOC_DEP@
|
||||||
|
|
||||||
ALLOC_HEADERS = $(ALLOC_LIBSRC)/getpagesize.h
|
ALLOC_HEADERS = $(ALLOC_LIBSRC)/getpagesize.h $(ALLOC_LIBSRC)/shmalloc.h \
|
||||||
|
$(ALLOC_LIBSRC)/imalloc.h $(ALLOC_LIBSRC)/mstats.h
|
||||||
|
|
||||||
$(MALLOC_LIBRARY): ${MALLOC_SOURCE}
|
$(MALLOC_LIBRARY): ${MALLOC_SOURCE} ${ALLOC_HEADERS} config.h
|
||||||
@(cd $(ALLOC_LIBDIR) && \
|
@(cd $(ALLOC_LIBDIR) && \
|
||||||
$(MAKE) $(MFLAGS) \
|
$(MAKE) $(MFLAGS) \
|
||||||
MALLOC_CFLAGS="$(MALLOC_CFLAGS)" ${MALLOC_TARGET} ) || exit 1
|
MALLOC_CFLAGS="$(MALLOC_CFLAGS)" ${MALLOC_TARGET} ) || exit 1
|
||||||
|
|
@ -302,7 +323,7 @@ BASHINCFILES = $(BASHINCDIR)/posixstat.h $(BASHINCDIR)/ansi_stdlib.h \
|
||||||
$(BASHINCDIR)/posixjmp.h $(BASHINCDIR)/posixwait.h \
|
$(BASHINCDIR)/posixjmp.h $(BASHINCDIR)/posixwait.h \
|
||||||
$(BASHINCDIR)/posixtime.h $(BASHINCDIR)/systimes.h \
|
$(BASHINCDIR)/posixtime.h $(BASHINCDIR)/systimes.h \
|
||||||
$(BASHINCDIR)/unionwait.h $(BASHINCDIR)/maxpath.h \
|
$(BASHINCDIR)/unionwait.h $(BASHINCDIR)/maxpath.h \
|
||||||
$(BASHINCDIR)/shtty.h
|
$(BASHINCDIR)/shtty.h $(BASHINCDIR)/typemax.h
|
||||||
|
|
||||||
LIBRARIES = $(SHLIB_LIB) $(READLINE_LIB) $(HISTORY_LIB) $(TERMCAP_LIB) $(GLOB_LIB) \
|
LIBRARIES = $(SHLIB_LIB) $(READLINE_LIB) $(HISTORY_LIB) $(TERMCAP_LIB) $(GLOB_LIB) \
|
||||||
$(TILDE_LIB) $(MALLOC_LIB) $(LOCAL_LIBS)
|
$(TILDE_LIB) $(MALLOC_LIB) $(LOCAL_LIBS)
|
||||||
|
|
@ -322,17 +343,17 @@ CSOURCES = shell.c eval.c parse.y general.c make_cmd.c print_cmd.c y.tab.c \
|
||||||
dispose_cmd.c execute_cmd.c variables.c $(GLOBC) version.c \
|
dispose_cmd.c execute_cmd.c variables.c $(GLOBC) version.c \
|
||||||
expr.c copy_cmd.c flags.c subst.c hashcmd.c hashlib.c mailcheck.c \
|
expr.c copy_cmd.c flags.c subst.c hashcmd.c hashlib.c mailcheck.c \
|
||||||
test.c trap.c alias.c jobs.c nojobs.c $(ALLOC_FILES) braces.c \
|
test.c trap.c alias.c jobs.c nojobs.c $(ALLOC_FILES) braces.c \
|
||||||
input.c bashhist.c array.c sig.c pathexp.c \
|
input.c bashhist.c array.c arrayfunc.c sig.c pathexp.c \
|
||||||
unwind_prot.c siglist.c bashline.c bracecomp.c error.c \
|
unwind_prot.c siglist.c bashline.c bracecomp.c error.c \
|
||||||
list.c stringlib.c locale.c findcmd.c redir.c \
|
list.c stringlib.c locale.c findcmd.c redir.c \
|
||||||
pcomplete.c pcomplib.c syntax.c xmalloc.c
|
pcomplete.c pcomplib.c syntax.c xmalloc.c
|
||||||
|
|
||||||
HSOURCES = shell.h flags.h trap.h hashcmd.h hashlib.h jobs.h builtins.h \
|
HSOURCES = shell.h flags.h trap.h hashcmd.h hashlib.h jobs.h builtins.h \
|
||||||
general.h variables.h config.h $(ALLOC_HEADERS) alias.h \
|
general.h variables.h config.h $(ALLOC_HEADERS) alias.h \
|
||||||
quit.h unwind_prot.h syntax.h \
|
quit.h unwind_prot.h syntax.h ${GRAM_H} \
|
||||||
command.h input.h error.h bashansi.h dispose_cmd.h make_cmd.h \
|
command.h input.h error.h bashansi.h dispose_cmd.h make_cmd.h \
|
||||||
subst.h externs.h siglist.h bashhist.h bashline.h bashtypes.h \
|
subst.h externs.h siglist.h bashhist.h bashline.h bashtypes.h \
|
||||||
array.h sig.h mailcheck.h bashintl.h bashjmp.h ${GRAM_H} \
|
array.h arrayfunc.h sig.h mailcheck.h bashintl.h bashjmp.h \
|
||||||
execute_cmd.h parser.h pathexp.h pathnames.h pcomplete.h \
|
execute_cmd.h parser.h pathexp.h pathnames.h pcomplete.h \
|
||||||
$(BASHINCFILES)
|
$(BASHINCFILES)
|
||||||
|
|
||||||
|
|
@ -343,14 +364,15 @@ SIGNAMES_H = @SIGNAMES_H@
|
||||||
|
|
||||||
# object files chosen based on running of configure
|
# object files chosen based on running of configure
|
||||||
JOBS_O = @JOBS_O@
|
JOBS_O = @JOBS_O@
|
||||||
|
SIGLIST_O = @SIGLIST_O@
|
||||||
|
|
||||||
# Matching object files.
|
# Matching object files.
|
||||||
OBJECTS = shell.o eval.o y.tab.o general.o make_cmd.o print_cmd.o $(GLOBO) \
|
OBJECTS = shell.o eval.o y.tab.o general.o make_cmd.o print_cmd.o $(GLOBO) \
|
||||||
dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o \
|
dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o \
|
||||||
expr.o flags.o $(JOBS_O) subst.o hashcmd.o hashlib.o mailcheck.o \
|
expr.o flags.o $(JOBS_O) subst.o hashcmd.o hashlib.o mailcheck.o \
|
||||||
trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o \
|
trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o \
|
||||||
alias.o array.o braces.o bracecomp.o bashhist.o bashline.o \
|
alias.o array.o arrayfunc.o braces.o bracecomp.o bashhist.o \
|
||||||
siglist.o list.o stringlib.o locale.o findcmd.o redir.o \
|
bashline.o $(SIGLIST_O) list.o stringlib.o locale.o findcmd.o redir.o \
|
||||||
pcomplete.o pcomplib.o syntax.o xmalloc.o
|
pcomplete.o pcomplib.o syntax.o xmalloc.o
|
||||||
|
|
||||||
# Where the source code of the shell builtins resides.
|
# Where the source code of the shell builtins resides.
|
||||||
|
|
@ -414,7 +436,7 @@ TESTS_SUPPORT = recho$(EXEEXT) zecho$(EXEEXT) printenv$(EXEEXT)
|
||||||
CREATED_SUPPORT = signames.h recho$(EXEEXT) zecho$(EXEEXT) printenv$(EXEEXT) \
|
CREATED_SUPPORT = signames.h recho$(EXEEXT) zecho$(EXEEXT) printenv$(EXEEXT) \
|
||||||
tests/recho$(EXEEXT) tests/zecho$(EXEEXT) \
|
tests/recho$(EXEEXT) tests/zecho$(EXEEXT) \
|
||||||
tests/printenv$(EXEEXT) mksignames$(EXEEXT) lsignames.h \
|
tests/printenv$(EXEEXT) mksignames$(EXEEXT) lsignames.h \
|
||||||
mksyntax${EXEEXT} syntax.c
|
mksyntax${EXEEXT} syntax.c $(VERSPROG) $(VERSOBJ)
|
||||||
CREATED_CONFIGURE = config.h config.cache config.status config.log \
|
CREATED_CONFIGURE = config.h config.cache config.status config.log \
|
||||||
stamp-h
|
stamp-h
|
||||||
CREATED_MAKEFILES = Makefile builtins/Makefile doc/Makefile \
|
CREATED_MAKEFILES = Makefile builtins/Makefile doc/Makefile \
|
||||||
|
|
@ -435,16 +457,16 @@ $(Program): .build $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP)
|
||||||
ls -l $(Program)
|
ls -l $(Program)
|
||||||
size $(Program)
|
size $(Program)
|
||||||
|
|
||||||
.build: $(SOURCES) config.h Makefile version.h
|
.build: $(SOURCES) config.h Makefile version.h $(VERSPROG)
|
||||||
@echo
|
@echo
|
||||||
@echo " ***********************************************************"
|
@echo " ***********************************************************"
|
||||||
@echo " * *"
|
@echo " * *"
|
||||||
@echo " * Making Bash-$(Version).$(PatchLevel)-$(RELSTATUS) for a $(Machine) running $(OS)"
|
@echo " * `$(BUILD_DIR)/$(VERSPROG) -l`"
|
||||||
@echo " * *"
|
@echo " * *"
|
||||||
@echo " ***********************************************************"
|
@echo " ***********************************************************"
|
||||||
@echo
|
@echo
|
||||||
|
|
||||||
bashbug: $(SUPPORT_SRC)bashbug.sh config.h Makefile
|
bashbug: $(SUPPORT_SRC)bashbug.sh config.h Makefile $(VERSPROG)
|
||||||
@sed -e "s%!MACHINE!%$(Machine)%" -e "s%!OS!%$(OS)%" \
|
@sed -e "s%!MACHINE!%$(Machine)%" -e "s%!OS!%$(OS)%" \
|
||||||
-e "s%!CFLAGS!%$(CCFLAGS)%" -e "s%!CC!%$(CC)%" \
|
-e "s%!CFLAGS!%$(CCFLAGS)%" -e "s%!CC!%$(CC)%" \
|
||||||
-e "s%!RELEASE!%$(Version)%" -e "s%!PATCHLEVEL!%$(PatchLevel)%" \
|
-e "s%!RELEASE!%$(Version)%" -e "s%!PATCHLEVEL!%$(PatchLevel)%" \
|
||||||
|
|
@ -457,10 +479,16 @@ strip: $(Program) .made
|
||||||
ls -l $(Program)
|
ls -l $(Program)
|
||||||
size $(Program)
|
size $(Program)
|
||||||
|
|
||||||
|
lint:
|
||||||
|
${MAKE} ${MFLAGS} CFLAGS='${GCC_LINT_FLAGS}' .made
|
||||||
|
|
||||||
version.h: $(SOURCES) config.h Makefile
|
version.h: $(SOURCES) config.h Makefile
|
||||||
$(SHELL) $(SUPPORT_SRC)mkversion.sh -b -s $(RELSTATUS) -d $(Version) -p $(PatchLevel) -o newversion.h \
|
$(SHELL) $(SUPPORT_SRC)mkversion.sh -b -S ${topdir} -s $(RELSTATUS) -d $(Version) -o newversion.h \
|
||||||
&& mv newversion.h version.h
|
&& mv newversion.h version.h
|
||||||
|
|
||||||
|
bashversion$(EXEEXT): patchlevel.h conftypes.h version.h version.o $(SUPPORT_SRC)bashversion.c
|
||||||
|
$(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) $(CPPFLAGS) -o $@ $(SUPPORT_SRC)bashversion.c version.o
|
||||||
|
|
||||||
# old rules
|
# old rules
|
||||||
GRAM_H = parser-built
|
GRAM_H = parser-built
|
||||||
y.tab.o: y.tab.c ${GRAM_H} command.h ${BASHINCDIR}/stdc.h input.h
|
y.tab.o: y.tab.c ${GRAM_H} command.h ${BASHINCDIR}/stdc.h input.h
|
||||||
|
|
@ -471,6 +499,7 @@ ${GRAM_H}: y.tab.h
|
||||||
y.tab.c y.tab.h: parse.y
|
y.tab.c y.tab.h: parse.y
|
||||||
# -if test -f y.tab.h; then mv -f y.tab.h old-y.tab.h; fi
|
# -if test -f y.tab.h; then mv -f y.tab.h old-y.tab.h; fi
|
||||||
$(YACC) -d $(srcdir)/parse.y
|
$(YACC) -d $(srcdir)/parse.y
|
||||||
|
touch parser-built
|
||||||
# -if cmp -s old-y.tab.h y.tab.h; then mv old-y.tab.h y.tab.h; else cp -p y.tab.h ${GRAM_H}; fi
|
# -if cmp -s old-y.tab.h y.tab.h; then mv old-y.tab.h y.tab.h; else cp -p y.tab.h ${GRAM_H}; fi
|
||||||
|
|
||||||
# experimental new rules - work with GNU make but not BSD (or OSF) make
|
# experimental new rules - work with GNU make but not BSD (or OSF) make
|
||||||
|
|
@ -493,7 +522,7 @@ $(HISTORY_LIBRARY): config.h $(HISTORY_SOURCE)
|
||||||
$(GLOB_LIBRARY): config.h $(GLOB_SOURCE)
|
$(GLOB_LIBRARY): config.h $(GLOB_SOURCE)
|
||||||
@echo making $@ in ${GLOB_LIBDIR}
|
@echo making $@ in ${GLOB_LIBDIR}
|
||||||
@(cd ${GLOB_LIBDIR} && \
|
@(cd ${GLOB_LIBDIR} && \
|
||||||
$(MAKE) $(MFLAGS) libglob.a) || exit 1
|
$(MAKE) $(MFLAGS) DEBUG=${DEBUG} libglob.a) || exit 1
|
||||||
|
|
||||||
$(TILDE_LIBRARY): config.h $(TILDE_SOURCE)
|
$(TILDE_LIBRARY): config.h $(TILDE_SOURCE)
|
||||||
@echo making $@ in ${TILDE_LIBDIR}
|
@echo making $@ in ${TILDE_LIBDIR}
|
||||||
|
|
@ -508,13 +537,13 @@ $(TERMCAP_LIBRARY): config.h ${TERMCAP_SOURCE}
|
||||||
$(SHLIB_LIBRARY): config.h ${SHLIB_SOURCE}
|
$(SHLIB_LIBRARY): config.h ${SHLIB_SOURCE}
|
||||||
@echo making $@ in ${SH_LIBDIR}
|
@echo making $@ in ${SH_LIBDIR}
|
||||||
@(cd ${SH_LIBDIR} && \
|
@(cd ${SH_LIBDIR} && \
|
||||||
$(MAKE) $(MFLAGS) ${SHLIB_LIBNAME}) || exit 1
|
$(MAKE) $(MFLAGS) DEBUG=${DEBUG} ${SHLIB_LIBNAME}) || exit 1
|
||||||
|
|
||||||
mksignames$(EXEEXT): $(SUPPORT_SRC)mksignames.c
|
mksignames$(EXEEXT): $(SUPPORT_SRC)mksignames.c
|
||||||
$(CC_FOR_BUILD) $(CCFLAGS) $(CPPFLAGS) -o $@ $(SUPPORT_SRC)mksignames.c
|
$(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) $(CPPFLAGS) -o $@ $(SUPPORT_SRC)mksignames.c
|
||||||
|
|
||||||
mksyntax$(EXEEXT): ${srcdir}/mksyntax.c config.h syntax.h
|
mksyntax$(EXEEXT): ${srcdir}/mksyntax.c config.h syntax.h ${BASHINCDIR}/chartypes.h
|
||||||
${CC_FOR_BUILD} ${CCFLAGS} ${CPPFLAGS} -o $@ ${srcdir}/mksyntax.c
|
${CC_FOR_BUILD} ${CCFLAGS_FOR_BUILD} ${CPPFLAGS} -o $@ ${srcdir}/mksyntax.c
|
||||||
|
|
||||||
# make a list of signals for the local system -- this is done when we're
|
# make a list of signals for the local system -- this is done when we're
|
||||||
# *not* cross-compiling
|
# *not* cross-compiling
|
||||||
|
|
@ -531,14 +560,14 @@ syntax.c: mksyntax${EXEEXT} $(srcdir)/syntax.h
|
||||||
./mksyntax -o $@
|
./mksyntax -o $@
|
||||||
|
|
||||||
$(BUILTINS_LIBRARY): $(BUILTIN_DEFS) $(BUILTIN_C_SRC) config.h ${BASHINCDIR}/memalloc.h
|
$(BUILTINS_LIBRARY): $(BUILTIN_DEFS) $(BUILTIN_C_SRC) config.h ${BASHINCDIR}/memalloc.h
|
||||||
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) libbuiltins.a ) || exit 1
|
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) DEBUG=${DEBUG} libbuiltins.a ) || exit 1
|
||||||
|
|
||||||
# these require special rules to circumvent make builtin rules
|
# these require special rules to circumvent make builtin rules
|
||||||
${DEFDIR}/common.o: $(BUILTIN_SRCDIR)/common.c
|
${DEFDIR}/common.o: $(BUILTIN_SRCDIR)/common.c
|
||||||
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) common.o) || exit 1
|
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) DEBUG=${DEBUG} common.o) || exit 1
|
||||||
|
|
||||||
${DEFDIR}/bashgetopt.o: $(BUILTIN_SRCDIR)/bashgetopt.c
|
${DEFDIR}/bashgetopt.o: $(BUILTIN_SRCDIR)/bashgetopt.c
|
||||||
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) bashgetopt.o) || exit 1
|
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) DEBUG=${DEBUG} bashgetopt.o) || exit 1
|
||||||
|
|
||||||
${DEFDIR}/builtext.h: $(BUILTIN_DEFS)
|
${DEFDIR}/builtext.h: $(BUILTIN_DEFS)
|
||||||
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) builtext.h ) || exit 1
|
@(cd $(DEFDIR) && $(MAKE) $(MFLAGS) builtext.h ) || exit 1
|
||||||
|
|
@ -593,28 +622,29 @@ TAGS: $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE)
|
||||||
# Targets that actually do things not part of the build
|
# Targets that actually do things not part of the build
|
||||||
|
|
||||||
installdirs:
|
installdirs:
|
||||||
@${SHELL} $(SUPPORT_SRC)mkdirs $(bindir)
|
@${SHELL} $(SUPPORT_SRC)mkdirs $(DESTDIR)$(bindir)
|
||||||
@${SHELL} $(SUPPORT_SRC)mkdirs $(man1dir) $(man3dir)
|
@${SHELL} $(SUPPORT_SRC)mkdirs $(DESTDIR)$(man1dir)
|
||||||
@${SHELL} $(SUPPORT_SRC)mkdirs $(infodir)
|
@${SHELL} $(SUPPORT_SRC)mkdirs $(DESTDIR)$(infodir)
|
||||||
|
|
||||||
install: .made installdirs
|
install: .made installdirs
|
||||||
$(INSTALL_PROGRAM) $(INSTALLMODE) $(Program) $(bindir)/$(Program)
|
$(INSTALL_PROGRAM) $(INSTALLMODE) $(Program) $(DESTDIR)$(bindir)/$(Program)
|
||||||
$(INSTALL_PROGRAM) $(INSTALLMODE2) bashbug $(bindir)/bashbug
|
$(INSTALL_PROGRAM) $(INSTALLMODE2) bashbug $(DESTDIR)$(bindir)/bashbug
|
||||||
-( cd $(DOCDIR) ; $(MAKE) $(MFLAGS) \
|
-( cd $(DOCDIR) ; $(MAKE) $(MFLAGS) \
|
||||||
man1dir=$(man1dir) man1ext=$(man1ext) \
|
man1dir=$(man1dir) man1ext=$(man1ext) \
|
||||||
man3dir=$(man3dir) man3ext=$(man3ext) \
|
man3dir=$(man3dir) man3ext=$(man3ext) \
|
||||||
infodir=$(infodir) htmldir=$(htmldir) $@ )
|
infodir=$(infodir) htmldir=$(htmldir) DESTDIR=$(DESTDIR) $@ )
|
||||||
|
|
||||||
install-strip:
|
install-strip:
|
||||||
$(MAKE) $(MFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
|
$(MAKE) $(MFLAGS) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' \
|
||||||
prefix=${prefix} exec_prefix=${exec_prefix} install
|
prefix=${prefix} exec_prefix=${exec_prefix} \
|
||||||
|
DESTDIR=$(DESTDIR) install
|
||||||
|
|
||||||
uninstall: .made
|
uninstall: .made
|
||||||
$(RM) $(bindir)/$(Program) $(bindir)/bashbug
|
$(RM) $(DESTDIR)$(bindir)/$(Program) $(DESTDIR)$(bindir)/bashbug
|
||||||
-( cd $(DOCDIR) ; $(MAKE) $(MFLAGS) \
|
-( cd $(DOCDIR) ; $(MAKE) $(MFLAGS) \
|
||||||
man1dir=$(man1dir) man1ext=$(man1ext) \
|
man1dir=$(man1dir) man1ext=$(man1ext) \
|
||||||
man3dir=$(man3dir) man3ext=$(man3ext) \
|
man3dir=$(man3dir) man3ext=$(man3ext) \
|
||||||
infodir=$(infodir) $@ )
|
infodir=$(infodir) htmldir=$(htmldir) DESTDIR=$(DESTDIR) $@ )
|
||||||
|
|
||||||
.PHONY: basic-clean clean realclean maintainer-clean distclean mostlyclean
|
.PHONY: basic-clean clean realclean maintainer-clean distclean mostlyclean
|
||||||
basic-clean:
|
basic-clean:
|
||||||
|
|
@ -660,7 +690,7 @@ distclean: basic-clean
|
||||||
maintainer-clean: basic-clean
|
maintainer-clean: basic-clean
|
||||||
@echo This command is intended for maintainers to use.
|
@echo This command is intended for maintainers to use.
|
||||||
@echo It deletes files that may require special tools to rebuild.
|
@echo It deletes files that may require special tools to rebuild.
|
||||||
$(RM) y.tab.c y.tab.h parser-built.h tags TAGS
|
$(RM) y.tab.c y.tab.h parser-built tags TAGS
|
||||||
( cd $(DOCDIR) && $(MAKE) $(MFLAGS) $@ )
|
( cd $(DOCDIR) && $(MAKE) $(MFLAGS) $@ )
|
||||||
( cd builtins && $(MAKE) $(MFLAGS) $@ )
|
( cd builtins && $(MAKE) $(MFLAGS) $@ )
|
||||||
-(cd $(RL_LIBDIR) && $(MAKE) $(MFLAGS) $@)
|
-(cd $(RL_LIBDIR) && $(MAKE) $(MFLAGS) $@)
|
||||||
|
|
@ -682,7 +712,7 @@ zecho$(EXEEXT): $(SUPPORT_SRC)zecho.c
|
||||||
printenv$(EXEEXT): $(SUPPORT_SRC)printenv.c
|
printenv$(EXEEXT): $(SUPPORT_SRC)printenv.c
|
||||||
@$(CC) $(CCFLAGS) -o $@ $(SUPPORT_SRC)printenv.c
|
@$(CC) $(CCFLAGS) -o $@ $(SUPPORT_SRC)printenv.c
|
||||||
|
|
||||||
test tests check: force $(Program) $(TESTS_SUPPORT)
|
test tests check: force $(Program) $(TESTS_SUPPORT)
|
||||||
@-test -d tests || mkdir tests
|
@-test -d tests || mkdir tests
|
||||||
@cp $(TESTS_SUPPORT) tests
|
@cp $(TESTS_SUPPORT) tests
|
||||||
@( cd $(srcdir)/tests && \
|
@( cd $(srcdir)/tests && \
|
||||||
|
|
@ -703,6 +733,10 @@ depend: depends
|
||||||
depends: force
|
depends: force
|
||||||
$(Program) $(SUPPORT_SRC)mkdep -c ${CC} -- ${CCFLAGS} ${CSOURCES}
|
$(Program) $(SUPPORT_SRC)mkdep -c ${CC} -- ${CCFLAGS} ${CSOURCES}
|
||||||
|
|
||||||
|
#### PRIVATE TARGETS ####
|
||||||
|
hashtest: hashlib.c
|
||||||
|
$(CC) -DTEST_HASHING $(CCFLAGS) -o $@ $(srcdir)/hashlib.c
|
||||||
|
|
||||||
############################ DEPENDENCIES ###############################
|
############################ DEPENDENCIES ###############################
|
||||||
|
|
||||||
# Files that depend on the definitions in config-top.h, which are not meant
|
# Files that depend on the definitions in config-top.h, which are not meant
|
||||||
|
|
@ -724,158 +758,166 @@ builtins/kill.o: config-top.h
|
||||||
|
|
||||||
# shell basics
|
# shell basics
|
||||||
copy_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
copy_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
copy_cmd.o: general.h bashtypes.h variables.h array.h hashlib.h
|
copy_cmd.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
copy_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
copy_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
copy_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
copy_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
dispose_cmd.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
dispose_cmd.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
dispose_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h
|
dispose_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h
|
||||||
dispose_cmd.o: error.h general.h bashtypes.h variables.h array.h hashlib.h
|
dispose_cmd.o: error.h general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
dispose_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
dispose_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
dispose_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
dispose_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
error.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h flags.h ${BASHINCDIR}/stdc.h error.h
|
error.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h flags.h ${BASHINCDIR}/stdc.h error.h
|
||||||
error.o: command.h general.h externs.h input.h bashhist.h
|
error.o: command.h general.h xmalloc.h externs.h input.h bashhist.h
|
||||||
eval.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h trap.h flags.h ${DEFSRC}/common.h
|
eval.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h trap.h flags.h ${DEFSRC}/common.h
|
||||||
eval.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
eval.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
eval.o: general.h bashtypes.h variables.h array.h hashlib.h
|
eval.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
eval.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
eval.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
eval.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
eval.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
eval.o: input.h execute_cmd.h
|
eval.o: input.h execute_cmd.h
|
||||||
execute_cmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
execute_cmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
execute_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
execute_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
execute_cmd.o: general.h bashtypes.h variables.h array.h hashlib.h
|
execute_cmd.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
execute_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
execute_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
execute_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
execute_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
execute_cmd.o: ${BASHINCDIR}/memalloc.h ${GRAM_H} flags.h builtins.h jobs.h quit.h siglist.h
|
execute_cmd.o: ${BASHINCDIR}/memalloc.h ${GRAM_H} flags.h builtins.h jobs.h quit.h siglist.h
|
||||||
execute_cmd.o: execute_cmd.h findcmd.h redir.h trap.h test.h pathexp.h
|
execute_cmd.o: execute_cmd.h findcmd.h redir.h trap.h test.h pathexp.h
|
||||||
execute_cmd.o: $(DEFSRC)/common.h ${DEFDIR}/builtext.h ${GLOB_LIBSRC}/fnmatch.h
|
execute_cmd.o: $(DEFSRC)/common.h ${DEFDIR}/builtext.h ${GLOB_LIBSRC}/strmatch.h
|
||||||
execute_cmd.o: ${BASHINCDIR}/posixtime.h
|
execute_cmd.o: ${BASHINCDIR}/posixtime.h ${BASHINCDIR}/chartypes.h
|
||||||
expr.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
expr.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
expr.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
expr.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
expr.o: general.h bashtypes.h variables.h array.h hashlib.h
|
expr.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
expr.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
expr.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
expr.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
expr.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
|
expr.o: ${BASHINCDIR}/chartypes.h
|
||||||
findcmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h ${BASHINCDIR}/posixstat.h bashansi.h
|
findcmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h ${BASHINCDIR}/posixstat.h bashansi.h
|
||||||
findcmd.o: ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/memalloc.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h
|
findcmd.o: ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/memalloc.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h
|
||||||
findcmd.o: ${BASHINCDIR}/stdc.h error.h general.h variables.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h
|
findcmd.o: ${BASHINCDIR}/stdc.h error.h general.h xmalloc.h variables.h arrayfunc.h conftypes.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h
|
||||||
findcmd.o: dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h externs.h
|
findcmd.o: dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
findcmd.o: flags.h hashlib.h pathexp.h hashcmd.h
|
findcmd.o: flags.h hashlib.h pathexp.h hashcmd.h
|
||||||
|
findcmd.o: ${BASHINCDIR}/chartypes.h
|
||||||
flags.o: config.h flags.h
|
flags.o: config.h flags.h
|
||||||
flags.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
flags.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
flags.o: general.h bashtypes.h variables.h array.h hashlib.h
|
flags.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
flags.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
flags.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
flags.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
flags.o: make_cmd.h subst.h sig.h pathnames.h externs.h bashhist.h
|
||||||
general.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
general.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
general.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
general.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
general.o: general.h bashtypes.h variables.h array.h hashlib.h
|
general.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
general.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
general.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
general.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
general.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
general.o: ${BASHINCDIR}/maxpath.h ${BASHINCDIR}/posixtime.h
|
general.o: ${BASHINCDIR}/maxpath.h ${BASHINCDIR}/posixtime.h
|
||||||
|
general.o: ${BASHINCDIR}/chartypes.h
|
||||||
hashcmd.o: config.h ${BASHINCDIR}/posixstat.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
hashcmd.o: config.h ${BASHINCDIR}/posixstat.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
hashcmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
hashcmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
hashcmd.o: general.h bashtypes.h variables.h array.h hashcmd.h
|
hashcmd.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashcmd.h
|
||||||
hashcmd.o: execute_cmd.h findcmd.h ${BASHINCDIR}/stdc.h
|
hashcmd.o: execute_cmd.h findcmd.h ${BASHINCDIR}/stdc.h
|
||||||
hashlib.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
hashlib.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
hashlib.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
hashlib.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
hashlib.o: general.h bashtypes.h variables.h array.h hashlib.h
|
hashlib.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
hashlib.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
hashlib.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
hashlib.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
hashlib.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
input.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
input.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
input.o: command.h ${BASHINCDIR}/stdc.h general.h input.h error.h externs.h
|
input.o: command.h ${BASHINCDIR}/stdc.h general.h xmalloc.h input.h error.h externs.h
|
||||||
list.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
list.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
list.o: general.h bashtypes.h variables.h array.h hashlib.h
|
list.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
list.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
list.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
list.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
list.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
locale.o: config.h bashtypes.h bashintl.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
locale.o: config.h bashtypes.h bashintl.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
locale.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
locale.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
locale.o: general.h bashtypes.h variables.h array.h hashlib.h
|
locale.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
locale.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
locale.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
locale.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
locale.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
|
locale.o: ${BASHINCDIR}/chartypes.h
|
||||||
mailcheck.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
mailcheck.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
|
mailcheck.o: ${BASHINCDIR}/posixtime.h
|
||||||
mailcheck.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
mailcheck.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
mailcheck.o: general.h bashtypes.h variables.h array.h hashlib.h
|
mailcheck.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
mailcheck.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
mailcheck.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
mailcheck.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
mailcheck.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
mailcheck.o: execute_cmd.h mailcheck.h
|
mailcheck.o: execute_cmd.h mailcheck.h
|
||||||
make_cmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h bashansi.h
|
make_cmd.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h bashansi.h
|
||||||
make_cmd.o: command.h ${BASHINCDIR}/stdc.h general.h error.h flags.h make_cmd.h
|
make_cmd.o: command.h ${BASHINCDIR}/stdc.h general.h xmalloc.h error.h flags.h make_cmd.h
|
||||||
make_cmd.o: variables.h array.h hashlib.h subst.h input.h externs.h
|
make_cmd.o: variables.h arrayfunc.h conftypes.h array.h hashlib.h subst.h input.h externs.h
|
||||||
make_cmd.o: jobs.h quit.h siglist.h syntax.h
|
make_cmd.o: jobs.h quit.h siglist.h syntax.h
|
||||||
y.tab.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/memalloc.h
|
y.tab.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/memalloc.h
|
||||||
y.tab.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
y.tab.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
y.tab.o: general.h bashtypes.h variables.h array.h hashlib.h
|
y.tab.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
y.tab.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
y.tab.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
y.tab.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
y.tab.o: make_cmd.h subst.h sig.h pathnames.h externs.h test.h
|
||||||
y.tab.o: trap.h flags.h parser.h input.h mailcheck.h $(DEFSRC)/common.h
|
y.tab.o: trap.h flags.h parser.h input.h mailcheck.h $(DEFSRC)/common.h
|
||||||
y.tab.o: $(DEFDIR)/builtext.h bashline.h bashhist.h jobs.h siglist.h alias.h
|
y.tab.o: $(DEFDIR)/builtext.h bashline.h bashhist.h jobs.h siglist.h alias.h
|
||||||
pathexp.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
pathexp.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
pathexp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
pathexp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
pathexp.o: general.h bashtypes.h variables.h array.h hashlib.h
|
pathexp.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
pathexp.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
pathexp.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
pathexp.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
pathexp.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
pathexp.o: pathexp.h flags.h
|
pathexp.o: pathexp.h flags.h
|
||||||
pathexp.o: $(GLOB_LIBSRC)/glob.h $(GLOB_LIBSRC)/fnmatch.h
|
pathexp.o: $(GLOB_LIBSRC)/glob.h $(GLOB_LIBSRC)/strmatch.h
|
||||||
print_cmd.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
print_cmd.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
print_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
print_cmd.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
print_cmd.o: general.h bashtypes.h variables.h array.h hashlib.h
|
print_cmd.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
print_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
print_cmd.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
print_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
print_cmd.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
print_cmd.o: ${GRAM_H} $(DEFSRC)/common.h
|
print_cmd.o: ${GRAM_H} $(DEFSRC)/common.h
|
||||||
redir.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/filecntl.h
|
redir.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/filecntl.h
|
||||||
redir.o: ${BASHINCDIR}/memalloc.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
redir.o: ${BASHINCDIR}/memalloc.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
redir.o: general.h variables.h array.h hashlib.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h
|
redir.o: general.h xmalloc.h variables.h arrayfunc.h conftypes.h array.h hashlib.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h
|
||||||
redir.o: dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h externs.h
|
redir.o: dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
redir.o: flags.h execute_cmd.h redir.h input.h
|
redir.o: flags.h execute_cmd.h redir.h input.h
|
||||||
shell.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/filecntl.h
|
shell.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/filecntl.h
|
||||||
shell.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
shell.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
shell.o: general.h bashtypes.h variables.h array.h hashlib.h
|
shell.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
shell.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
shell.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
shell.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
shell.o: make_cmd.h subst.h sig.h pathnames.h externs.h version.h
|
||||||
shell.o: flags.h trap.h mailcheck.h builtins.h $(DEFSRC)/common.h
|
shell.o: flags.h trap.h mailcheck.h builtins.h $(DEFSRC)/common.h
|
||||||
shell.o: jobs.h siglist.h input.h execute_cmd.h findcmd.h bashhist.h
|
shell.o: jobs.h siglist.h input.h execute_cmd.h findcmd.h bashhist.h
|
||||||
shell.o: ${GLOB_LIBSRC}/fnmatch.h
|
shell.o: ${GLOB_LIBSRC}/strmatch.h ${BASHINCDIR}/posixtime.h
|
||||||
sig.o: config.h bashtypes.h
|
sig.o: config.h bashtypes.h
|
||||||
sig.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
sig.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
sig.o: general.h bashtypes.h variables.h array.h hashlib.h
|
sig.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
sig.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
sig.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
sig.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
sig.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
sig.o: jobs.h siglist.h trap.h $(DEFSRC)/common.h bashline.h bashhist.h
|
sig.o: jobs.h siglist.h trap.h $(DEFSRC)/common.h bashline.h bashhist.h
|
||||||
siglist.o: config.h bashtypes.h siglist.h trap.h
|
siglist.o: config.h bashtypes.h siglist.h trap.h
|
||||||
stringlib.o: bashtypes.h
|
stringlib.o: bashtypes.h ${BASHINCDIR}/chartypes.h
|
||||||
stringlib.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
stringlib.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
stringlib.o: general.h bashtypes.h variables.h array.h hashlib.h
|
stringlib.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
stringlib.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
stringlib.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
stringlib.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
stringlib.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
|
stringlib.o: ${GLOB_LIBSRC}/glob.h ${GLOB_LIBSRC}/strmatch.h
|
||||||
subst.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/posixstat.h
|
subst.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/posixstat.h
|
||||||
subst.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
subst.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
subst.o: general.h bashtypes.h variables.h array.h hashlib.h
|
subst.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
subst.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
subst.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
subst.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
subst.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
subst.o: flags.h jobs.h siglist.h execute_cmd.h ${BASHINCDIR}/filecntl.h trap.h pathexp.h
|
subst.o: flags.h jobs.h siglist.h execute_cmd.h ${BASHINCDIR}/filecntl.h trap.h pathexp.h
|
||||||
subst.o: mailcheck.h input.h $(DEFSRC)/getopt.h $(DEFSRC)/common.h
|
subst.o: mailcheck.h input.h $(DEFSRC)/getopt.h $(DEFSRC)/common.h
|
||||||
subst.o: bashline.h bashhist.h ${GLOB_LIBSRC}/fnmatch.h
|
subst.o: bashline.h bashhist.h ${GLOB_LIBSRC}/strmatch.h
|
||||||
|
subst.o: ${BASHINCDIR}/chartypes.h
|
||||||
test.o: bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h
|
test.o: bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h
|
||||||
test.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
test.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
test.o: general.h bashtypes.h variables.h array.h hashlib.h
|
test.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
test.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
test.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
test.o: make_cmd.h subst.h sig.h pathnames.h externs.h test.h
|
test.o: make_cmd.h subst.h sig.h pathnames.h externs.h test.h
|
||||||
test.o: ${DEFSRC}/common.h
|
test.o: ${DEFSRC}/common.h
|
||||||
trap.o: config.h bashtypes.h trap.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
trap.o: config.h bashtypes.h trap.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
trap.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
trap.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
trap.o: general.h bashtypes.h variables.h array.h hashlib.h
|
trap.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
trap.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
trap.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
trap.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
trap.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
trap.o: signames.h $(DEFSRC)/common.h
|
trap.o: signames.h $(DEFSRC)/common.h
|
||||||
unwind_prot.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h command.h ${BASHINCDIR}/stdc.h
|
unwind_prot.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h command.h ${BASHINCDIR}/stdc.h
|
||||||
unwind_prot.o: general.h unwind_prot.h quit.h sig.h
|
unwind_prot.o: general.h xmalloc.h unwind_prot.h quit.h sig.h
|
||||||
variables.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
variables.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
variables.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
variables.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
variables.o: general.h bashtypes.h variables.h array.h hashlib.h
|
variables.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
variables.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
variables.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
variables.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
variables.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
variables.o: flags.h execute_cmd.h mailcheck.h input.h $(DEFSRC)/common.h
|
variables.o: flags.h execute_cmd.h mailcheck.h input.h $(DEFSRC)/common.h
|
||||||
variables.o: findcmd.h bashhist.h
|
variables.o: findcmd.h bashhist.h hashcmd.h pathexp.h
|
||||||
variables.o: pcomplete.h
|
variables.o: pcomplete.h version.h ${BASHINCDIR}/chartypes.h
|
||||||
version.o: version.h .build
|
variables.o: ${BASHINCDIR}/posixtime.h
|
||||||
|
version.o: version.h conftypes.h patchlevel.h
|
||||||
xmalloc.o: config.h bashtypes.h ${BASHINCDIR}/ansi_stdlib.h error.h
|
xmalloc.o: config.h bashtypes.h ${BASHINCDIR}/ansi_stdlib.h error.h
|
||||||
|
|
||||||
# job control
|
# job control
|
||||||
|
|
@ -883,69 +925,77 @@ xmalloc.o: config.h bashtypes.h ${BASHINCDIR}/ansi_stdlib.h error.h
|
||||||
jobs.o: config.h bashtypes.h trap.h ${BASHINCDIR}/filecntl.h input.h ${BASHINCDIR}/shtty.h
|
jobs.o: config.h bashtypes.h trap.h ${BASHINCDIR}/filecntl.h input.h ${BASHINCDIR}/shtty.h
|
||||||
jobs.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
jobs.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
jobs.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
jobs.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
jobs.o: general.h bashtypes.h variables.h array.h hashlib.h
|
jobs.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
jobs.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
jobs.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
jobs.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
jobs.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
jobs.o: jobs.h flags.h $(DEFSRC)/common.h $(DEFDIR)/builtext.h
|
jobs.o: jobs.h flags.h $(DEFSRC)/common.h $(DEFDIR)/builtext.h
|
||||||
jobs.o: ${BASHINCDIR}/posixwait.h ${BASHINCDIR}/unionwait.h
|
jobs.o: ${BASHINCDIR}/posixwait.h ${BASHINCDIR}/unionwait.h
|
||||||
|
jobs.o: ${BASHINCDIR}/posixtime.h
|
||||||
nojobs.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h bashjmp.h ${BASHINCDIR}/posixjmp.h
|
nojobs.o: config.h bashtypes.h ${BASHINCDIR}/filecntl.h bashjmp.h ${BASHINCDIR}/posixjmp.h
|
||||||
nojobs.o: command.h ${BASHINCDIR}/stdc.h general.h jobs.h quit.h siglist.h externs.h
|
nojobs.o: command.h ${BASHINCDIR}/stdc.h general.h xmalloc.h jobs.h quit.h siglist.h externs.h
|
||||||
nojobs.o: sig.h error.h ${BASHINCDIR}/shtty.h input.h
|
nojobs.o: sig.h error.h ${BASHINCDIR}/shtty.h input.h
|
||||||
|
|
||||||
# shell features that may be compiled in
|
# shell features that may be compiled in
|
||||||
|
|
||||||
array.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
array.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
array.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
array.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
array.o: general.h bashtypes.h variables.h array.h hashlib.h
|
array.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
array.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
array.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
array.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
array.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
array.o: $(DEFSRC)/common.h
|
array.o: $(DEFSRC)/common.h
|
||||||
|
arrayfunc.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
|
arrayfunc.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
|
arrayfunc.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
|
arrayfunc.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
|
arrayfunc.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
|
arrayfunc.o: $(DEFSRC)/common.h
|
||||||
braces.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
braces.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
braces.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
braces.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
braces.o: general.h bashtypes.h variables.h array.h hashlib.h
|
braces.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
braces.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
braces.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
braces.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
braces.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
alias.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h command.h ${BASHINCDIR}/stdc.h
|
alias.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h command.h ${BASHINCDIR}/stdc.h
|
||||||
alias.o: general.h bashtypes.h externs.h alias.h
|
alias.o: general.h xmalloc.h bashtypes.h externs.h alias.h
|
||||||
alias.o: pcomplete.h
|
alias.o: pcomplete.h
|
||||||
|
alias.o: ${BASHINCDIR}/chartypes.h
|
||||||
|
|
||||||
pcomplib.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h
|
pcomplib.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h
|
||||||
pcomplib.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h
|
pcomplib.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h
|
||||||
pcomplib.o: bashjmp.h command.h general.h error.h variables.h quit.h
|
pcomplib.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
pcomplib.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h
|
pcomplib.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h
|
||||||
pcomplib.o: externs.h ${BASHINCDIR}/maxpath.h
|
pcomplib.o: externs.h ${BASHINCDIR}/maxpath.h
|
||||||
|
|
||||||
pcomplete.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h
|
pcomplete.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h
|
||||||
pcomplete.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h
|
pcomplete.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h
|
||||||
pcomplete.o: bashjmp.h command.h general.h error.h variables.h quit.h
|
pcomplete.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
pcomplete.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h
|
pcomplete.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h
|
||||||
pcomplete.o: externs.h ${BASHINCDIR}/maxpath.h
|
pcomplete.o: externs.h ${BASHINCDIR}/maxpath.h execute_cmd.h
|
||||||
|
|
||||||
# library support files
|
# library support files
|
||||||
|
|
||||||
bashhist.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/posixstat.h
|
bashhist.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/posixstat.h
|
||||||
bashhist.o: ${BASHINCDIR}/filecntl.h
|
bashhist.o: ${BASHINCDIR}/filecntl.h
|
||||||
bashhist.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
bashhist.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
bashhist.o: general.h bashtypes.h variables.h array.h hashlib.h
|
bashhist.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
bashhist.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
bashhist.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
bashhist.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
bashhist.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
bashhist.o: flags.h input.h parser.h pathexp.h $(DEFSRC)/common.h bashline.h
|
bashhist.o: flags.h input.h parser.h pathexp.h $(DEFSRC)/common.h bashline.h
|
||||||
bashhist.o: $(GLOB_LIBSRC)/fnmatch.h
|
bashhist.o: $(GLOB_LIBSRC)/strmatch.h
|
||||||
bashline.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
bashline.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
bashline.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
bashline.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
bashline.o: general.h bashtypes.h variables.h array.h hashlib.h
|
bashline.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
bashline.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
bashline.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
bashline.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
bashline.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
bashline.o: builtins.h bashhist.h bashline.h execute_cmd.h findcmd.h pathexp.h
|
bashline.o: builtins.h bashhist.h bashline.h execute_cmd.h findcmd.h pathexp.h
|
||||||
bashline.o: $(DEFSRC)/common.h $(GLOB_LIBSRC)/glob.h alias.h
|
bashline.o: $(DEFSRC)/common.h $(GLOB_LIBSRC)/glob.h alias.h
|
||||||
bashline.o: pcomplete.h
|
bashline.o: pcomplete.h ${BASHINCDIR}/chartypes.h
|
||||||
bracecomp.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
bracecomp.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
bracecomp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
bracecomp.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
|
||||||
bracecomp.o: general.h bashtypes.h variables.h array.h hashlib.h
|
bracecomp.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
|
||||||
bracecomp.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
bracecomp.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
bracecomp.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
bracecomp.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
bracecomp.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h hashlib.h builtins.h general.h
|
bracecomp.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h hashlib.h builtins.h general.h xmalloc.h
|
||||||
bracecomp.o: quit.h alias.h config.h variables.h
|
bracecomp.o: quit.h alias.h config.h variables.h arrayfunc.h conftypes.h
|
||||||
bracecomp.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
bracecomp.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
|
|
||||||
# library dependencies
|
# library dependencies
|
||||||
|
|
@ -977,186 +1027,192 @@ variables.o: $(TILDE_LIBSRC)/tilde.h
|
||||||
|
|
||||||
# builtin c sources
|
# builtin c sources
|
||||||
builtins/bashgetopt.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
builtins/bashgetopt.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
builtins/bashgetopt.o: shell.h syntax.h config.h bashjmp.h command.h general.h error.h
|
builtins/bashgetopt.o: shell.h syntax.h config.h bashjmp.h command.h general.h xmalloc.h error.h
|
||||||
builtins/bashgetopt.o: variables.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
builtins/bashgetopt.o: variables.h arrayfunc.h conftypes.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
builtins/bashgetopt.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
builtins/bashgetopt.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
builtins/bashgetopt.o: $(DEFSRC)/common.h
|
builtins/bashgetopt.o: $(DEFSRC)/common.h
|
||||||
|
builtins/bashgetopt.o: ${BASHINCDIR}/chartypes.h
|
||||||
builtins/common.o: bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
builtins/common.o: bashtypes.h ${BASHINCDIR}/posixstat.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
builtins/common.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h
|
builtins/common.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h
|
||||||
builtins/common.o: ${BASHINCDIR}/memalloc.h variables.h input.h siglist.h
|
builtins/common.o: ${BASHINCDIR}/memalloc.h variables.h arrayfunc.h conftypes.h input.h siglist.h
|
||||||
builtins/common.o: quit.h unwind_prot.h ${BASHINCDIR}/maxpath.h jobs.h builtins.h
|
builtins/common.o: quit.h unwind_prot.h ${BASHINCDIR}/maxpath.h jobs.h builtins.h
|
||||||
builtins/common.o: dispose_cmd.h make_cmd.h subst.h externs.h bashhist.h
|
builtins/common.o: dispose_cmd.h make_cmd.h subst.h externs.h bashhist.h
|
||||||
builtins/common.o: execute_cmd.h ${BASHINCDIR}/stdc.h general.h error.h pathnames.h
|
builtins/common.o: execute_cmd.h ${BASHINCDIR}/stdc.h general.h xmalloc.h error.h pathnames.h
|
||||||
builtins/common.o: ${DEFDIR}/builtext.h
|
builtins/common.o: ${DEFDIR}/builtext.h
|
||||||
|
builtins/common.o: ${BASHINCDIR}/chartypes.h
|
||||||
builtins/evalfile.o: bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
builtins/evalfile.o: bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
builtins/evalfile.o: shell.h syntax.h config.h bashjmp.h command.h general.h error.h
|
builtins/evalfile.o: shell.h syntax.h config.h bashjmp.h command.h general.h xmalloc.h error.h
|
||||||
builtins/evalfile.o: variables.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
builtins/evalfile.o: variables.h arrayfunc.h conftypes.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
builtins/evalfile.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
builtins/evalfile.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
builtins/evalfile.o: jobs.h builtins.h flags.h input.h execute_cmd.h
|
builtins/evalfile.o: jobs.h builtins.h flags.h input.h execute_cmd.h
|
||||||
builtins/evalfile.o: bashhist.h $(DEFSRC)/common.h
|
builtins/evalfile.o: bashhist.h $(DEFSRC)/common.h
|
||||||
builtins/evalstring.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
builtins/evalstring.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
builtins/evalstring.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h siglist.h
|
builtins/evalstring.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h siglist.h
|
||||||
builtins/evalstring.o: ${BASHINCDIR}/memalloc.h variables.h input.h
|
builtins/evalstring.o: ${BASHINCDIR}/memalloc.h variables.h arrayfunc.h conftypes.h input.h
|
||||||
builtins/evalstring.o: quit.h unwind_prot.h ${BASHINCDIR}/maxpath.h jobs.h builtins.h
|
builtins/evalstring.o: quit.h unwind_prot.h ${BASHINCDIR}/maxpath.h jobs.h builtins.h
|
||||||
builtins/evalstring.o: dispose_cmd.h make_cmd.h subst.h externs.h
|
builtins/evalstring.o: dispose_cmd.h make_cmd.h subst.h externs.h
|
||||||
builtins/evalstring.o: jobs.h builtins.h flags.h input.h execute_cmd.h
|
builtins/evalstring.o: jobs.h builtins.h flags.h input.h execute_cmd.h
|
||||||
builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h
|
builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h
|
||||||
builtins/getopt.o: config.h ${BASHINCDIR}/memalloc.h
|
builtins/getopt.o: config.h ${BASHINCDIR}/memalloc.h
|
||||||
builtins/getopt.o: shell.h syntax.h bashjmp.h command.h general.h error.h
|
builtins/getopt.o: shell.h syntax.h bashjmp.h command.h general.h xmalloc.h error.h
|
||||||
builtins/getopt.o: variables.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
builtins/getopt.o: variables.h arrayfunc.h conftypes.h quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
|
||||||
builtins/getopt.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
builtins/getopt.o: make_cmd.h subst.h sig.h pathnames.h externs.h
|
||||||
builtins/getopt.o: $(DEFSRC)/getopt.h
|
builtins/getopt.o: $(DEFSRC)/getopt.h
|
||||||
builtins/mkbuiltins.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h
|
builtins/mkbuiltins.o: config.h bashtypes.h ${BASHINCDIR}/posixstat.h ${BASHINCDIR}/filecntl.h
|
||||||
builtins/mkbuiltins.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
builtins/mkbuiltins.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
|
|
||||||
# builtin def files
|
# builtin def files
|
||||||
builtins/alias.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/alias.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/alias.o: quit.h $(DEFSRC)/common.h
|
builtins/alias.o: quit.h $(DEFSRC)/common.h
|
||||||
builtins/alias.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h ${BASHINCDIR}/stdc.h unwind_prot.h
|
builtins/alias.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h command.h ${BASHINCDIR}/stdc.h unwind_prot.h
|
||||||
builtins/alias.o: dispose_cmd.h make_cmd.h subst.h externs.h variables.h
|
builtins/alias.o: dispose_cmd.h make_cmd.h subst.h externs.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/bind.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/bind.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/bind.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/bind.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/bind.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/bind.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/bind.o: $(DEFSRC)/bashgetopt.h
|
builtins/bind.o: $(DEFSRC)/bashgetopt.h
|
||||||
builtins/break.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/break.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/break.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/break.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/break.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/break.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/builtin.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/builtin.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/builtin.o: quit.h $(DEFSRC)/common.h
|
builtins/builtin.o: quit.h $(DEFSRC)/common.h
|
||||||
builtins/builtin.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/builtin.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/builtin.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/builtin.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/cd.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/cd.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/cd.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/cd.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/cd.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/cd.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/cd.o: $(DEFSRC)/common.h quit.h
|
builtins/cd.o: $(DEFSRC)/common.h quit.h
|
||||||
builtins/command.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/command.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/command.o: quit.h $(DEFSRC)/bashgetopt.h
|
builtins/command.o: quit.h $(DEFSRC)/bashgetopt.h
|
||||||
builtins/command.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/command.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/command.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/command.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/declare.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/declare.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/declare.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/declare.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/declare.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/declare.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/echo.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/echo.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/echo.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/echo.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/echo.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/echo.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/enable.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/enable.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/enable.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/enable.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/enable.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/enable.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/enable.o: pcomplete.h
|
builtins/enable.o: pcomplete.h
|
||||||
builtins/eval.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/eval.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/eval.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/eval.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/eval.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/eval.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/exec.o: bashtypes.h
|
builtins/exec.o: bashtypes.h
|
||||||
builtins/exec.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/exec.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/exec.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/exec.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/exec.o: dispose_cmd.h make_cmd.h subst.h externs.h execute_cmd.h
|
builtins/exec.o: dispose_cmd.h make_cmd.h subst.h externs.h execute_cmd.h
|
||||||
builtins/exec.o: findcmd.h flags.h quit.h $(DEFSRC)/common.h ${BASHINCDIR}/stdc.h
|
builtins/exec.o: findcmd.h flags.h quit.h $(DEFSRC)/common.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/exit.o: bashtypes.h
|
builtins/exit.o: bashtypes.h
|
||||||
builtins/exit.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/exit.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/exit.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/exit.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/exit.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/exit.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/fc.o: bashtypes.h ${BASHINCDIR}/posixstat.h
|
builtins/fc.o: bashtypes.h ${BASHINCDIR}/posixstat.h
|
||||||
builtins/fc.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h builtins.h command.h ${BASHINCDIR}/stdc.h
|
builtins/fc.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h builtins.h command.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/fc.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/fc.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/fc.o: flags.h unwind_prot.h variables.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h
|
builtins/fc.o: flags.h unwind_prot.h variables.h arrayfunc.h conftypes.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h
|
||||||
builtins/fc.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h quit.h
|
builtins/fc.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h quit.h
|
||||||
builtins/fc.o: $(DEFSRC)/bashgetopt.h bashhist.h
|
builtins/fc.o: $(DEFSRC)/bashgetopt.h bashhist.h
|
||||||
|
builtins/fc.o: ${BASHINCDIR}/chartypes.h
|
||||||
builtins/fg_bg.o: bashtypes.h
|
builtins/fg_bg.o: bashtypes.h
|
||||||
builtins/fg_bg.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/fg_bg.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/fg_bg.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/fg_bg.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/fg_bg.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/fg_bg.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/getopts.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/getopts.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/getopts.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/getopts.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/getopts.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/getopts.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/hash.o: bashtypes.h
|
builtins/hash.o: bashtypes.h
|
||||||
builtins/hash.o: builtins.h command.h findcmd.h ${BASHINCDIR}/stdc.h $(DEFSRC)/common.h
|
builtins/hash.o: builtins.h command.h findcmd.h ${BASHINCDIR}/stdc.h $(DEFSRC)/common.h
|
||||||
builtins/hash.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/hash.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/hash.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/hash.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/help.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/help.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/help.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/help.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/help.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/help.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/help.o: $(GLOB_LIBSRC)/glob.h
|
builtins/help.o: $(GLOB_LIBSRC)/glob.h version.h
|
||||||
builtins/history.o: bashtypes.h
|
builtins/history.o: bashtypes.h
|
||||||
builtins/history.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/history.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/history.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/history.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/history.o: ${BASHINCDIR}/filecntl.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h
|
builtins/history.o: ${BASHINCDIR}/filecntl.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h
|
||||||
builtins/history.o: bashhist.h variables.h
|
builtins/history.o: bashhist.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/inlib.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/inlib.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/inlib.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h quit.h
|
builtins/inlib.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
|
||||||
builtins/inlib.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/inlib.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/jobs.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/jobs.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/jobs.o: quit.h $(DEFSRC)/bashgetopt.h
|
builtins/jobs.o: quit.h $(DEFSRC)/bashgetopt.h
|
||||||
builtins/jobs.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/jobs.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/jobs.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/jobs.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/kill.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/kill.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/kill.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/kill.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/kill.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h trap.h unwind_prot.h variables.h
|
builtins/kill.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h trap.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/let.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/let.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/let.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/let.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/let.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/let.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/printf.o: config.h ${BASHINCDIR}/memalloc.h bashjmp.h command.h error.h
|
builtins/printf.o: config.h ${BASHINCDIR}/memalloc.h bashjmp.h command.h error.h
|
||||||
builtins/printf.o: general.h quit.h dispose_cmd.h make_cmd.h subst.h
|
builtins/printf.o: general.h xmalloc.h quit.h dispose_cmd.h make_cmd.h subst.h
|
||||||
builtins/printf.o: externs.h sig.h pathnames.h shell.h syntax.h unwind_prot.h
|
builtins/printf.o: externs.h sig.h pathnames.h shell.h syntax.h unwind_prot.h
|
||||||
builtins/printf.o: variables.h ${BASHINCDIR}/stdc.h $(DEFSRC)/bashgetopt.h
|
builtins/printf.o: variables.h arrayfunc.h conftypes.h ${BASHINCDIR}/stdc.h $(DEFSRC)/bashgetopt.h
|
||||||
builtins/pushd.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/printf.o: ${BASHINCDIR}/chartypes.h
|
||||||
|
builtins/pushd.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/pushd.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/pushd.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/pushd.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/pushd.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/pushd.o: $(DEFSRC)/common.h
|
builtins/pushd.o: $(DEFSRC)/common.h
|
||||||
builtins/read.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/read.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/read.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/read.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/read.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/read.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/return.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/return.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/return.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/return.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/return.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/return.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/set.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/set.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/set.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/set.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/set.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h flags.h
|
builtins/set.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h flags.h
|
||||||
builtins/setattr.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/setattr.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/setattr.o: quit.h $(DEFSRC)/common.h $(DEFSRC)/bashgetopt.h
|
builtins/setattr.o: quit.h $(DEFSRC)/common.h $(DEFSRC)/bashgetopt.h
|
||||||
builtins/setattr.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/setattr.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/setattr.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/setattr.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/shift.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/shift.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/shift.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/shift.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/shift.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/shift.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/shift.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/shift.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/shopt.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h
|
builtins/shopt.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h
|
||||||
builtins/shopt.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h
|
builtins/shopt.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h
|
||||||
builtins/shopt.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h unwind_prot.h variables.h ${BASHINCDIR}/maxpath.h
|
builtins/shopt.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h unwind_prot.h variables.h arrayfunc.h conftypes.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/shopt.o: $(DEFSRC)/common.h $(DEFSRC)/bashgetopt.h
|
builtins/shopt.o: $(DEFSRC)/common.h $(DEFSRC)/bashgetopt.h
|
||||||
builtins/source.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/source.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/source.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/source.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/source.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/source.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/source.o: findcmd.h
|
builtins/source.o: findcmd.h
|
||||||
builtins/suspend.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/suspend.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/suspend.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/suspend.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/suspend.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/suspend.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/test.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/test.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/test.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/test.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/test.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/test.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/test.o: test.h
|
builtins/test.o: test.h
|
||||||
builtins/times.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/times.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/times.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/times.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/times.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/times.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/trap.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/trap.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/trap.o: quit.h $(DEFSRC)/common.h
|
builtins/trap.o: quit.h $(DEFSRC)/common.h
|
||||||
builtins/trap.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/trap.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/trap.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/trap.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/type.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/type.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/type.o: quit.h $(DEFSRC)/common.h findcmd.h
|
builtins/type.o: quit.h $(DEFSRC)/common.h findcmd.h
|
||||||
builtins/type.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/type.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/type.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/type.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/ulimit.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/ulimit.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/ulimit.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/ulimit.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/ulimit.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/ulimit.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/umask.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/umask.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/umask.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/umask.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/umask.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/umask.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/wait.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h ${BASHINCDIR}/maxpath.h
|
builtins/umask.o: ${BASHINCDIR}/chartypes.h
|
||||||
|
builtins/wait.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
|
||||||
builtins/wait.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
builtins/wait.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
|
||||||
builtins/wait.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h
|
builtins/wait.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
|
builtins/wait.o: ${BASHINCDIR}/chartypes.h
|
||||||
|
|
||||||
builtins/complete.o: config.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h
|
builtins/complete.o: config.h shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h
|
||||||
builtins/complete.o: unwind_prot.h variables.h
|
builtins/complete.o: unwind_prot.h variables.h arrayfunc.h conftypes.h
|
||||||
builtins/complete.o: bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
builtins/complete.o: bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
|
||||||
builtins/complete.o: builtins.h
|
builtins/complete.o: builtins.h
|
||||||
builtins/complete.o: pcomplete.h
|
builtins/complete.o: pcomplete.h
|
||||||
|
|
|
||||||
95
NEWS
95
NEWS
|
|
@ -1,3 +1,96 @@
|
||||||
|
This is a terse description of the new features added to bash-2.05a since
|
||||||
|
the release of bash-2.05. As always, the manual page (doc/bash.1) is
|
||||||
|
the place to look for complete descriptions.
|
||||||
|
|
||||||
|
1. New Features in Bash
|
||||||
|
|
||||||
|
a. Added support for DESTDIR installation root prefix, so you can do a
|
||||||
|
`make install DESTDIR=bash-root' and do easier binary packaging.
|
||||||
|
|
||||||
|
b. Added support for builtin printf "'" flag character as per latest POSIX
|
||||||
|
drafts.
|
||||||
|
|
||||||
|
c. Support for POSIX.2 printf(1) length specifiers `j', `t', and `z' (from
|
||||||
|
ISO C99).
|
||||||
|
|
||||||
|
d. New autoconf macro, RL_LIB_READLINE_VERSION, for use by other applications
|
||||||
|
(bash doesn't use very much of what it returns).
|
||||||
|
|
||||||
|
e. `set [-+]o nolog' is recognized as required by the latest POSIX drafts,
|
||||||
|
but ignored.
|
||||||
|
|
||||||
|
f. New read-only `shopt' option: login_shell. Set to non-zero value if the
|
||||||
|
shell is a login shell.
|
||||||
|
|
||||||
|
g. New `\A' prompt string escape sequence; expands to time in 24 HH:MM format.
|
||||||
|
|
||||||
|
h. New `-A group/-g' option to complete and compgen; does group name
|
||||||
|
completion.
|
||||||
|
|
||||||
|
i. New `-t' option to `hash' to list hash values for each filename argument.
|
||||||
|
|
||||||
|
j. New [-+]O invocation option to set and unset `shopt' options at startup.
|
||||||
|
|
||||||
|
k. configure's `--with-installed-readline' option now takes an optional
|
||||||
|
`=PATH' suffix to set the root of the tree where readline is installed
|
||||||
|
to PATH.
|
||||||
|
|
||||||
|
l. The ksh-like `ERR' trap has been added. The `ERR' trap will be run
|
||||||
|
whenever the shell would have exited if the -e option were enabled.
|
||||||
|
It is not inherited by shell functions.
|
||||||
|
|
||||||
|
m. `readonly', `export', and `declare' now print variables which have been
|
||||||
|
given attributes but not set by assigning a value as just a command and
|
||||||
|
a variable name (like `export foo') when listing, as the latest POSIX
|
||||||
|
drafts require.
|
||||||
|
|
||||||
|
n. `bashbug' now requires that the subject be changed from the default.
|
||||||
|
|
||||||
|
o. configure has a new `--enable-largefile' option, like other GNU utilities.
|
||||||
|
|
||||||
|
p. `for' loops now allow empty word lists after `in', like the latest POSIX
|
||||||
|
drafts require.
|
||||||
|
|
||||||
|
q. The builtin `ulimit' now takes two new non-numeric arguments: `hard',
|
||||||
|
meaning the current hard limit, and `soft', meaning the current soft
|
||||||
|
limit, in addition to `unlimited'
|
||||||
|
|
||||||
|
r. `ulimit' now prints the option letter associated with a particular
|
||||||
|
resource when printing more than one limit.
|
||||||
|
|
||||||
|
s. `ulimit' prints `hard' or `soft' when a value is not `unlimited' but is
|
||||||
|
one of RLIM_SAVED_MAX or RLIM_SAVED_CUR, respectively.
|
||||||
|
|
||||||
|
t. The `printf' builtin now handles the %a and %A conversions if they're
|
||||||
|
implemented by printf(3).
|
||||||
|
|
||||||
|
u. The `printf' builtin now handles the %F conversion (just about like %f).
|
||||||
|
|
||||||
|
v. The `printf' builtin now handles the %n conversion like printf(3). The
|
||||||
|
corresponding argument is the name of a shell variable to which the
|
||||||
|
value is assigned.
|
||||||
|
|
||||||
|
2. New Features in Readline
|
||||||
|
|
||||||
|
a. Added extern declaration for rl_get_termcap to readline.h, making it a
|
||||||
|
public function (it was always there, just not in readline.h).
|
||||||
|
|
||||||
|
b. New #defines in readline.h: RL_READLINE_VERSION, currently 0x0402,
|
||||||
|
RL_VERSION_MAJOR, currently 4, and RL_VERSION_MINOR, currently 2.
|
||||||
|
|
||||||
|
c. New readline variable: rl_readline_version, mirrors RL_READLINE_VERSION.
|
||||||
|
|
||||||
|
d. New bindable boolean readline variable: match-hidden-files. Controls
|
||||||
|
completion of files beginning with a `.' (on Unix). Enabled by default.
|
||||||
|
|
||||||
|
e. The history expansion code now allows any character to terminate a
|
||||||
|
`:first-' modifier, like csh.
|
||||||
|
|
||||||
|
f. New bindable variable `history-preserve-point'. If set, the history
|
||||||
|
code attempts to place the user at the same location on each history
|
||||||
|
line retrived with previous-history or next-history.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
This is a terse description of the new features added to bash-2.05 since
|
This is a terse description of the new features added to bash-2.05 since
|
||||||
the release of bash-2.04. As always, the manual page (doc/bash.1) is
|
the release of bash-2.04. As always, the manual page (doc/bash.1) is
|
||||||
the place to look for complete descriptions.
|
the place to look for complete descriptions.
|
||||||
|
|
@ -87,7 +180,7 @@ e. The `help' builtin has a `-s' option to just print a builtin's usage
|
||||||
synopsis.
|
synopsis.
|
||||||
|
|
||||||
f. There are several new arithmetic operators: id++, id-- (variable
|
f. There are several new arithmetic operators: id++, id-- (variable
|
||||||
post-increment/decrement), ++id, --id (variabl pre-increment/decrement),
|
post-increment/decrement), ++id, --id (variable pre-increment/decrement),
|
||||||
expr1 , expr2 (comma operator).
|
expr1 , expr2 (comma operator).
|
||||||
|
|
||||||
g. There is a new ksh-93 style arithmetic for command:
|
g. There is a new ksh-93 style arithmetic for command:
|
||||||
|
|
|
||||||
24
NOTES
24
NOTES
|
|
@ -210,7 +210,7 @@ being built and linked against, but there is only a stub file in the archive.)
|
||||||
with libraries not being built and make reporting errors like
|
with libraries not being built and make reporting errors like
|
||||||
`cr: not found' when library construction is attempted.
|
`cr: not found' when library construction is attempted.
|
||||||
|
|
||||||
11. Building a statically-linked bash on Solaris 2.5.x, 2.6, or 7 is
|
11. Building a statically-linked bash on Solaris 2.5.x, 2.6, 7, or 8 is
|
||||||
complicated.
|
complicated.
|
||||||
|
|
||||||
It's not possible to build a completely statically-linked binary, since
|
It's not possible to build a completely statically-linked binary, since
|
||||||
|
|
@ -252,17 +252,20 @@ being built and linked against, but there is only a stub file in the archive.)
|
||||||
thor(2)$ ldd bash
|
thor(2)$ ldd bash
|
||||||
libdl.so.1 => /etc/lib/libdl.so.1
|
libdl.so.1 => /etc/lib/libdl.so.1
|
||||||
|
|
||||||
On Solaris 7 (and presumably Solaris 8, though I do not run that), the
|
On Solaris 7 (Solaris 8, using the version of gcc on the free software
|
||||||
following recipe appears to work for gcc:
|
CD-ROM), the following recipe appears to work for gcc:
|
||||||
|
|
||||||
configure --enable-static-link
|
configure --enable-static-link
|
||||||
make STATIC_LD='-Wl,-Bstatic' LOCAL_LIBS='Wl,-Bdynamic -Wl,-R/etc/lib -ldl -Wl,-Bstatic'
|
make STATIC_LD='-Wl,-Bstatic' LOCAL_LIBS='-Wl,-Bdynamic -Wl,-R/etc/lib -ldl -Wl,-Bstatic'
|
||||||
|
|
||||||
thor.ins.cwru.edu(2)$ ldd bash
|
thor.ins.cwru.edu(2)$ ldd bash
|
||||||
libdl.so.1 => /etc/lib/libdl.so.1
|
libdl.so.1 => /etc/lib/libdl.so.1
|
||||||
|
|
||||||
Make the analogous changes if you are running Sun's C Compiler.
|
Make the analogous changes if you are running Sun's C Compiler.
|
||||||
|
|
||||||
|
I have received word that adding -L/etc/lib (or the equivalent
|
||||||
|
-Wl,-L/etc/lib) might also be necessary, in addition to the -R/etc/lib.
|
||||||
|
|
||||||
12. Configuring bash to build it in a cross environment. Currently only
|
12. Configuring bash to build it in a cross environment. Currently only
|
||||||
two native versions can be compiled this way, cygwin32 and x86 BeOS.
|
two native versions can be compiled this way, cygwin32 and x86 BeOS.
|
||||||
For BeOS, you would configure it like this:
|
For BeOS, you would configure it like this:
|
||||||
|
|
@ -309,4 +312,17 @@ being built and linked against, but there is only a stub file in the archive.)
|
||||||
with `z' and still allow individual users to change the collation order.
|
with `z' and still allow individual users to change the collation order.
|
||||||
Users may put the above command into their own profiles as well, of course.
|
Users may put the above command into their own profiles as well, of course.
|
||||||
|
|
||||||
|
14. Building on Interix (nee OpenNT), which Microsoft bought from Softway
|
||||||
|
Systems and has seemingly abandoned (thanks to Kevin Moore for this item).
|
||||||
|
|
||||||
|
1. cp cross-build/opennt.cache config.cache
|
||||||
|
|
||||||
|
2. If desired, edit pathnames.h to set the values of SYS_PROFILE and
|
||||||
|
DEFAULT_HOSTS_FILE appropriately.
|
||||||
|
|
||||||
|
3. export CONFIG_SHELL=$INTERIX_ROOT/bin/sh
|
||||||
|
|
||||||
|
4. ./configure --prefix=$INTERIX_ROOT/usr/local (or wherever you
|
||||||
|
want it).
|
||||||
|
|
||||||
|
5. make; make install; enjoy
|
||||||
|
|
|
||||||
7
README
7
README
|
|
@ -1,7 +1,7 @@
|
||||||
Introduction
|
Introduction
|
||||||
============
|
============
|
||||||
|
|
||||||
This is GNU Bash, version 2.05. Bash is the GNU Project's Bourne
|
This is GNU Bash, version 2.05a. Bash is the GNU Project's Bourne
|
||||||
Again SHell, a complete implementation of the POSIX.2 shell spec,
|
Again SHell, a complete implementation of the POSIX.2 shell spec,
|
||||||
but also with interactive command line editing, job control on
|
but also with interactive command line editing, job control on
|
||||||
architectures that support it, csh-like features such as history
|
architectures that support it, csh-like features such as history
|
||||||
|
|
@ -19,8 +19,9 @@ of Bash and the previous widely-distributed version, bash-1.14.
|
||||||
For details, see the file COMPAT. The NEWS file tersely lists
|
For details, see the file COMPAT. The NEWS file tersely lists
|
||||||
features that are new in this release.
|
features that are new in this release.
|
||||||
|
|
||||||
Bash is free software, distributed under the terms of the GNU Public
|
Bash is free software, distributed under the terms of the [GNU]
|
||||||
License, version 2. For more information, see the file COPYING.
|
General Public License, version 2. For more information, see the
|
||||||
|
file COPYING.
|
||||||
|
|
||||||
A number of frequently-asked questions are answered in the file
|
A number of frequently-asked questions are answered in the file
|
||||||
`doc/FAQ'.
|
`doc/FAQ'.
|
||||||
|
|
|
||||||
1435
aclocal.m4
vendored
1435
aclocal.m4
vendored
File diff suppressed because it is too large
Load diff
44
alias.c
44
alias.c
|
|
@ -31,6 +31,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "chartypes.h"
|
||||||
#include "bashansi.h"
|
#include "bashansi.h"
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "general.h"
|
#include "general.h"
|
||||||
|
|
@ -41,7 +42,18 @@
|
||||||
# include "pcomplete.h"
|
# include "pcomplete.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int qsort_alias_compare ();
|
typedef int sh_alias_map_func_t __P((alias_t *));
|
||||||
|
|
||||||
|
static void free_alias_data __P((PTR_T));
|
||||||
|
static alias_t **map_over_aliases __P((sh_alias_map_func_t *));
|
||||||
|
static void sort_aliases __P((alias_t **));
|
||||||
|
static int qsort_alias_compare __P((alias_t **, alias_t **));
|
||||||
|
|
||||||
|
#if defined (READLINE)
|
||||||
|
static int skipquotes __P((char *, int));
|
||||||
|
static int skipws __P((char *, int));
|
||||||
|
static int rd_token __P((char *, int));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Non-zero means expand all words on the line. Otherwise, expand
|
/* Non-zero means expand all words on the line. Otherwise, expand
|
||||||
after first expansion if the expansion ends in a space. */
|
after first expansion if the expansion ends in a space. */
|
||||||
|
|
@ -134,7 +146,7 @@ add_alias (name, value)
|
||||||
/* Delete a single alias structure. */
|
/* Delete a single alias structure. */
|
||||||
static void
|
static void
|
||||||
free_alias_data (data)
|
free_alias_data (data)
|
||||||
char *data;
|
PTR_T data;
|
||||||
{
|
{
|
||||||
register alias_t *a;
|
register alias_t *a;
|
||||||
|
|
||||||
|
|
@ -189,7 +201,7 @@ delete_all_aliases ()
|
||||||
If FUNCTION is NULL, return all aliases. */
|
If FUNCTION is NULL, return all aliases. */
|
||||||
static alias_t **
|
static alias_t **
|
||||||
map_over_aliases (function)
|
map_over_aliases (function)
|
||||||
Function *function;
|
sh_alias_map_func_t *function;
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
register BUCKET_CONTENTS *tlist;
|
register BUCKET_CONTENTS *tlist;
|
||||||
|
|
@ -208,8 +220,11 @@ map_over_aliases (function)
|
||||||
if (!function || (*function) (alias))
|
if (!function || (*function) (alias))
|
||||||
{
|
{
|
||||||
if (list_index + 1 >= list_size)
|
if (list_index + 1 >= list_size)
|
||||||
list = (alias_t **)
|
{
|
||||||
xrealloc ((char *)list, (list_size += 20) * sizeof (alias_t *));
|
list_size += 20;
|
||||||
|
list = (alias_t **)xrealloc (list,
|
||||||
|
list_size * sizeof (alias_t *));
|
||||||
|
}
|
||||||
|
|
||||||
list[list_index++] = alias;
|
list[list_index++] = alias;
|
||||||
list[list_index] = (alias_t *)NULL;
|
list[list_index] = (alias_t *)NULL;
|
||||||
|
|
@ -224,7 +239,7 @@ static void
|
||||||
sort_aliases (array)
|
sort_aliases (array)
|
||||||
alias_t **array;
|
alias_t **array;
|
||||||
{
|
{
|
||||||
qsort (array, array_len ((char **)array), sizeof (alias_t *), qsort_alias_compare);
|
qsort (array, array_len ((char **)array), sizeof (alias_t *), (QSFUNC *)qsort_alias_compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
@ -248,7 +263,7 @@ all_aliases ()
|
||||||
if (!aliases)
|
if (!aliases)
|
||||||
return ((alias_t **)NULL);
|
return ((alias_t **)NULL);
|
||||||
|
|
||||||
list = map_over_aliases ((Function *)NULL);
|
list = map_over_aliases ((sh_alias_map_func_t *)NULL);
|
||||||
if (list)
|
if (list)
|
||||||
sort_aliases (list);
|
sort_aliases (list);
|
||||||
return (list);
|
return (list);
|
||||||
|
|
@ -324,12 +339,13 @@ skipws (string, start)
|
||||||
char *string;
|
char *string;
|
||||||
int start;
|
int start;
|
||||||
{
|
{
|
||||||
register int i = 0;
|
register int i;
|
||||||
int pass_next, backslash_quoted_word, peekc;
|
int pass_next, backslash_quoted_word;
|
||||||
|
unsigned char peekc;
|
||||||
|
|
||||||
/* skip quoted strings, in ' or ", and words in which a character is quoted
|
/* skip quoted strings, in ' or ", and words in which a character is quoted
|
||||||
with a `\'. */
|
with a `\'. */
|
||||||
backslash_quoted_word = pass_next = 0;
|
i = backslash_quoted_word = pass_next = 0;
|
||||||
|
|
||||||
/* Skip leading whitespace (or separator characters), and quoted words.
|
/* Skip leading whitespace (or separator characters), and quoted words.
|
||||||
But save it in the output. */
|
But save it in the output. */
|
||||||
|
|
@ -351,7 +367,7 @@ skipws (string, start)
|
||||||
if (string[i] == '\\')
|
if (string[i] == '\\')
|
||||||
{
|
{
|
||||||
peekc = string[i+1];
|
peekc = string[i+1];
|
||||||
if (isletter (peekc))
|
if (ISLETTER (peekc))
|
||||||
backslash_quoted_word++; /* this is a backslash-quoted word */
|
backslash_quoted_word++; /* this is a backslash-quoted word */
|
||||||
else
|
else
|
||||||
pass_next++;
|
pass_next++;
|
||||||
|
|
@ -372,7 +388,7 @@ skipws (string, start)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
peekc = string[i + 1];
|
peekc = string[i + 1];
|
||||||
if (isletter (peekc))
|
if (ISLETTER (peekc))
|
||||||
backslash_quoted_word++;
|
backslash_quoted_word++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -452,8 +468,8 @@ alias_expand (string)
|
||||||
alias_t *alias;
|
alias_t *alias;
|
||||||
|
|
||||||
line_len = strlen (string) + 1;
|
line_len = strlen (string) + 1;
|
||||||
line = xmalloc (line_len);
|
line = (char *)xmalloc (line_len);
|
||||||
token = xmalloc (line_len);
|
token = (char *)xmalloc (line_len);
|
||||||
|
|
||||||
line[0] = i = 0;
|
line[0] = i = 0;
|
||||||
expand_next = 0;
|
expand_next = 0;
|
||||||
|
|
|
||||||
26
alias.h
26
alias.h
|
|
@ -21,9 +21,9 @@
|
||||||
#if !defined (_ALIAS_H_)
|
#if !defined (_ALIAS_H_)
|
||||||
#define _ALIAS_H_
|
#define _ALIAS_H_
|
||||||
|
|
||||||
#include "hashlib.h"
|
#include "stdc.h"
|
||||||
|
|
||||||
extern char *xmalloc ();
|
#include "hashlib.h"
|
||||||
|
|
||||||
typedef struct alias {
|
typedef struct alias {
|
||||||
char *name;
|
char *name;
|
||||||
|
|
@ -38,33 +38,33 @@ typedef struct alias {
|
||||||
/* The list of known aliases. */
|
/* The list of known aliases. */
|
||||||
extern HASH_TABLE *aliases;
|
extern HASH_TABLE *aliases;
|
||||||
|
|
||||||
extern void initialize_aliases ();
|
extern void initialize_aliases __P((void));
|
||||||
|
|
||||||
/* Scan the list of aliases looking for one with NAME. Return NULL
|
/* Scan the list of aliases looking for one with NAME. Return NULL
|
||||||
if the alias doesn't exist, else a pointer to the alias. */
|
if the alias doesn't exist, else a pointer to the alias. */
|
||||||
extern alias_t *find_alias ();
|
extern alias_t *find_alias __P((char *));
|
||||||
|
|
||||||
/* Return the value of the alias for NAME, or NULL if there is none. */
|
/* Return the value of the alias for NAME, or NULL if there is none. */
|
||||||
extern char *get_alias_value ();
|
extern char *get_alias_value __P((char *));
|
||||||
|
|
||||||
/* Make a new alias from NAME and VALUE. If NAME can be found,
|
/* Make a new alias from NAME and VALUE. If NAME can be found,
|
||||||
then replace its value. */
|
then replace its value. */
|
||||||
extern void add_alias ();
|
extern void add_alias __P((char *, char *));
|
||||||
|
|
||||||
/* Remove the alias with name NAME from the alias list. Returns
|
/* Remove the alias with name NAME from the alias list. Returns
|
||||||
the index of the removed alias, or -1 if the alias didn't exist. */
|
the index of the removed alias, or -1 if the alias didn't exist. */
|
||||||
extern int remove_alias ();
|
extern int remove_alias __P((char *));
|
||||||
|
|
||||||
/* Remove all aliases. */
|
/* Remove all aliases. */
|
||||||
extern void delete_all_aliases ();
|
extern void delete_all_aliases __P((void));
|
||||||
|
|
||||||
/* Return a new line, with any aliases expanded. */
|
|
||||||
extern char *alias_expand ();
|
|
||||||
|
|
||||||
/* Return an array of all defined aliases. */
|
/* Return an array of all defined aliases. */
|
||||||
extern alias_t **all_aliases ();
|
extern alias_t **all_aliases __P((void));
|
||||||
|
|
||||||
/* Expand a single word for aliases. */
|
/* Expand a single word for aliases. */
|
||||||
extern char *alias_expand_word ();
|
extern char *alias_expand_word __P((char *));
|
||||||
|
|
||||||
|
/* Return a new line, with any aliases expanded. */
|
||||||
|
extern char *alias_expand __P((char *));
|
||||||
|
|
||||||
#endif /* _ALIAS_H_ */
|
#endif /* _ALIAS_H_ */
|
||||||
|
|
|
||||||
25
array.c
25
array.c
|
|
@ -45,8 +45,6 @@
|
||||||
#include "array.h"
|
#include "array.h"
|
||||||
#include "builtins/common.h"
|
#include "builtins/common.h"
|
||||||
|
|
||||||
extern char *quote_string (); /* XXX */
|
|
||||||
|
|
||||||
#define ADD_BEFORE(ae, new) \
|
#define ADD_BEFORE(ae, new) \
|
||||||
do { \
|
do { \
|
||||||
ae->prev->next = new; \
|
ae->prev->next = new; \
|
||||||
|
|
@ -66,7 +64,7 @@ char *value;
|
||||||
{
|
{
|
||||||
ARRAY_ELEMENT *r;
|
ARRAY_ELEMENT *r;
|
||||||
|
|
||||||
r = (ARRAY_ELEMENT *) xmalloc(sizeof(ARRAY_ELEMENT));
|
r = (ARRAY_ELEMENT *)xmalloc(sizeof(ARRAY_ELEMENT));
|
||||||
r->ind = indx;
|
r->ind = indx;
|
||||||
r->value = value ? savestring(value) : (char *)NULL;
|
r->value = value ? savestring(value) : (char *)NULL;
|
||||||
r->next = r->prev = (ARRAY_ELEMENT *) NULL;
|
r->next = r->prev = (ARRAY_ELEMENT *) NULL;
|
||||||
|
|
@ -87,7 +85,7 @@ new_array()
|
||||||
ARRAY *r;
|
ARRAY *r;
|
||||||
ARRAY_ELEMENT *head;
|
ARRAY_ELEMENT *head;
|
||||||
|
|
||||||
r =(ARRAY *) xmalloc(sizeof(ARRAY));
|
r =(ARRAY *)xmalloc(sizeof(ARRAY));
|
||||||
r->type = array_indexed;
|
r->type = array_indexed;
|
||||||
r->max_index = r->max_size = -1;
|
r->max_index = r->max_size = -1;
|
||||||
r->num_elements = 0;
|
r->num_elements = 0;
|
||||||
|
|
@ -159,7 +157,7 @@ ARRAY_ELEMENT *s, *e;
|
||||||
{
|
{
|
||||||
ARRAY *a;
|
ARRAY *a;
|
||||||
ARRAY_ELEMENT *p, *n;
|
ARRAY_ELEMENT *p, *n;
|
||||||
int i;
|
arrayind_t i;
|
||||||
|
|
||||||
a = new_array ();
|
a = new_array ();
|
||||||
a->type = array->type;
|
a->type = array->type;
|
||||||
|
|
@ -280,7 +278,7 @@ arrayind_t i;
|
||||||
void
|
void
|
||||||
array_walk(a, func)
|
array_walk(a, func)
|
||||||
ARRAY *a;
|
ARRAY *a;
|
||||||
Function *func;
|
sh_ae_map_func_t *func;
|
||||||
{
|
{
|
||||||
register ARRAY_ELEMENT *ae;
|
register ARRAY_ELEMENT *ae;
|
||||||
|
|
||||||
|
|
@ -309,9 +307,10 @@ int quoted;
|
||||||
return ((char *)NULL);
|
return ((char *)NULL);
|
||||||
|
|
||||||
slen = strlen(sep);
|
slen = strlen(sep);
|
||||||
|
result = NULL;
|
||||||
for (rsize = rlen = 0, ae = start; ae != end; ae = element_forw(ae)) {
|
for (rsize = rlen = 0, ae = start; ae != end; ae = element_forw(ae)) {
|
||||||
if (rsize == 0)
|
if (rsize == 0)
|
||||||
result = xmalloc (rsize = 64);
|
result = (char *)xmalloc (rsize = 64);
|
||||||
if (element_value(ae)) {
|
if (element_value(ae)) {
|
||||||
t = quoted ? quote_string(element_value(ae)) : element_value(ae);
|
t = quoted ? quote_string(element_value(ae)) : element_value(ae);
|
||||||
reg = strlen(t);
|
reg = strlen(t);
|
||||||
|
|
@ -330,7 +329,8 @@ int quoted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
result[rlen] = '\0'; /* XXX */
|
if (result)
|
||||||
|
result[rlen] = '\0'; /* XXX */
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -358,7 +358,7 @@ ARRAY *a;
|
||||||
if (a == 0 || array_empty (a))
|
if (a == 0 || array_empty (a))
|
||||||
return((char *)NULL);
|
return((char *)NULL);
|
||||||
|
|
||||||
result = xmalloc (rsize = 128);
|
result = (char *)xmalloc (rsize = 128);
|
||||||
result[0] = '(';
|
result[0] = '(';
|
||||||
rlen = 1;
|
rlen = 1;
|
||||||
|
|
||||||
|
|
@ -525,10 +525,11 @@ ARRAY *array;
|
||||||
char *
|
char *
|
||||||
array_subrange (a, start, end, quoted)
|
array_subrange (a, start, end, quoted)
|
||||||
ARRAY *a;
|
ARRAY *a;
|
||||||
int start, end, quoted;
|
arrayind_t start, end;
|
||||||
|
int quoted;
|
||||||
{
|
{
|
||||||
ARRAY_ELEMENT *h, *p;
|
ARRAY_ELEMENT *h, *p;
|
||||||
int i;
|
arrayind_t i;
|
||||||
|
|
||||||
p = array_head (a);
|
p = array_head (a);
|
||||||
if (p == 0 || array_empty (a) || start > array_num_elements (a))
|
if (p == 0 || array_empty (a) || start > array_num_elements (a))
|
||||||
|
|
@ -577,7 +578,7 @@ int mflags;
|
||||||
print_element(ae)
|
print_element(ae)
|
||||||
ARRAY_ELEMENT *ae;
|
ARRAY_ELEMENT *ae;
|
||||||
{
|
{
|
||||||
printf("array[%d] = %s\n",(int)element_index(ae), element_value(ae));
|
printf("array[%ld] = %s\n", element_index(ae), element_value(ae));
|
||||||
}
|
}
|
||||||
|
|
||||||
print_array(a)
|
print_array(a)
|
||||||
|
|
|
||||||
7
array.h
7
array.h
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
#include "stdc.h"
|
#include "stdc.h"
|
||||||
|
|
||||||
typedef int arrayind_t;
|
typedef long arrayind_t;
|
||||||
|
|
||||||
enum atype {array_indexed, array_assoc};
|
enum atype {array_indexed, array_assoc};
|
||||||
|
|
||||||
|
|
@ -40,6 +40,8 @@ typedef struct array_element {
|
||||||
struct array_element *next, *prev;
|
struct array_element *next, *prev;
|
||||||
} ARRAY_ELEMENT;
|
} ARRAY_ELEMENT;
|
||||||
|
|
||||||
|
typedef int sh_ae_map_func_t __P((ARRAY_ELEMENT *));
|
||||||
|
|
||||||
char *array_reference __P((ARRAY *, arrayind_t));
|
char *array_reference __P((ARRAY *, arrayind_t));
|
||||||
|
|
||||||
extern int array_add_element __P((ARRAY *, arrayind_t, char *));
|
extern int array_add_element __P((ARRAY *, arrayind_t, char *));
|
||||||
|
|
@ -53,7 +55,6 @@ extern void empty_array __P((ARRAY *));
|
||||||
extern void dispose_array __P((ARRAY *));
|
extern void dispose_array __P((ARRAY *));
|
||||||
extern ARRAY *dup_array __P((ARRAY *));
|
extern ARRAY *dup_array __P((ARRAY *));
|
||||||
extern ARRAY *dup_array_subrange __P((ARRAY *, ARRAY_ELEMENT *, ARRAY_ELEMENT *));
|
extern ARRAY *dup_array_subrange __P((ARRAY *, ARRAY_ELEMENT *, ARRAY_ELEMENT *));
|
||||||
extern ARRAY_ELEMENT *new_array_element __P((arrayind_t, char *));
|
|
||||||
extern ARRAY_ELEMENT *copy_array_element __P((ARRAY_ELEMENT *));
|
extern ARRAY_ELEMENT *copy_array_element __P((ARRAY_ELEMENT *));
|
||||||
|
|
||||||
extern WORD_LIST *array_to_word_list __P((ARRAY *));
|
extern WORD_LIST *array_to_word_list __P((ARRAY *));
|
||||||
|
|
@ -67,7 +68,7 @@ extern char *quoted_array_assignment_string __P((ARRAY *));
|
||||||
extern char *array_to_string __P((ARRAY *, char *, int));
|
extern char *array_to_string __P((ARRAY *, char *, int));
|
||||||
extern ARRAY *string_to_array __P((char *, char *));
|
extern ARRAY *string_to_array __P((char *, char *));
|
||||||
|
|
||||||
extern char *array_subrange __P((ARRAY *, int, int, int));
|
extern char *array_subrange __P((ARRAY *, arrayind_t, arrayind_t, int));
|
||||||
extern char *array_pat_subst __P((ARRAY *, char *, char *, int));
|
extern char *array_pat_subst __P((ARRAY *, char *, char *, int));
|
||||||
|
|
||||||
extern ARRAY *array_quote __P((ARRAY *));
|
extern ARRAY *array_quote __P((ARRAY *));
|
||||||
|
|
|
||||||
645
arrayfunc.c
Normal file
645
arrayfunc.c
Normal file
|
|
@ -0,0 +1,645 @@
|
||||||
|
/* arrayfunc.c -- High-level array functions used by other parts of the shell. */
|
||||||
|
|
||||||
|
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Bash, the Bourne Again SHell.
|
||||||
|
|
||||||
|
Bash is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free
|
||||||
|
Software Foundation; either version 2, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
Bash is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with Bash; see the file COPYING. If not, write to the Free Software
|
||||||
|
Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#if defined (ARRAY_VARS)
|
||||||
|
|
||||||
|
#if defined (HAVE_UNISTD_H)
|
||||||
|
# include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "shell.h"
|
||||||
|
#include "builtins/common.h"
|
||||||
|
|
||||||
|
extern char *this_command_name;
|
||||||
|
extern int last_command_exit_value;
|
||||||
|
|
||||||
|
static void quote_array_assignment_chars __P((WORD_LIST *));
|
||||||
|
static char *array_value_internal __P((char *, int, int));
|
||||||
|
|
||||||
|
/* **************************************************************** */
|
||||||
|
/* */
|
||||||
|
/* Functions to manipulate array variables and perform assignments */
|
||||||
|
/* */
|
||||||
|
/* **************************************************************** */
|
||||||
|
|
||||||
|
/* Convert a shell variable to an array variable. The original value is
|
||||||
|
saved as array[0]. */
|
||||||
|
SHELL_VAR *
|
||||||
|
convert_var_to_array (var)
|
||||||
|
SHELL_VAR *var;
|
||||||
|
{
|
||||||
|
char *oldval;
|
||||||
|
ARRAY *array;
|
||||||
|
|
||||||
|
oldval = value_cell (var);
|
||||||
|
array = new_array ();
|
||||||
|
array_add_element (array, 0, oldval);
|
||||||
|
|
||||||
|
FREE (value_cell (var));
|
||||||
|
var->value = (char *)array;
|
||||||
|
|
||||||
|
INVALIDATE_EXPORTSTR (var);
|
||||||
|
|
||||||
|
VSETATTR (var, att_array);
|
||||||
|
VUNSETATTR (var, att_invisible);
|
||||||
|
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Perform an array assignment name[ind]=value. If NAME already exists and
|
||||||
|
is not an array, and IND is 0, perform name=value instead. If NAME exists
|
||||||
|
and is not an array, and IND is not 0, convert it into an array with the
|
||||||
|
existing value as name[0].
|
||||||
|
|
||||||
|
If NAME does not exist, just create an array variable, no matter what
|
||||||
|
IND's value may be. */
|
||||||
|
SHELL_VAR *
|
||||||
|
bind_array_variable (name, ind, value)
|
||||||
|
char *name;
|
||||||
|
arrayind_t ind;
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
SHELL_VAR *entry;
|
||||||
|
char *newval;
|
||||||
|
|
||||||
|
entry = var_lookup (name, shell_variables);
|
||||||
|
|
||||||
|
if (entry == (SHELL_VAR *) 0)
|
||||||
|
entry = make_new_array_variable (name);
|
||||||
|
else if (readonly_p (entry) || noassign_p (entry))
|
||||||
|
{
|
||||||
|
if (readonly_p (entry))
|
||||||
|
report_error ("%s: readonly variable", name);
|
||||||
|
return (entry);
|
||||||
|
}
|
||||||
|
else if (array_p (entry) == 0)
|
||||||
|
entry = convert_var_to_array (entry);
|
||||||
|
|
||||||
|
/* ENTRY is an array variable, and ARRAY points to the value. */
|
||||||
|
newval = make_variable_value (entry, value);
|
||||||
|
if (entry->assign_func)
|
||||||
|
(*entry->assign_func) (entry, ind, newval);
|
||||||
|
else
|
||||||
|
array_add_element (array_cell (entry), ind, newval);
|
||||||
|
FREE (newval);
|
||||||
|
|
||||||
|
return (entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Parse NAME, a lhs of an assignment statement of the form v[s], and
|
||||||
|
assign VALUE to that array element by calling bind_array_variable(). */
|
||||||
|
SHELL_VAR *
|
||||||
|
assign_array_element (name, value)
|
||||||
|
char *name, *value;
|
||||||
|
{
|
||||||
|
char *sub, *vname;
|
||||||
|
arrayind_t ind;
|
||||||
|
int sublen;
|
||||||
|
SHELL_VAR *entry;
|
||||||
|
|
||||||
|
vname = array_variable_name (name, &sub, &sublen);
|
||||||
|
|
||||||
|
if (vname == 0)
|
||||||
|
return ((SHELL_VAR *)NULL);
|
||||||
|
|
||||||
|
if ((ALL_ELEMENT_SUB (sub[0]) && sub[1] == ']') || (sublen <= 1))
|
||||||
|
{
|
||||||
|
free (vname);
|
||||||
|
report_error ("%s: bad array subscript", name);
|
||||||
|
return ((SHELL_VAR *)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
ind = array_expand_index (sub, sublen);
|
||||||
|
if (ind < 0)
|
||||||
|
{
|
||||||
|
free (vname);
|
||||||
|
report_error ("%s: bad array subscript", name);
|
||||||
|
return ((SHELL_VAR *)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
entry = bind_array_variable (vname, ind, value);
|
||||||
|
|
||||||
|
free (vname);
|
||||||
|
return (entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the array variable corresponding to NAME. If there is no variable,
|
||||||
|
create a new array variable. If the variable exists but is not an array,
|
||||||
|
convert it to an indexed array. If CHECK_FLAGS is non-zero, an existing
|
||||||
|
variable is checked for the readonly or noassign attribute in preparation
|
||||||
|
for assignment (e.g., by the `read' builtin). */
|
||||||
|
SHELL_VAR *
|
||||||
|
find_or_make_array_variable (name, check_flags)
|
||||||
|
char *name;
|
||||||
|
int check_flags;
|
||||||
|
{
|
||||||
|
SHELL_VAR *var;
|
||||||
|
|
||||||
|
var = find_variable (name);
|
||||||
|
|
||||||
|
if (var == 0)
|
||||||
|
var = make_new_array_variable (name);
|
||||||
|
else if (check_flags && (readonly_p (var) || noassign_p (var)))
|
||||||
|
{
|
||||||
|
if (readonly_p (var))
|
||||||
|
report_error ("%s: readonly variable", name);
|
||||||
|
return ((SHELL_VAR *)NULL);
|
||||||
|
}
|
||||||
|
else if (array_p (var) == 0)
|
||||||
|
var = convert_var_to_array (var);
|
||||||
|
|
||||||
|
return (var);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Perform a compound assignment statement for array NAME, where VALUE is
|
||||||
|
the text between the parens: NAME=( VALUE ) */
|
||||||
|
SHELL_VAR *
|
||||||
|
assign_array_from_string (name, value)
|
||||||
|
char *name, *value;
|
||||||
|
{
|
||||||
|
SHELL_VAR *var;
|
||||||
|
|
||||||
|
var = find_or_make_array_variable (name, 1);
|
||||||
|
if (var == 0)
|
||||||
|
return ((SHELL_VAR *)NULL);
|
||||||
|
|
||||||
|
return (assign_array_var_from_string (var, value));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sequentially assign the indices of indexed array variable VAR from the
|
||||||
|
words in LIST. */
|
||||||
|
SHELL_VAR *
|
||||||
|
assign_array_var_from_word_list (var, list)
|
||||||
|
SHELL_VAR *var;
|
||||||
|
WORD_LIST *list;
|
||||||
|
{
|
||||||
|
register arrayind_t i;
|
||||||
|
register WORD_LIST *l;
|
||||||
|
ARRAY *a;
|
||||||
|
|
||||||
|
for (a = array_cell (var), l = list, i = 0; l; l = l->next, i++)
|
||||||
|
if (var->assign_func)
|
||||||
|
(*var->assign_func) (var, i, l->word->word);
|
||||||
|
else
|
||||||
|
array_add_element (a, i, l->word->word);
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Perform a compound array assignment: VAR->name=( VALUE ). The
|
||||||
|
VALUE has already had the parentheses stripped. */
|
||||||
|
SHELL_VAR *
|
||||||
|
assign_array_var_from_string (var, value)
|
||||||
|
SHELL_VAR *var;
|
||||||
|
char *value;
|
||||||
|
{
|
||||||
|
ARRAY *a;
|
||||||
|
WORD_LIST *list, *nlist;
|
||||||
|
char *w, *val, *nval;
|
||||||
|
int ni, len;
|
||||||
|
arrayind_t ind, last_ind;
|
||||||
|
|
||||||
|
if (value == 0)
|
||||||
|
return var;
|
||||||
|
|
||||||
|
/* If this is called from declare_builtin, value[0] == '(' and
|
||||||
|
strchr(value, ')') != 0. In this case, we need to extract
|
||||||
|
the value from between the parens before going on. */
|
||||||
|
if (*value == '(') /*)*/
|
||||||
|
{
|
||||||
|
ni = 1;
|
||||||
|
val = extract_array_assignment_list (value, &ni);
|
||||||
|
if (val == 0)
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
val = value;
|
||||||
|
|
||||||
|
/* Expand the value string into a list of words, performing all the
|
||||||
|
shell expansions including pathname generation and word splitting. */
|
||||||
|
/* First we split the string on whitespace, using the shell parser
|
||||||
|
(ksh93 seems to do this). */
|
||||||
|
list = parse_string_to_word_list (val, "array assign");
|
||||||
|
|
||||||
|
/* If we're using [subscript]=value, we need to quote each [ and ] to
|
||||||
|
prevent unwanted filename expansion. */
|
||||||
|
if (list)
|
||||||
|
quote_array_assignment_chars (list);
|
||||||
|
|
||||||
|
/* Now that we've split it, perform the shell expansions on each
|
||||||
|
word in the list. */
|
||||||
|
nlist = list ? expand_words_no_vars (list) : (WORD_LIST *)NULL;
|
||||||
|
|
||||||
|
dispose_words (list);
|
||||||
|
|
||||||
|
if (val != value)
|
||||||
|
free (val);
|
||||||
|
|
||||||
|
a = array_cell (var);
|
||||||
|
|
||||||
|
/* Now that we are ready to assign values to the array, kill the existing
|
||||||
|
value. */
|
||||||
|
if (a)
|
||||||
|
empty_array (a);
|
||||||
|
|
||||||
|
for (last_ind = 0, list = nlist; list; list = list->next)
|
||||||
|
{
|
||||||
|
w = list->word->word;
|
||||||
|
|
||||||
|
/* We have a word of the form [ind]=value */
|
||||||
|
if (w[0] == '[')
|
||||||
|
{
|
||||||
|
len = skipsubscript (w, 0);
|
||||||
|
|
||||||
|
if (w[len] != ']' || w[len+1] != '=')
|
||||||
|
{
|
||||||
|
nval = make_variable_value (var, w);
|
||||||
|
if (var->assign_func)
|
||||||
|
(*var->assign_func) (var, last_ind, nval);
|
||||||
|
else
|
||||||
|
array_add_element (a, last_ind, nval);
|
||||||
|
FREE (nval);
|
||||||
|
last_ind++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len == 1)
|
||||||
|
{
|
||||||
|
report_error ("%s: bad array subscript", w);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ALL_ELEMENT_SUB (w[1]) && len == 2)
|
||||||
|
{
|
||||||
|
report_error ("%s: cannot assign to non-numeric index", w);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ind = array_expand_index (w + 1, len);
|
||||||
|
if (ind < 0)
|
||||||
|
{
|
||||||
|
report_error ("%s: bad array subscript", w);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
last_ind = ind;
|
||||||
|
val = w + len + 2;
|
||||||
|
}
|
||||||
|
else /* No [ind]=value, just a stray `=' */
|
||||||
|
{
|
||||||
|
ind = last_ind;
|
||||||
|
val = w;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (integer_p (var))
|
||||||
|
this_command_name = (char *)NULL; /* no command name for errors */
|
||||||
|
nval = make_variable_value (var, val);
|
||||||
|
if (var->assign_func)
|
||||||
|
(*var->assign_func) (var, ind, nval);
|
||||||
|
else
|
||||||
|
array_add_element (a, ind, nval);
|
||||||
|
FREE (nval);
|
||||||
|
last_ind++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dispose_words (nlist);
|
||||||
|
return (var);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For each word in a compound array assignment, if the word looks like
|
||||||
|
[ind]=value, quote the `[' and `]' before the `=' to protect them from
|
||||||
|
unwanted filename expansion. */
|
||||||
|
static void
|
||||||
|
quote_array_assignment_chars (list)
|
||||||
|
WORD_LIST *list;
|
||||||
|
{
|
||||||
|
char *s, *t, *nword;
|
||||||
|
int saw_eq;
|
||||||
|
WORD_LIST *l;
|
||||||
|
|
||||||
|
for (l = list; l; l = l->next)
|
||||||
|
{
|
||||||
|
if (l->word == 0 || l->word->word == 0 || l->word->word[0] == '\0')
|
||||||
|
continue; /* should not happen, but just in case... */
|
||||||
|
/* Don't bother if it doesn't look like [ind]=value */
|
||||||
|
if (l->word->word[0] != '[' || strchr (l->word->word, '=') == 0) /* ] */
|
||||||
|
continue;
|
||||||
|
s = nword = (char *)xmalloc (strlen (l->word->word) * 2 + 1);
|
||||||
|
saw_eq = 0;
|
||||||
|
for (t = l->word->word; *t; )
|
||||||
|
{
|
||||||
|
if (*t == '=')
|
||||||
|
saw_eq = 1;
|
||||||
|
if (saw_eq == 0 && (*t == '[' || *t == ']'))
|
||||||
|
*s++ = '\\';
|
||||||
|
*s++ = *t++;
|
||||||
|
}
|
||||||
|
*s = '\0';
|
||||||
|
free (l->word->word);
|
||||||
|
l->word->word = nword;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function assumes s[i] == '['; returns with s[ret] == ']' if
|
||||||
|
an array subscript is correctly parsed. */
|
||||||
|
int
|
||||||
|
skipsubscript (s, i)
|
||||||
|
const char *s;
|
||||||
|
int i;
|
||||||
|
{
|
||||||
|
int count, c;
|
||||||
|
|
||||||
|
for (count = 1; count && (c = s[++i]); )
|
||||||
|
{
|
||||||
|
if (c == '[')
|
||||||
|
count++;
|
||||||
|
else if (c == ']')
|
||||||
|
count--;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is called with SUB pointing to just after the beginning
|
||||||
|
`[' of an array subscript and removes the array element to which SUB
|
||||||
|
expands from array VAR. A subscript of `*' or `@' unsets the array. */
|
||||||
|
int
|
||||||
|
unbind_array_element (var, sub)
|
||||||
|
SHELL_VAR *var;
|
||||||
|
char *sub;
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
arrayind_t ind;
|
||||||
|
ARRAY_ELEMENT *ae;
|
||||||
|
|
||||||
|
len = skipsubscript (sub, 0);
|
||||||
|
if (sub[len] != ']' || len == 0)
|
||||||
|
{
|
||||||
|
builtin_error ("%s[%s: bad array subscript", var->name, sub);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
sub[len] = '\0';
|
||||||
|
|
||||||
|
if (ALL_ELEMENT_SUB (sub[0]) && sub[1] == 0)
|
||||||
|
{
|
||||||
|
makunbound (var->name, shell_variables);
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
ind = array_expand_index (sub, len+1);
|
||||||
|
if (ind < 0)
|
||||||
|
{
|
||||||
|
builtin_error ("[%s]: bad array subscript", sub);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
ae = array_delete_element (array_cell (var), ind);
|
||||||
|
if (ae)
|
||||||
|
destroy_array_element (ae);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Format and output an array assignment in compound form VAR=(VALUES),
|
||||||
|
suitable for re-use as input. */
|
||||||
|
void
|
||||||
|
print_array_assignment (var, quoted)
|
||||||
|
SHELL_VAR *var;
|
||||||
|
int quoted;
|
||||||
|
{
|
||||||
|
char *vstr;
|
||||||
|
|
||||||
|
if (quoted)
|
||||||
|
vstr = quoted_array_assignment_string (array_cell (var));
|
||||||
|
else
|
||||||
|
vstr = array_to_assignment_string (array_cell (var));
|
||||||
|
|
||||||
|
if (vstr == 0)
|
||||||
|
printf ("%s=%s\n", var->name, quoted ? "'()'" : "()");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf ("%s=%s\n", var->name, vstr);
|
||||||
|
free (vstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Utility functions to manage arrays and their contents for expansion */
|
||||||
|
/* */
|
||||||
|
/***********************************************************************/
|
||||||
|
|
||||||
|
/* Return 1 if NAME is a properly-formed array reference v[sub]. */
|
||||||
|
int
|
||||||
|
valid_array_reference (name)
|
||||||
|
char *name;
|
||||||
|
{
|
||||||
|
char *t;
|
||||||
|
int r, len;
|
||||||
|
|
||||||
|
t = strchr (name, '['); /* ] */
|
||||||
|
if (t)
|
||||||
|
{
|
||||||
|
*t = '\0';
|
||||||
|
r = legal_identifier (name);
|
||||||
|
*t = '[';
|
||||||
|
if (r == 0)
|
||||||
|
return 0;
|
||||||
|
/* Check for a properly-terminated non-blank subscript. */
|
||||||
|
len = skipsubscript (t, 0);
|
||||||
|
if (t[len] != ']' || len == 1)
|
||||||
|
return 0;
|
||||||
|
for (r = 1; r < len; r++)
|
||||||
|
if (whitespace (t[r]) == 0)
|
||||||
|
return 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Expand the array index beginning at S and extending LEN characters. */
|
||||||
|
arrayind_t
|
||||||
|
array_expand_index (s, len)
|
||||||
|
char *s;
|
||||||
|
int len;
|
||||||
|
{
|
||||||
|
char *exp, *t;
|
||||||
|
int expok;
|
||||||
|
arrayind_t val;
|
||||||
|
|
||||||
|
exp = (char *)xmalloc (len);
|
||||||
|
strncpy (exp, s, len - 1);
|
||||||
|
exp[len - 1] = '\0';
|
||||||
|
t = expand_string_to_string (exp, 0);
|
||||||
|
this_command_name = (char *)NULL;
|
||||||
|
val = evalexp (t, &expok);
|
||||||
|
free (t);
|
||||||
|
free (exp);
|
||||||
|
if (expok == 0)
|
||||||
|
{
|
||||||
|
last_command_exit_value = EXECUTION_FAILURE;
|
||||||
|
jump_to_top_level (DISCARD);
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the name of the variable specified by S without any subscript.
|
||||||
|
If SUBP is non-null, return a pointer to the start of the subscript
|
||||||
|
in *SUBP. If LENP is non-null, the length of the subscript is returned
|
||||||
|
in *LENP. This returns newly-allocated memory. */
|
||||||
|
char *
|
||||||
|
array_variable_name (s, subp, lenp)
|
||||||
|
char *s, **subp;
|
||||||
|
int *lenp;
|
||||||
|
{
|
||||||
|
char *t, *ret;
|
||||||
|
int ind, ni;
|
||||||
|
|
||||||
|
t = strchr (s, '[');
|
||||||
|
if (t == 0)
|
||||||
|
return ((char *)NULL);
|
||||||
|
ind = t - s;
|
||||||
|
ni = skipsubscript (s, ind);
|
||||||
|
if (ni <= ind + 1 || s[ni] != ']')
|
||||||
|
{
|
||||||
|
report_error ("%s: bad array subscript", s);
|
||||||
|
return ((char *)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
*t = '\0';
|
||||||
|
ret = savestring (s);
|
||||||
|
*t++ = '['; /* ] */
|
||||||
|
|
||||||
|
if (subp)
|
||||||
|
*subp = t;
|
||||||
|
if (lenp)
|
||||||
|
*lenp = ni - ind;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the variable specified by S without any subscript. If SUBP is
|
||||||
|
non-null, return a pointer to the start of the subscript in *SUBP.
|
||||||
|
If LENP is non-null, the length of the subscript is returned in *LENP. */
|
||||||
|
SHELL_VAR *
|
||||||
|
array_variable_part (s, subp, lenp)
|
||||||
|
char *s, **subp;
|
||||||
|
int *lenp;
|
||||||
|
{
|
||||||
|
char *t;
|
||||||
|
SHELL_VAR *var;
|
||||||
|
|
||||||
|
t = array_variable_name (s, subp, lenp);
|
||||||
|
if (t == 0)
|
||||||
|
return ((SHELL_VAR *)NULL);
|
||||||
|
var = find_variable (t);
|
||||||
|
|
||||||
|
free (t);
|
||||||
|
return var;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return a string containing the elements in the array and subscript
|
||||||
|
described by S. If the subscript is * or @, obeys quoting rules akin
|
||||||
|
to the expansion of $* and $@ including double quoting. */
|
||||||
|
static char *
|
||||||
|
array_value_internal (s, quoted, allow_all)
|
||||||
|
char *s;
|
||||||
|
int quoted, allow_all;
|
||||||
|
{
|
||||||
|
int len;
|
||||||
|
arrayind_t ind;
|
||||||
|
char *retval, *t, *temp;
|
||||||
|
WORD_LIST *l;
|
||||||
|
SHELL_VAR *var;
|
||||||
|
|
||||||
|
var = array_variable_part (s, &t, &len);
|
||||||
|
|
||||||
|
if (var == 0)
|
||||||
|
return (char *)NULL;
|
||||||
|
|
||||||
|
/* [ */
|
||||||
|
if (ALL_ELEMENT_SUB (t[0]) && t[1] == ']')
|
||||||
|
{
|
||||||
|
if (allow_all == 0)
|
||||||
|
{
|
||||||
|
report_error ("%s: bad array subscript", s);
|
||||||
|
return ((char *)NULL);
|
||||||
|
}
|
||||||
|
else if (array_p (var) == 0)
|
||||||
|
{
|
||||||
|
l = (WORD_LIST *)NULL;
|
||||||
|
l = add_string_to_list (value_cell (var), l);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
l = array_to_word_list (array_cell (var));
|
||||||
|
if (l == (WORD_LIST *)NULL)
|
||||||
|
return ((char *) NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (t[0] == '*' && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
|
||||||
|
{
|
||||||
|
temp = string_list_dollar_star (l);
|
||||||
|
retval = quote_string (temp);
|
||||||
|
free (temp);
|
||||||
|
}
|
||||||
|
else /* ${name[@]} or unquoted ${name[*]} */
|
||||||
|
retval = string_list_dollar_at (l, quoted);
|
||||||
|
|
||||||
|
dispose_words (l);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ind = array_expand_index (t, len);
|
||||||
|
if (ind < 0)
|
||||||
|
{
|
||||||
|
report_error ("%s: bad array subscript", var->name);
|
||||||
|
return ((char *)NULL);
|
||||||
|
}
|
||||||
|
if (array_p (var) == 0)
|
||||||
|
return (ind == 0 ? savestring (value_cell (var)) : (char *)NULL);
|
||||||
|
retval = array_reference (array_cell (var), ind);
|
||||||
|
if (retval)
|
||||||
|
retval = quote_escapes (retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return a string containing the elements described by the array and
|
||||||
|
subscript contained in S, obeying quoting for subscripts * and @. */
|
||||||
|
char *
|
||||||
|
array_value (s, quoted)
|
||||||
|
char *s;
|
||||||
|
int quoted;
|
||||||
|
{
|
||||||
|
return (array_value_internal (s, quoted, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return the value of the array indexing expression S as a single string.
|
||||||
|
If ALLOW_ALL is 0, do not allow `@' and `*' subscripts. This is used
|
||||||
|
by other parts of the shell such as the arithmetic expression evaluator
|
||||||
|
in expr.c. */
|
||||||
|
char *
|
||||||
|
get_array_value (s, allow_all)
|
||||||
|
char *s;
|
||||||
|
int allow_all;
|
||||||
|
{
|
||||||
|
return (array_value_internal (s, 0, allow_all));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* ARRAY_VARS */
|
||||||
53
arrayfunc.h
Normal file
53
arrayfunc.h
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
/* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */
|
||||||
|
|
||||||
|
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Bash, the Bourne Again SHell.
|
||||||
|
|
||||||
|
Bash is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
Bash is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Bash; see the file COPYING. If not, write to the Free
|
||||||
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
|
#if !defined (_ARRAYFUNC_H_)
|
||||||
|
#define _ARRAYFUNC_H_
|
||||||
|
|
||||||
|
/* Must include variables.h before including this file. */
|
||||||
|
|
||||||
|
#if defined (ARRAY_VARS)
|
||||||
|
|
||||||
|
extern SHELL_VAR *convert_var_to_array __P((SHELL_VAR *));
|
||||||
|
|
||||||
|
extern SHELL_VAR *bind_array_variable __P((char *, arrayind_t, char *));
|
||||||
|
extern SHELL_VAR *assign_array_element __P((char *, char *));
|
||||||
|
|
||||||
|
extern SHELL_VAR *find_or_make_array_variable __P((char *, int));
|
||||||
|
|
||||||
|
extern SHELL_VAR *assign_array_from_string __P((char *, char *));
|
||||||
|
extern SHELL_VAR *assign_array_var_from_word_list __P((SHELL_VAR *, WORD_LIST *));
|
||||||
|
extern SHELL_VAR *assign_array_var_from_string __P((SHELL_VAR *, char *));
|
||||||
|
|
||||||
|
extern int unbind_array_element __P((SHELL_VAR *, char *));
|
||||||
|
extern int skipsubscript __P((const char *, int));
|
||||||
|
extern void print_array_assignment __P((SHELL_VAR *, int));
|
||||||
|
|
||||||
|
extern arrayind_t array_expand_index __P((char *, int));
|
||||||
|
extern int valid_array_reference __P((char *));
|
||||||
|
extern char *array_value __P((char *, int));
|
||||||
|
extern char *get_array_value __P((char *, int));
|
||||||
|
|
||||||
|
extern char *array_variable_name __P((char *, char **, int *));
|
||||||
|
extern SHELL_VAR *array_variable_part __P((char *, char **, int *));
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_ARRAYFUNC_H_ */
|
||||||
|
|
@ -22,11 +22,16 @@
|
||||||
#define _BASHANSI_H_
|
#define _BASHANSI_H_
|
||||||
|
|
||||||
#if defined (HAVE_STRING_H)
|
#if defined (HAVE_STRING_H)
|
||||||
|
# if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H)
|
||||||
|
# include <memory.h>
|
||||||
|
# endif
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
#else
|
|
||||||
# include <strings.h>
|
|
||||||
#endif /* !HAVE_STRING_H */
|
#endif /* !HAVE_STRING_H */
|
||||||
|
|
||||||
|
#if defined (HAVE_STRINGS_H)
|
||||||
|
# include <strings.h>
|
||||||
|
#endif /* !HAVE_STRINGS_H */
|
||||||
|
|
||||||
#if defined (HAVE_STDLIB_H)
|
#if defined (HAVE_STDLIB_H)
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#else
|
#else
|
||||||
|
|
|
||||||
42
bashhist.c
42
bashhist.c
|
|
@ -41,10 +41,12 @@
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "parser.h" /* for the struct dstack stuff. */
|
#include "parser.h" /* for the struct dstack stuff. */
|
||||||
#include "pathexp.h" /* for the struct ignorevar stuff */
|
#include "pathexp.h" /* for the struct ignorevar stuff */
|
||||||
|
#include "bashhist.h" /* matching prototypes and declarations */
|
||||||
#include "builtins/common.h"
|
#include "builtins/common.h"
|
||||||
|
|
||||||
#include <readline/history.h>
|
#include <readline/history.h>
|
||||||
#include <glob/fnmatch.h>
|
#include <glob/glob.h>
|
||||||
|
#include <glob/strmatch.h>
|
||||||
|
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
# include "bashline.h"
|
# include "bashline.h"
|
||||||
|
|
@ -54,9 +56,7 @@
|
||||||
extern int errno;
|
extern int errno;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int glob_pattern_p ();
|
static int histignore_item_func __P((struct ign *));
|
||||||
|
|
||||||
static int histignore_item_func ();
|
|
||||||
|
|
||||||
static struct ignorevar histignore =
|
static struct ignorevar histignore =
|
||||||
{
|
{
|
||||||
|
|
@ -64,7 +64,7 @@ static struct ignorevar histignore =
|
||||||
(struct ign *)0,
|
(struct ign *)0,
|
||||||
0,
|
0,
|
||||||
(char *)0,
|
(char *)0,
|
||||||
(Function *)histignore_item_func,
|
(sh_iv_item_func_t *)histignore_item_func,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define HIGN_EXPAND 0x01
|
#define HIGN_EXPAND 0x01
|
||||||
|
|
@ -148,18 +148,24 @@ int hist_verify;
|
||||||
|
|
||||||
#endif /* READLINE */
|
#endif /* READLINE */
|
||||||
|
|
||||||
|
/* Non-zero means to not save function definitions in the history list. */
|
||||||
|
int dont_save_function_defs;
|
||||||
|
|
||||||
/* Variables declared in other files used here. */
|
/* Variables declared in other files used here. */
|
||||||
extern int interactive;
|
|
||||||
extern int current_command_line_count;
|
extern int current_command_line_count;
|
||||||
|
|
||||||
extern struct dstack dstack;
|
extern struct dstack dstack;
|
||||||
|
|
||||||
extern char *extract_colon_unit ();
|
static int bash_history_inhibit_expansion __P((char *, int));
|
||||||
extern char *history_delimiting_chars ();
|
#if defined (READLINE)
|
||||||
extern void maybe_add_history (); /* forward declaration */
|
static void re_edit __P((char *));
|
||||||
extern void bash_add_history (); /* forward declaration */
|
#endif
|
||||||
|
static int history_expansion_p __P((char *));
|
||||||
static int history_should_ignore ();
|
static int shell_comment __P((char *));
|
||||||
|
static int should_expand __P((char *));
|
||||||
|
static HIST_ENTRY *last_history_entry __P((void));
|
||||||
|
static char *expand_histignore_pattern __P((char *));
|
||||||
|
static int history_should_ignore __P((char *));
|
||||||
|
|
||||||
/* Is the history expansion starting at string[i] one that should not
|
/* Is the history expansion starting at string[i] one that should not
|
||||||
be expanded? */
|
be expanded? */
|
||||||
|
|
@ -470,6 +476,7 @@ shell_comment (line)
|
||||||
return (p && *p == '#');
|
return (p && *p == '#');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef INCLUDE_UNUSED
|
||||||
/* Remove shell comments from LINE. A `#' and anything after it is a comment.
|
/* Remove shell comments from LINE. A `#' and anything after it is a comment.
|
||||||
This isn't really useful yet, since it doesn't handle quoting. */
|
This isn't really useful yet, since it doesn't handle quoting. */
|
||||||
static char *
|
static char *
|
||||||
|
|
@ -484,6 +491,7 @@ filter_comments (line)
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
return (line);
|
return (line);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Add LINE to the history list depending on the value of HISTORY_CONTROL. */
|
/* Add LINE to the history list depending on the value of HISTORY_CONTROL. */
|
||||||
void
|
void
|
||||||
|
|
@ -580,10 +588,10 @@ bash_add_history (line)
|
||||||
chars_to_add = "";
|
chars_to_add = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
new_line = (char *) xmalloc (1
|
new_line = (char *)xmalloc (1
|
||||||
+ curlen
|
+ curlen
|
||||||
+ strlen (line)
|
+ strlen (line)
|
||||||
+ strlen (chars_to_add));
|
+ strlen (chars_to_add));
|
||||||
sprintf (new_line, "%s%s%s", current->line, chars_to_add, line);
|
sprintf (new_line, "%s%s%s", current->line, chars_to_add, line);
|
||||||
offset = where_history ();
|
offset = where_history ();
|
||||||
old = replace_history_entry (offset, new_line, current->data);
|
old = replace_history_entry (offset, new_line, current->data);
|
||||||
|
|
@ -704,7 +712,7 @@ history_should_ignore (line)
|
||||||
else
|
else
|
||||||
npat = histignore.ignores[i].val;
|
npat = histignore.ignores[i].val;
|
||||||
|
|
||||||
match = fnmatch (npat, line, FNMATCH_EXTFLAG) != FNM_NOMATCH;
|
match = strmatch (npat, line, FNMATCH_EXTFLAG) != FNM_NOMATCH;
|
||||||
|
|
||||||
if (histignore.ignores[i].flags & HIGN_EXPAND)
|
if (histignore.ignores[i].flags & HIGN_EXPAND)
|
||||||
free (npat);
|
free (npat);
|
||||||
|
|
|
||||||
30
bashhist.h
30
bashhist.h
|
|
@ -21,6 +21,8 @@
|
||||||
#if !defined (_BASHHIST_H_)
|
#if !defined (_BASHHIST_H_)
|
||||||
#define _BASHHIST_H_
|
#define _BASHHIST_H_
|
||||||
|
|
||||||
|
#include "stdc.h"
|
||||||
|
|
||||||
extern int remember_on_history;
|
extern int remember_on_history;
|
||||||
extern int history_lines_this_session;
|
extern int history_lines_this_session;
|
||||||
extern int history_lines_in_file;
|
extern int history_lines_in_file;
|
||||||
|
|
@ -33,21 +35,21 @@ extern int hist_last_line_added;
|
||||||
extern int history_expansion_inhibited;
|
extern int history_expansion_inhibited;
|
||||||
# endif /* BANG_HISTORY */
|
# endif /* BANG_HISTORY */
|
||||||
|
|
||||||
extern void bash_initialize_history ();
|
extern void bash_initialize_history __P((void));
|
||||||
extern void bash_history_reinit ();
|
extern void bash_history_reinit __P((int));
|
||||||
extern void bash_history_disable ();
|
extern void bash_history_disable __P((void));
|
||||||
extern void bash_history_enable ();
|
extern void bash_history_enable __P((void));
|
||||||
extern void load_history ();
|
extern void load_history __P((void));
|
||||||
extern void save_history ();
|
extern void save_history __P((void));
|
||||||
extern int maybe_append_history ();
|
extern int maybe_append_history __P((char *));
|
||||||
extern int maybe_save_shell_history ();
|
extern int maybe_save_shell_history __P((void));
|
||||||
extern char *pre_process_line ();
|
extern char *pre_process_line __P((char *, int, int));
|
||||||
extern int history_number ();
|
extern void maybe_add_history __P((char *));
|
||||||
extern void maybe_add_history ();
|
extern void bash_add_history __P((char *));
|
||||||
extern void bash_add_history ();
|
extern int history_number __P((void));
|
||||||
|
|
||||||
extern void setup_history_ignore ();
|
extern void setup_history_ignore __P((char *));
|
||||||
|
|
||||||
extern char *last_history_line ();
|
extern char *last_history_line __P((void));
|
||||||
|
|
||||||
#endif /* _BASHHIST_H_ */
|
#endif /* _BASHHIST_H_ */
|
||||||
|
|
|
||||||
203
bashline.c
203
bashline.c
|
|
@ -29,7 +29,12 @@
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined (HAVE_GRP_H)
|
||||||
|
# include <grp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "chartypes.h"
|
||||||
#include "bashansi.h"
|
#include "bashansi.h"
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
#include "builtins.h"
|
#include "builtins.h"
|
||||||
|
|
@ -59,8 +64,6 @@ extern int bash_brace_completion __P((int, int));
|
||||||
|
|
||||||
/* Forward declarations */
|
/* Forward declarations */
|
||||||
|
|
||||||
extern char *command_word_completion_function __P((const char *, int));
|
|
||||||
|
|
||||||
/* Functions bound to keys in Readline for Bash users. */
|
/* Functions bound to keys in Readline for Bash users. */
|
||||||
static int shell_expand_line __P((int, int));
|
static int shell_expand_line __P((int, int));
|
||||||
static int display_shell_version __P((int, int));
|
static int display_shell_version __P((int, int));
|
||||||
|
|
@ -69,10 +72,8 @@ static int operate_and_get_next __P((int, int));
|
||||||
static int bash_ignore_filenames __P((char **));
|
static int bash_ignore_filenames __P((char **));
|
||||||
static int bash_ignore_everything __P((char **));
|
static int bash_ignore_everything __P((char **));
|
||||||
|
|
||||||
static void cleanup_expansion_error __P((void));
|
|
||||||
static void set_up_new_line __P((char *));
|
|
||||||
|
|
||||||
#if defined (BANG_HISTORY)
|
#if defined (BANG_HISTORY)
|
||||||
|
static char *history_expand_line_internal __P((char *));
|
||||||
static int history_expand_line __P((int, int));
|
static int history_expand_line __P((int, int));
|
||||||
static int tcsh_magic_space __P((int, int));
|
static int tcsh_magic_space __P((int, int));
|
||||||
#endif /* BANG_HISTORY */
|
#endif /* BANG_HISTORY */
|
||||||
|
|
@ -84,37 +85,59 @@ static int history_and_alias_expand_line __P((int, int));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Helper functions for Readline. */
|
/* Helper functions for Readline. */
|
||||||
static int bash_directory_completion_hook ();
|
static int bash_directory_completion_hook __P((char **));
|
||||||
static int filename_completion_ignore ();
|
static int filename_completion_ignore __P((char **));
|
||||||
static int bash_push_line __P((void));
|
static int bash_push_line __P((void));
|
||||||
|
|
||||||
|
static void cleanup_expansion_error __P((void));
|
||||||
|
static void maybe_make_readline_line __P((char *));
|
||||||
|
static void set_up_new_line __P((char *));
|
||||||
|
|
||||||
|
static int check_redir __P((int));
|
||||||
static char **attempt_shell_completion __P((const char *, int, int));
|
static char **attempt_shell_completion __P((const char *, int, int));
|
||||||
static char *variable_completion_function __P((const char *, int));
|
static char *variable_completion_function __P((const char *, int));
|
||||||
static char *hostname_completion_function __P((const char *, int));
|
static char *hostname_completion_function __P((const char *, int));
|
||||||
static char *command_subst_completion_function __P((const char *, int));
|
static char *command_subst_completion_function __P((const char *, int));
|
||||||
|
|
||||||
|
static void build_history_completion_array __P((void));
|
||||||
|
static char *history_completion_generator __P((const char *, int));
|
||||||
static int dynamic_complete_history __P((int, int));
|
static int dynamic_complete_history __P((int, int));
|
||||||
|
|
||||||
static char *glob_complete_word __P((const char *, int));
|
static void initialize_hostname_list __P((void));
|
||||||
static int bash_glob_expand_word __P((int, int));
|
|
||||||
static int bash_glob_list_expansions __P((int, int));
|
|
||||||
|
|
||||||
static void snarf_hosts_from_file __P((char *));
|
|
||||||
static void add_host_name __P((char *));
|
static void add_host_name __P((char *));
|
||||||
|
static void snarf_hosts_from_file __P((char *));
|
||||||
|
static char **hostnames_matching __P((char *));
|
||||||
|
|
||||||
|
static void _ignore_completion_names __P((char **, sh_ignore_func_t *));
|
||||||
|
static int name_is_acceptable __P((const char *));
|
||||||
|
static int test_for_directory __P((const char *));
|
||||||
|
static int return_zero __P((const char *));
|
||||||
|
|
||||||
static char *bash_dequote_filename __P((char *, int));
|
static char *bash_dequote_filename __P((char *, int));
|
||||||
|
static char *quote_word_break_chars __P((char *));
|
||||||
static char *bash_quote_filename __P((char *, int, char *));
|
static char *bash_quote_filename __P((char *, int, char *));
|
||||||
|
|
||||||
|
static int bash_execute_unix_command __P((int, int));
|
||||||
|
static void init_unix_command_map __P((void));
|
||||||
|
static int isolate_sequence __P((char *, int, int, int *));
|
||||||
|
|
||||||
|
static int set_saved_history __P((void));
|
||||||
|
|
||||||
#if defined (ALIAS)
|
#if defined (ALIAS)
|
||||||
static int posix_edit_macros __P((int, int));
|
static int posix_edit_macros __P((int, int));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (PROGRAMMABLE_COMPLETION)
|
#if defined (PROGRAMMABLE_COMPLETION)
|
||||||
|
static int find_cmd_start __P((int));
|
||||||
|
static int find_cmd_end __P((int));
|
||||||
|
static char *find_cmd_name __P((int));
|
||||||
|
static char *prog_complete_return __P((const char *, int));
|
||||||
|
|
||||||
static char **prog_complete_matches;
|
static char **prog_complete_matches;
|
||||||
static int old_rl_completion_append_character;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Variables used here but defined in other files. */
|
/* Variables used here but defined in other files. */
|
||||||
|
extern int current_command_line_count;
|
||||||
extern int posixly_correct, no_symbolic_links;
|
extern int posixly_correct, no_symbolic_links;
|
||||||
extern char *current_prompt_string, *ps1_prompt;
|
extern char *current_prompt_string, *ps1_prompt;
|
||||||
extern STRING_INT_ALIST word_token_alist[];
|
extern STRING_INT_ALIST word_token_alist[];
|
||||||
|
|
@ -144,6 +167,11 @@ static int bash_complete_variable __P((int, int));
|
||||||
static int bash_possible_variable_completions __P((int, int));
|
static int bash_possible_variable_completions __P((int, int));
|
||||||
static int bash_complete_command __P((int, int));
|
static int bash_complete_command __P((int, int));
|
||||||
static int bash_possible_command_completions __P((int, int));
|
static int bash_possible_command_completions __P((int, int));
|
||||||
|
|
||||||
|
static char *glob_complete_word __P((const char *, int));
|
||||||
|
static int bash_glob_completion_internal __P((int));
|
||||||
|
static int bash_glob_expand_word __P((int, int));
|
||||||
|
static int bash_glob_list_expansions __P((int, int));
|
||||||
#endif /* SPECIFIC_COMPLETION_FUNCTIONS */
|
#endif /* SPECIFIC_COMPLETION_FUNCTIONS */
|
||||||
|
|
||||||
#if defined (VI_MODE)
|
#if defined (VI_MODE)
|
||||||
|
|
@ -189,10 +217,14 @@ posix_readline_initialize (on_or_off)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
int
|
||||||
enable_hostname_completion (on_or_off)
|
enable_hostname_completion (on_or_off)
|
||||||
int on_or_off;
|
int on_or_off;
|
||||||
{
|
{
|
||||||
|
int old_value;
|
||||||
|
|
||||||
|
old_value = perform_hostname_completion;
|
||||||
|
|
||||||
if (on_or_off)
|
if (on_or_off)
|
||||||
{
|
{
|
||||||
perform_hostname_completion = 1;
|
perform_hostname_completion = 1;
|
||||||
|
|
@ -205,6 +237,8 @@ enable_hostname_completion (on_or_off)
|
||||||
rl_special_prefixes = "$";
|
rl_special_prefixes = "$";
|
||||||
rl_completer_word_break_characters = bash_nohostname_word_break_characters;
|
rl_completer_word_break_characters = bash_nohostname_word_break_characters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return (old_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called once from parse.y if we are going to use readline. */
|
/* Called once from parse.y if we are going to use readline. */
|
||||||
|
|
@ -457,7 +491,7 @@ static void
|
||||||
add_host_name (name)
|
add_host_name (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
long size;
|
size_t size;
|
||||||
|
|
||||||
if (hostname_list_length + 2 > hostname_list_size)
|
if (hostname_list_length + 2 > hostname_list_size)
|
||||||
{
|
{
|
||||||
|
|
@ -514,7 +548,7 @@ snarf_hosts_from_file (filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Skip internet address if present. */
|
/* Skip internet address if present. */
|
||||||
if (digit (buffer[i]))
|
if (DIGIT (buffer[i]))
|
||||||
for (; buffer[i] && cr_whitespace (buffer[i]) == 0; i++);
|
for (; buffer[i] && cr_whitespace (buffer[i]) == 0; i++);
|
||||||
|
|
||||||
/* Gobble up names. Each name is separated with whitespace. */
|
/* Gobble up names. Each name is separated with whitespace. */
|
||||||
|
|
@ -619,6 +653,7 @@ set_saved_history ()
|
||||||
rl_get_previous_history (history_length - saved_history_line_to_use, 0);
|
rl_get_previous_history (history_length - saved_history_line_to_use, 0);
|
||||||
saved_history_line_to_use = -1;
|
saved_history_line_to_use = -1;
|
||||||
rl_startup_hook = old_rl_startup_hook;
|
rl_startup_hook = old_rl_startup_hook;
|
||||||
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
@ -657,14 +692,17 @@ vi_edit_and_execute_command (count, c)
|
||||||
int count, c;
|
int count, c;
|
||||||
{
|
{
|
||||||
char *command;
|
char *command;
|
||||||
int r;
|
int r, cclc, rrs;
|
||||||
|
|
||||||
|
rrs = rl_readline_state;
|
||||||
|
cclc = current_command_line_count;
|
||||||
|
|
||||||
/* Accept the current line. */
|
/* Accept the current line. */
|
||||||
rl_newline (1, c);
|
rl_newline (1, c);
|
||||||
|
|
||||||
if (rl_explicit_arg)
|
if (rl_explicit_arg)
|
||||||
{
|
{
|
||||||
command = xmalloc (strlen (VI_EDIT_COMMAND) + 8);
|
command = (char *)xmalloc (strlen (VI_EDIT_COMMAND) + 8);
|
||||||
sprintf (command, "%s %d", VI_EDIT_COMMAND, count);
|
sprintf (command, "%s %d", VI_EDIT_COMMAND, count);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -681,7 +719,18 @@ vi_edit_and_execute_command (count, c)
|
||||||
command = savestring (VI_EDIT_COMMAND);
|
command = savestring (VI_EDIT_COMMAND);
|
||||||
}
|
}
|
||||||
r = parse_and_execute (command, "v", SEVAL_NOHIST);
|
r = parse_and_execute (command, "v", SEVAL_NOHIST);
|
||||||
|
|
||||||
|
current_command_line_count = cclc;
|
||||||
|
|
||||||
|
/* Now erase the contents of the current line and undo the effects of the
|
||||||
|
rl_accept_line() above. We don't even want to make the text we just
|
||||||
|
executed available for undoing. */
|
||||||
rl_line_buffer[0] = '\0'; /* XXX */
|
rl_line_buffer[0] = '\0'; /* XXX */
|
||||||
|
rl_point = rl_end = 0;
|
||||||
|
rl_done = 0;
|
||||||
|
rl_readline_state = rrs;
|
||||||
|
|
||||||
|
rl_forced_update_display ();
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
@ -739,6 +788,11 @@ check_redir (ti)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (PROGRAMMABLE_COMPLETION)
|
#if defined (PROGRAMMABLE_COMPLETION)
|
||||||
|
/*
|
||||||
|
* XXX - because of the <= start test, and setting os = s+1, this can
|
||||||
|
* potentially return os > start. This is probably not what we want to
|
||||||
|
* happen, but fix later after 2.05a-release.
|
||||||
|
*/
|
||||||
static int
|
static int
|
||||||
find_cmd_start (start)
|
find_cmd_start (start)
|
||||||
int start;
|
int start;
|
||||||
|
|
@ -782,7 +836,7 @@ find_cmd_name (start)
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
prog_complete_return (text, matchnum)
|
prog_complete_return (text, matchnum)
|
||||||
char *text;
|
const char *text;
|
||||||
int matchnum;
|
int matchnum;
|
||||||
{
|
{
|
||||||
static int ind;
|
static int ind;
|
||||||
|
|
@ -886,7 +940,10 @@ attempt_shell_completion (text, start, end)
|
||||||
s = find_cmd_start (start);
|
s = find_cmd_start (start);
|
||||||
e = find_cmd_end (end);
|
e = find_cmd_end (end);
|
||||||
n = find_cmd_name (s);
|
n = find_cmd_name (s);
|
||||||
prog_complete_matches = programmable_completions (n, text, s, e, &foundcs);
|
if (e > s)
|
||||||
|
prog_complete_matches = programmable_completions (n, text, s, e, &foundcs);
|
||||||
|
else
|
||||||
|
foundcs = 0;
|
||||||
FREE (n);
|
FREE (n);
|
||||||
/* XXX - if we found a COMPSPEC for the command, just return whatever
|
/* XXX - if we found a COMPSPEC for the command, just return whatever
|
||||||
the programmable completion code returns, and disable the default
|
the programmable completion code returns, and disable the default
|
||||||
|
|
@ -895,7 +952,7 @@ attempt_shell_completion (text, start, end)
|
||||||
if (foundcs)
|
if (foundcs)
|
||||||
{
|
{
|
||||||
/* If the user specified that the compspec returns filenames, make
|
/* If the user specified that the compspec returns filenames, make
|
||||||
sure that readline knows it.
|
sure that readline knows it. */
|
||||||
if (foundcs & COPT_FILENAMES)
|
if (foundcs & COPT_FILENAMES)
|
||||||
rl_filename_completion_desired = 1;
|
rl_filename_completion_desired = 1;
|
||||||
/* Turn what the programmable completion code returns into what
|
/* Turn what the programmable completion code returns into what
|
||||||
|
|
@ -953,7 +1010,7 @@ attempt_shell_completion (text, start, end)
|
||||||
|
|
||||||
/* This could be a globbing pattern, so try to expand it using pathname
|
/* This could be a globbing pattern, so try to expand it using pathname
|
||||||
expansion. */
|
expansion. */
|
||||||
if (!matches && glob_pattern_p ((char *)text)) /* XXX fix const later */
|
if (!matches && glob_pattern_p (text))
|
||||||
{
|
{
|
||||||
matches = rl_completion_matches (text, glob_complete_word);
|
matches = rl_completion_matches (text, glob_complete_word);
|
||||||
/* A glob expression that matches more than one filename is problematic.
|
/* A glob expression that matches more than one filename is problematic.
|
||||||
|
|
@ -1002,12 +1059,12 @@ command_word_completion_function (hint_text, state)
|
||||||
aliases, reserved words, functions or builtins. We must check
|
aliases, reserved words, functions or builtins. We must check
|
||||||
whether or not it is unique, and, if so, whether that filename
|
whether or not it is unique, and, if so, whether that filename
|
||||||
is executable. */
|
is executable. */
|
||||||
if (absolute_program ((char *)hint_text))
|
if (absolute_program (hint_text))
|
||||||
{
|
{
|
||||||
/* Perform tilde expansion on what's passed, so we don't end up
|
/* Perform tilde expansion on what's passed, so we don't end up
|
||||||
passing filenames with tildes directly to stat(). */
|
passing filenames with tildes directly to stat(). */
|
||||||
if (*hint_text == '~')
|
if (*hint_text == '~')
|
||||||
hint = bash_tilde_expand ((char *)hint_text);
|
hint = bash_tilde_expand (hint_text);
|
||||||
else
|
else
|
||||||
hint = savestring (hint_text);
|
hint = savestring (hint_text);
|
||||||
hint_len = strlen (hint);
|
hint_len = strlen (hint);
|
||||||
|
|
@ -1146,7 +1203,7 @@ command_word_completion_function (hint_text, state)
|
||||||
if (filename_hint)
|
if (filename_hint)
|
||||||
free (filename_hint);
|
free (filename_hint);
|
||||||
|
|
||||||
filename_hint = xmalloc (2 + strlen (current_path) + hint_len);
|
filename_hint = (char *)xmalloc (2 + strlen (current_path) + hint_len);
|
||||||
sprintf (filename_hint, "%s/%s", current_path, hint);
|
sprintf (filename_hint, "%s/%s", current_path, hint);
|
||||||
|
|
||||||
free (current_path);
|
free (current_path);
|
||||||
|
|
@ -1181,7 +1238,7 @@ command_word_completion_function (hint_text, state)
|
||||||
vl = strlen (val);
|
vl = strlen (val);
|
||||||
tl = strlen (hint_text);
|
tl = strlen (hint_text);
|
||||||
l = vl - hint_len; /* # of chars added */
|
l = vl - hint_len; /* # of chars added */
|
||||||
temp = xmalloc (l + 2 + tl);
|
temp = (char *)xmalloc (l + 2 + tl);
|
||||||
strcpy (temp, hint_text);
|
strcpy (temp, hint_text);
|
||||||
strcpy (temp + tl, val + vl - l);
|
strcpy (temp + tl, val + vl - l);
|
||||||
}
|
}
|
||||||
|
|
@ -1258,7 +1315,7 @@ command_subst_completion_function (text, state)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
value = xmalloc (1 + start_len + strlen (matches[cmd_index]));
|
value = (char *)xmalloc (1 + start_len + strlen (matches[cmd_index]));
|
||||||
|
|
||||||
if (start_len == 1)
|
if (start_len == 1)
|
||||||
value[0] = *orig_start;
|
value[0] = *orig_start;
|
||||||
|
|
@ -1314,7 +1371,9 @@ variable_completion_function (text, state)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *value = xmalloc (4 + strlen (varlist[varlist_index]));
|
char *value;
|
||||||
|
|
||||||
|
value = (char *)xmalloc (4 + strlen (varlist[varlist_index]));
|
||||||
|
|
||||||
if (first_char_loc)
|
if (first_char_loc)
|
||||||
{
|
{
|
||||||
|
|
@ -1355,7 +1414,7 @@ hostname_completion_function (text, state)
|
||||||
if (first_char == '@')
|
if (first_char == '@')
|
||||||
first_char_loc++;
|
first_char_loc++;
|
||||||
|
|
||||||
list = hostnames_matching (&text[first_char_loc]);
|
list = hostnames_matching ((char *)text+first_char_loc);
|
||||||
list_index = 0;
|
list_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1363,7 +1422,7 @@ hostname_completion_function (text, state)
|
||||||
{
|
{
|
||||||
char *t;
|
char *t;
|
||||||
|
|
||||||
t = xmalloc (2 + strlen (list[list_index]));
|
t = (char *)xmalloc (2 + strlen (list[list_index]));
|
||||||
*t = first_char;
|
*t = first_char;
|
||||||
strcpy (t + first_char_loc, list[list_index]);
|
strcpy (t + first_char_loc, list[list_index]);
|
||||||
list_index++;
|
list_index++;
|
||||||
|
|
@ -1373,6 +1432,45 @@ hostname_completion_function (text, state)
|
||||||
return ((char *)NULL);
|
return ((char *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *
|
||||||
|
bash_groupname_completion_function (text, state)
|
||||||
|
const char *text;
|
||||||
|
int state;
|
||||||
|
{
|
||||||
|
#if defined (__WIN32__) || defined (__OPENNT) || !defined (HAVE_GRP_H)
|
||||||
|
return ((char *)NULL);
|
||||||
|
#else
|
||||||
|
static char *gname = (char *)NULL;
|
||||||
|
static struct group *grent;
|
||||||
|
static int gnamelen;
|
||||||
|
char *value;
|
||||||
|
|
||||||
|
if (state == 0)
|
||||||
|
{
|
||||||
|
FREE (gname);
|
||||||
|
gname = savestring (text);
|
||||||
|
gnamelen = strlen (gname);
|
||||||
|
|
||||||
|
setgrent ();
|
||||||
|
}
|
||||||
|
|
||||||
|
while (grent = getgrent ())
|
||||||
|
{
|
||||||
|
if (gnamelen == 0 || (STREQN (gname, grent->gr_name, gnamelen)))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (grent == 0)
|
||||||
|
{
|
||||||
|
endgrent ();
|
||||||
|
return ((char *)NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
value = savestring (grent->gr_name);
|
||||||
|
return (value);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/* Functions to perform history and alias expansions on the current line. */
|
/* Functions to perform history and alias expansions on the current line. */
|
||||||
|
|
||||||
#if defined (BANG_HISTORY)
|
#if defined (BANG_HISTORY)
|
||||||
|
|
@ -1429,8 +1527,10 @@ static void
|
||||||
set_up_new_line (new_line)
|
set_up_new_line (new_line)
|
||||||
char *new_line;
|
char *new_line;
|
||||||
{
|
{
|
||||||
int old_point = rl_point;
|
int old_point, at_end;
|
||||||
int at_end = rl_point == rl_end;
|
|
||||||
|
old_point = rl_point;
|
||||||
|
at_end = rl_point == rl_end;
|
||||||
|
|
||||||
/* If the line was history and alias expanded, then make that
|
/* If the line was history and alias expanded, then make that
|
||||||
be one thing to undo. */
|
be one thing to undo. */
|
||||||
|
|
@ -1594,7 +1694,7 @@ shell_expand_line (count, ignore)
|
||||||
FREE (new_line);
|
FREE (new_line);
|
||||||
if (expanded_string == 0)
|
if (expanded_string == 0)
|
||||||
{
|
{
|
||||||
new_line = xmalloc (1);
|
new_line = (char *)xmalloc (1);
|
||||||
new_line[0] = '\0';
|
new_line[0] = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -1642,13 +1742,13 @@ static struct ignorevar fignore =
|
||||||
(struct ign *)0,
|
(struct ign *)0,
|
||||||
0,
|
0,
|
||||||
(char *)0,
|
(char *)0,
|
||||||
(Function *) 0,
|
(sh_iv_item_func_t *) 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_ignore_completion_names (names, name_func)
|
_ignore_completion_names (names, name_func)
|
||||||
char **names;
|
char **names;
|
||||||
Function *name_func;
|
sh_ignore_func_t *name_func;
|
||||||
{
|
{
|
||||||
char **newnames;
|
char **newnames;
|
||||||
int idx, nidx;
|
int idx, nidx;
|
||||||
|
|
@ -1737,7 +1837,7 @@ _ignore_completion_names (names, name_func)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
name_is_acceptable (name)
|
name_is_acceptable (name)
|
||||||
char *name;
|
const char *name;
|
||||||
{
|
{
|
||||||
struct ign *p;
|
struct ign *p;
|
||||||
int nlen;
|
int nlen;
|
||||||
|
|
@ -1782,7 +1882,7 @@ filename_completion_ignore (names)
|
||||||
/* Return 1 if NAME is a directory. */
|
/* Return 1 if NAME is a directory. */
|
||||||
static int
|
static int
|
||||||
test_for_directory (name)
|
test_for_directory (name)
|
||||||
char *name;
|
const char *name;
|
||||||
{
|
{
|
||||||
struct stat finfo;
|
struct stat finfo;
|
||||||
char *fn;
|
char *fn;
|
||||||
|
|
@ -1808,7 +1908,7 @@ bash_ignore_filenames (names)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
return_zero (name)
|
return_zero (name)
|
||||||
char *name;
|
const char *name;
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -1866,7 +1966,7 @@ bash_directory_completion_hook (dirname)
|
||||||
{
|
{
|
||||||
free (new_dirname);
|
free (new_dirname);
|
||||||
free (local_dirname);
|
free (local_dirname);
|
||||||
*dirname = xmalloc (1);
|
*dirname = (char *)xmalloc (1);
|
||||||
**dirname = '\0';
|
**dirname = '\0';
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -1891,7 +1991,7 @@ bash_directory_completion_hook (dirname)
|
||||||
if (temp1[len1 - 1] == '/')
|
if (temp1[len1 - 1] == '/')
|
||||||
{
|
{
|
||||||
len2 = strlen (temp2);
|
len2 = strlen (temp2);
|
||||||
temp2 = xrealloc (temp2, len2 + 2);
|
temp2 = (char *)xrealloc (temp2, len2 + 2);
|
||||||
temp2[len2] = '/';
|
temp2[len2] = '/';
|
||||||
temp2[len2 + 1] = '\0';
|
temp2[len2 + 1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
@ -1942,7 +2042,7 @@ build_history_completion_array ()
|
||||||
if (harry_len + 2 > harry_size)
|
if (harry_len + 2 > harry_size)
|
||||||
{
|
{
|
||||||
harry_size += 10;
|
harry_size += 10;
|
||||||
history_completion_array = (char **) xrealloc
|
history_completion_array = (char **)xrealloc
|
||||||
(history_completion_array, harry_size * sizeof (char *));
|
(history_completion_array, harry_size * sizeof (char *));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1953,17 +2053,17 @@ build_history_completion_array ()
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sort the complete list of tokens. */
|
/* Sort the complete list of tokens. */
|
||||||
qsort (history_completion_array, harry_len, sizeof (char *), (Function *)qsort_string_compare);
|
qsort (history_completion_array, harry_len, sizeof (char *), (QSFUNC *)qsort_string_compare);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
history_completion_generator (hint_text, state)
|
history_completion_generator (hint_text, state)
|
||||||
char *hint_text;
|
const char *hint_text;
|
||||||
int state;
|
int state;
|
||||||
{
|
{
|
||||||
static int local_index, len;
|
static int local_index, len;
|
||||||
static char *text;
|
static const char *text;
|
||||||
|
|
||||||
/* If this is the first call to the generator, then initialize the
|
/* If this is the first call to the generator, then initialize the
|
||||||
list of strings to complete over. */
|
list of strings to complete over. */
|
||||||
|
|
@ -1987,6 +2087,8 @@ static int
|
||||||
dynamic_complete_history (count, key)
|
dynamic_complete_history (count, key)
|
||||||
int count, key;
|
int count, key;
|
||||||
{
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
rl_compentry_func_t *orig_func;
|
rl_compentry_func_t *orig_func;
|
||||||
rl_completion_func_t *orig_attempt_func;
|
rl_completion_func_t *orig_attempt_func;
|
||||||
|
|
||||||
|
|
@ -1996,12 +2098,13 @@ dynamic_complete_history (count, key)
|
||||||
rl_attempted_completion_function = (rl_completion_func_t *)NULL;
|
rl_attempted_completion_function = (rl_completion_func_t *)NULL;
|
||||||
|
|
||||||
if (rl_last_func == dynamic_complete_history)
|
if (rl_last_func == dynamic_complete_history)
|
||||||
rl_complete_internal ('?');
|
r = rl_complete_internal ('?');
|
||||||
else
|
else
|
||||||
rl_complete_internal (TAB);
|
r = rl_complete_internal (TAB);
|
||||||
|
|
||||||
rl_completion_entry_function = orig_func;
|
rl_completion_entry_function = orig_func;
|
||||||
rl_attempted_completion_function = orig_attempt_func;
|
rl_attempted_completion_function = orig_attempt_func;
|
||||||
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (SPECIFIC_COMPLETION_FUNCTIONS)
|
#if defined (SPECIFIC_COMPLETION_FUNCTIONS)
|
||||||
|
|
@ -2215,7 +2318,7 @@ bash_dequote_filename (text, quote_char)
|
||||||
int l, quoted;
|
int l, quoted;
|
||||||
|
|
||||||
l = strlen (text);
|
l = strlen (text);
|
||||||
ret = xmalloc (l + 1);
|
ret = (char *)xmalloc (l + 1);
|
||||||
for (quoted = quote_char, p = text, r = ret; p && *p; p++)
|
for (quoted = quote_char, p = text, r = ret; p && *p; p++)
|
||||||
{
|
{
|
||||||
/* Allow backslash-quoted characters to pass through unscathed. */
|
/* Allow backslash-quoted characters to pass through unscathed. */
|
||||||
|
|
@ -2255,7 +2358,7 @@ quote_word_break_chars (text)
|
||||||
int l;
|
int l;
|
||||||
|
|
||||||
l = strlen (text);
|
l = strlen (text);
|
||||||
ret = xmalloc ((2 * l) + 1);
|
ret = (char *)xmalloc ((2 * l) + 1);
|
||||||
for (s = text, r = ret; *s; s++)
|
for (s = text, r = ret; *s; s++)
|
||||||
{
|
{
|
||||||
/* Pass backslash-quoted characters through, including the backslash. */
|
/* Pass backslash-quoted characters through, including the backslash. */
|
||||||
|
|
@ -2358,7 +2461,7 @@ bash_quote_filename (s, rtype, qcp)
|
||||||
/* Leave the opening quote intact. The readline completion code takes
|
/* Leave the opening quote intact. The readline completion code takes
|
||||||
care of avoiding doubled opening quotes. */
|
care of avoiding doubled opening quotes. */
|
||||||
rlen = strlen (rtext);
|
rlen = strlen (rtext);
|
||||||
ret = xmalloc (rlen + 1);
|
ret = (char *)xmalloc (rlen + 1);
|
||||||
strcpy (ret, rtext);
|
strcpy (ret, rtext);
|
||||||
|
|
||||||
/* If there are multiple matches, cut off the closing quote. */
|
/* If there are multiple matches, cut off the closing quote. */
|
||||||
|
|
@ -2484,7 +2587,7 @@ bind_keyseq_to_unix_command (line)
|
||||||
{
|
{
|
||||||
Keymap kmap;
|
Keymap kmap;
|
||||||
char *kseq, *value;
|
char *kseq, *value;
|
||||||
int i, kstart, len, ok;
|
int i, kstart;
|
||||||
|
|
||||||
if (cmd_xmap == 0)
|
if (cmd_xmap == 0)
|
||||||
init_unix_command_map ();
|
init_unix_command_map ();
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
extern int bash_readline_initialized;
|
extern int bash_readline_initialized;
|
||||||
|
|
||||||
extern void posix_readline_initialize __P((int));
|
extern void posix_readline_initialize __P((int));
|
||||||
|
extern int enable_hostname_completion __P((int));
|
||||||
extern void initialize_readline __P((void));
|
extern void initialize_readline __P((void));
|
||||||
extern void bashline_reinitialize __P((void));
|
extern void bashline_reinitialize __P((void));
|
||||||
extern int bash_re_edit __P((char *));
|
extern int bash_re_edit __P((char *));
|
||||||
|
|
@ -34,6 +35,7 @@ extern int bind_keyseq_to_unix_command __P((char *));
|
||||||
|
|
||||||
/* Used by programmable completion code. */
|
/* Used by programmable completion code. */
|
||||||
extern char *command_word_completion_function __P((const char *, int));
|
extern char *command_word_completion_function __P((const char *, int));
|
||||||
|
extern char *bash_groupname_completion_function __P((const char *, int));
|
||||||
|
|
||||||
extern char **get_hostname_list __P((void));
|
extern char **get_hostname_list __P((void));
|
||||||
extern void clear_hostname_list __P((void));
|
extern void clear_hostname_list __P((void));
|
||||||
|
|
|
||||||
12
bracecomp.c
12
bracecomp.c
|
|
@ -39,8 +39,6 @@
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
|
|
||||||
extern char *sh_backslash_quote ();
|
|
||||||
|
|
||||||
/* Find greatest common prefix of two strings. */
|
/* Find greatest common prefix of two strings. */
|
||||||
static int
|
static int
|
||||||
string_gcd (s1, s2)
|
string_gcd (s1, s2)
|
||||||
|
|
@ -78,7 +76,7 @@ really_munge_braces (array, real_start, real_end, gcd_zero)
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = xmalloc (result_size = 16);
|
result = (char *)xmalloc (result_size = 16);
|
||||||
*result = '\0';
|
*result = '\0';
|
||||||
|
|
||||||
for (start = real_start; start < real_end; start = end + 1)
|
for (start = real_start; start < real_end; start = end + 1)
|
||||||
|
|
@ -102,7 +100,7 @@ really_munge_braces (array, real_start, real_end, gcd_zero)
|
||||||
/* In this case, add in a leading '{', because we are at
|
/* In this case, add in a leading '{', because we are at
|
||||||
top level, and there isn't a consistent prefix. */
|
top level, and there isn't a consistent prefix. */
|
||||||
result_size += 1;
|
result_size += 1;
|
||||||
result = xrealloc (result, result_size);
|
result = (char *)xrealloc (result, result_size);
|
||||||
result[0] = '{'; result[1] = '\0';
|
result[0] = '{'; result[1] = '\0';
|
||||||
flag++;
|
flag++;
|
||||||
}
|
}
|
||||||
|
|
@ -121,13 +119,13 @@ really_munge_braces (array, real_start, real_end, gcd_zero)
|
||||||
/* If there is more than one element in the subarray,
|
/* If there is more than one element in the subarray,
|
||||||
insert the (quoted) prefix and an opening brace. */
|
insert the (quoted) prefix and an opening brace. */
|
||||||
tlen = gcd - gcd_zero;
|
tlen = gcd - gcd_zero;
|
||||||
x = xmalloc (tlen + 1);
|
x = (char *)xmalloc (tlen + 1);
|
||||||
strncpy (x, array[start] + gcd_zero, tlen);
|
strncpy (x, array[start] + gcd_zero, tlen);
|
||||||
x[tlen] = '\0';
|
x[tlen] = '\0';
|
||||||
subterm = sh_backslash_quote (x);
|
subterm = sh_backslash_quote (x);
|
||||||
free (x);
|
free (x);
|
||||||
result_size += strlen (subterm) + 1;
|
result_size += strlen (subterm) + 1;
|
||||||
result = xrealloc (result, result_size);
|
result = (char *)xrealloc (result, result_size);
|
||||||
strcat (result, subterm);
|
strcat (result, subterm);
|
||||||
free (subterm);
|
free (subterm);
|
||||||
strcat (result, "{");
|
strcat (result, "{");
|
||||||
|
|
@ -136,7 +134,7 @@ really_munge_braces (array, real_start, real_end, gcd_zero)
|
||||||
}
|
}
|
||||||
|
|
||||||
result_size += strlen (subterm) + 1;
|
result_size += strlen (subterm) + 1;
|
||||||
result = xrealloc (result, result_size);
|
result = (char *)xrealloc (result, result_size);
|
||||||
strcat (result, subterm);
|
strcat (result, subterm);
|
||||||
strcat (result, ",");
|
strcat (result, ",");
|
||||||
free (subterm);
|
free (subterm);
|
||||||
|
|
|
||||||
13
braces.c
13
braces.c
|
|
@ -40,10 +40,6 @@
|
||||||
#include "general.h"
|
#include "general.h"
|
||||||
#define brace_whitespace(c) (!(c) || (c) == ' ' || (c) == '\t' || (c) == '\n')
|
#define brace_whitespace(c) (!(c) || (c) == ' ' || (c) == '\t' || (c) == '\n')
|
||||||
|
|
||||||
#if defined (SHELL)
|
|
||||||
extern char *extract_command_subst ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Basic idea:
|
/* Basic idea:
|
||||||
|
|
||||||
Segregate the text into 3 sections: preamble (stuff before an open brace),
|
Segregate the text into 3 sections: preamble (stuff before an open brace),
|
||||||
|
|
@ -56,8 +52,15 @@ extern char *extract_command_subst ();
|
||||||
/* The character which is used to separate arguments. */
|
/* The character which is used to separate arguments. */
|
||||||
int brace_arg_separator = ',';
|
int brace_arg_separator = ',';
|
||||||
|
|
||||||
|
#if defined (__P)
|
||||||
|
static int brace_gobbler __P((char *, int *, int));
|
||||||
|
static char **expand_amble __P((char *));
|
||||||
|
static char **array_concat __P((char **, char **));
|
||||||
|
#else
|
||||||
static int brace_gobbler ();
|
static int brace_gobbler ();
|
||||||
static char **expand_amble (), **array_concat ();
|
static char **expand_amble ();
|
||||||
|
static char **array_concat ();
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Return an array of strings; the brace expansion of TEXT. */
|
/* Return an array of strings; the brace expansion of TEXT. */
|
||||||
char **
|
char **
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
/* The thing that we build the array of builtins out of. */
|
/* The thing that we build the array of builtins out of. */
|
||||||
struct builtin {
|
struct builtin {
|
||||||
char *name; /* The name that the user types. */
|
char *name; /* The name that the user types. */
|
||||||
Function *function; /* The address of the invoked function. */
|
sh_builtin_func_t *function; /* The address of the invoked function. */
|
||||||
int flags; /* One of the #defines above. */
|
int flags; /* One of the #defines above. */
|
||||||
char **long_doc; /* NULL terminated array of strings. */
|
char **long_doc; /* NULL terminated array of strings. */
|
||||||
char *short_doc; /* Short version of documenation. */
|
char *short_doc; /* Short version of documenation. */
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ BUILD_DIR = @BUILD_DIR@
|
||||||
|
|
||||||
PROFILE_FLAGS = @PROFILE_FLAGS@
|
PROFILE_FLAGS = @PROFILE_FLAGS@
|
||||||
CFLAGS = @CFLAGS@
|
CFLAGS = @CFLAGS@
|
||||||
LOCAL_CFLAGS = @LOCAL_CFLAGS@
|
LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG}
|
||||||
CPPFLAGS = @CPPFLAGS@
|
CPPFLAGS = @CPPFLAGS@
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
LOCAL_DEFS = @LOCAL_DEFS@
|
LOCAL_DEFS = @LOCAL_DEFS@
|
||||||
|
|
@ -46,10 +46,18 @@ LIBS = @LIBS@
|
||||||
|
|
||||||
BASHINCDIR = ${topdir}/include
|
BASHINCDIR = ${topdir}/include
|
||||||
|
|
||||||
|
RL_INCLUDEDIR = @RL_INCLUDEDIR@
|
||||||
|
|
||||||
INCLUDES = -I. -I.. @RL_INCLUDE@ -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib -I$(srcdir)
|
INCLUDES = -I. -I.. @RL_INCLUDE@ -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib -I$(srcdir)
|
||||||
|
|
||||||
CCFLAGS = ${PROFILE_FLAGS} $(DEFS) $(LOCAL_DEFS) $(SYSTEM_FLAGS) $(CPPFLAGS) \
|
CCFLAGS_FOR_BUILD = ${PROFILE_FLAGS} $(DEFS) $(LOCAL_DEFS) $(SYSTEM_FLAGS) \
|
||||||
${INCLUDES} $(LOCAL_CFLAGS) $(CFLAGS)
|
$(CPPFLAGS) ${INCLUDES} $(LOCAL_CFLAGS)
|
||||||
|
|
||||||
|
CCFLAGS = $(CCFLAGS_FOR_BUILD) $(CFLAGS)
|
||||||
|
|
||||||
|
GCC_LINT_FLAGS = -Wall -Wshadow -Wpointer-arith -Wcast-qual \
|
||||||
|
-Wcast-align -Wstrict-prototypes -Wconversion \
|
||||||
|
-Wmissing-prototypes -Wtraditional -Wredundant-decls -pedantic
|
||||||
|
|
||||||
MKBUILTINS = mkbuiltins$(EXEEXT)
|
MKBUILTINS = mkbuiltins$(EXEEXT)
|
||||||
DIRECTDEFINE = -D $(srcdir)
|
DIRECTDEFINE = -D $(srcdir)
|
||||||
|
|
@ -131,7 +139,7 @@ builtext.h builtins.c: $(MKBUILTINS) $(DEFSRC)
|
||||||
mkbuiltins.o: ../config.h
|
mkbuiltins.o: ../config.h
|
||||||
mkbuiltins.o: mkbuiltins.c
|
mkbuiltins.o: mkbuiltins.c
|
||||||
$(RM) $@
|
$(RM) $@
|
||||||
$(CC_FOR_BUILD) -c $(CCFLAGS) $<
|
$(CC_FOR_BUILD) -c $(CCFLAGS_FOR_BUILD) $<
|
||||||
|
|
||||||
mkbuiltins$(EXEEXT): mkbuiltins.o
|
mkbuiltins$(EXEEXT): mkbuiltins.o
|
||||||
$(CC_FOR_BUILD) $(PROFILE_FLAGS) $(LDFLAGS) -o $(MKBUILTINS) mkbuiltins.o $(LIBS)
|
$(CC_FOR_BUILD) $(PROFILE_FLAGS) $(LDFLAGS) -o $(MKBUILTINS) mkbuiltins.o $(LIBS)
|
||||||
|
|
@ -151,7 +159,7 @@ pipesize.h: psize.aux
|
||||||
$(SHELL) $(srcdir)/psize.sh > $@
|
$(SHELL) $(srcdir)/psize.sh > $@
|
||||||
|
|
||||||
psize.aux: psize.c
|
psize.aux: psize.c
|
||||||
$(CC_FOR_BUILD) $(CCFLAGS) -o $@ $(srcdir)/psize.c
|
$(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) -o $@ $(srcdir)/psize.c
|
||||||
|
|
||||||
documentation: builtins.texi
|
documentation: builtins.texi
|
||||||
|
|
||||||
|
|
@ -214,26 +222,28 @@ complete.o: complete.def
|
||||||
# C files
|
# C files
|
||||||
bashgetopt.o: ../config.h $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
bashgetopt.o: ../config.h $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
||||||
bashgetopt.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/bashjmp.h
|
bashgetopt.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/bashjmp.h
|
||||||
bashgetopt.o: $(topdir)/command.h $(topdir)/general.h $(topdir)/error.h
|
bashgetopt.o: $(topdir)/command.h $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/error.h
|
||||||
bashgetopt.o: $(topdir)/variables.h $(topdir)/quit.h $(BASHINCDIR)/maxpath.h
|
bashgetopt.o: $(topdir)/variables.h $(topdir)/conftypes.h $(topdir)/quit.h $(BASHINCDIR)/maxpath.h
|
||||||
bashgetopt.o: $(topdir)/unwind_prot.h $(topdir)/dispose_cmd.h
|
bashgetopt.o: $(topdir)/unwind_prot.h $(topdir)/dispose_cmd.h
|
||||||
bashgetopt.o: $(topdir)/make_cmd.h $(topdir)/subst.h $(topdir)/sig.h
|
bashgetopt.o: $(topdir)/make_cmd.h $(topdir)/subst.h $(topdir)/sig.h
|
||||||
bashgetopt.o: $(topdir)/pathnames.h $(topdir)/externs.h $(srcdir)/common.h
|
bashgetopt.o: $(topdir)/pathnames.h $(topdir)/externs.h $(srcdir)/common.h
|
||||||
|
bashgetopt.o: $(BASHINCDIR)/chartypes.h
|
||||||
common.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
common.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
||||||
common.o: $(topdir)/shell.h $(topdir)/syntax.h ../config.h $(topdir)/bashjmp.h $(BASHINCDIR)/posixjmp.h
|
common.o: $(topdir)/shell.h $(topdir)/syntax.h ../config.h $(topdir)/bashjmp.h $(BASHINCDIR)/posixjmp.h
|
||||||
common.o: $(topdir)/sig.h $(topdir)/command.h
|
common.o: $(topdir)/sig.h $(topdir)/command.h
|
||||||
common.o: $(topdir)/general.h $(BASHINCDIR)/stdc.h $(BASHINCDIR)/memalloc.h
|
common.o: $(topdir)/general.h $(topdir)/xmalloc.h $(BASHINCDIR)/stdc.h $(BASHINCDIR)/memalloc.h
|
||||||
common.o: $(topdir)/variables.h $(topdir)/input.h
|
common.o: $(topdir)/variables.h $(topdir)/conftypes.h $(topdir)/input.h
|
||||||
common.o: $(topdir)/siglist.h $(topdir)/bashhist.h $(topdir)/quit.h
|
common.o: $(topdir)/siglist.h $(topdir)/bashhist.h $(topdir)/quit.h
|
||||||
common.o: $(topdir)/unwind_prot.h $(BASHINCDIR)/maxpath.h $(topdir)/jobs.h
|
common.o: $(topdir)/unwind_prot.h $(BASHINCDIR)/maxpath.h $(topdir)/jobs.h
|
||||||
common.o: $(topdir)/builtins.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
common.o: $(topdir)/builtins.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
common.o: $(topdir)/subst.h $(topdir)/execute_cmd.h $(topdir)/error.h
|
common.o: $(topdir)/subst.h $(topdir)/execute_cmd.h $(topdir)/error.h
|
||||||
common.o: $(topdir)/externs.h $(topdir)/pathnames.h ./builtext.h
|
common.o: $(topdir)/externs.h $(topdir)/pathnames.h ./builtext.h
|
||||||
|
common.o: $(BASHINCDIR)/chartypes.h
|
||||||
evalfile.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h ${BASHINCDIR}/filecntl.h
|
evalfile.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h ${BASHINCDIR}/filecntl.h
|
||||||
evalfile.o: $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
evalfile.o: $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
||||||
evalfile.o: $(topdir)/shell.h $(topdir)/syntax.h ../config.h $(topdir)/bashjmp.h
|
evalfile.o: $(topdir)/shell.h $(topdir)/syntax.h ../config.h $(topdir)/bashjmp.h
|
||||||
evalfile.o: $(topdir)/command.h $(topdir)/general.h $(topdir)/error.h
|
evalfile.o: $(topdir)/command.h $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/error.h
|
||||||
evalfile.o: $(topdir)/variables.h $(topdir)/quit.h $(BASHINCDIR)/maxpath.h
|
evalfile.o: $(topdir)/variables.h $(topdir)/conftypes.h $(topdir)/quit.h $(BASHINCDIR)/maxpath.h
|
||||||
evalfile.o: $(topdir)/unwind_prot.h $(topdir)/dispose_cmd.h
|
evalfile.o: $(topdir)/unwind_prot.h $(topdir)/dispose_cmd.h
|
||||||
evalfile.o: $(topdir)/make_cmd.h $(topdir)/subst.h $(topdir)/sig.h
|
evalfile.o: $(topdir)/make_cmd.h $(topdir)/subst.h $(topdir)/sig.h
|
||||||
evalfile.o: $(topdir)/pathnames.h $(topdir)/externs.h
|
evalfile.o: $(topdir)/pathnames.h $(topdir)/externs.h
|
||||||
|
|
@ -243,16 +253,17 @@ evalfile.o: $(topdir)/bashhist.h $(srcdir)/common.h
|
||||||
evalstring.o: ../config.h $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
evalstring.o: ../config.h $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
||||||
evalstring.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/bashjmp.h $(BASHINCDIR)/posixjmp.h
|
evalstring.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/bashjmp.h $(BASHINCDIR)/posixjmp.h
|
||||||
evalstring.o: $(topdir)/sig.h $(topdir)/command.h $(topdir)/siglist.h
|
evalstring.o: $(topdir)/sig.h $(topdir)/command.h $(topdir)/siglist.h
|
||||||
evalstring.o: $(BASHINCDIR)/memalloc.h $(topdir)/variables.h $(topdir)/input.h
|
evalstring.o: $(BASHINCDIR)/memalloc.h $(topdir)/variables.h $(topdir)/conftypes.h $(topdir)/input.h
|
||||||
evalstring.o: $(topdir)/quit.h $(topdir)/unwind_prot.h
|
evalstring.o: $(topdir)/quit.h $(topdir)/unwind_prot.h
|
||||||
evalstring.o: $(BASHINCDIR)/maxpath.h $(topdir)/jobs.h $(topdir)/builtins.h
|
evalstring.o: $(BASHINCDIR)/maxpath.h $(topdir)/jobs.h $(topdir)/builtins.h
|
||||||
evalstring.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
evalstring.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
evalstring.o: $(topdir)/externs.h $(topdir)/jobs.h $(topdir)/builtins.h
|
evalstring.o: $(topdir)/externs.h $(topdir)/jobs.h $(topdir)/builtins.h
|
||||||
evalstring.o: $(topdir)/flags.h $(topdir)/input.h $(topdir)/execute_cmd.h
|
evalstring.o: $(topdir)/flags.h $(topdir)/input.h $(topdir)/execute_cmd.h
|
||||||
evalstring.o: $(topdir)/bashhist.h $(srcdir)/common.h
|
evalstring.o: $(topdir)/bashhist.h $(srcdir)/common.h
|
||||||
|
evalstring.o: $(topdir)/trap.h $(topdir)/redir.h
|
||||||
getopt.o: ../config.h $(BASHINCDIR)/memalloc.h
|
getopt.o: ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
getopt.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/bashjmp.h $(topdir)/command.h
|
getopt.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/bashjmp.h $(topdir)/command.h
|
||||||
getopt.o: $(topdir)/general.h $(topdir)/error.h $(topdir)/variables.h
|
getopt.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/error.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
getopt.o: $(topdir)/quit.h $(BASHINCDIR)/maxpath.h $(topdir)/unwind_prot.h
|
getopt.o: $(topdir)/quit.h $(BASHINCDIR)/maxpath.h $(topdir)/unwind_prot.h
|
||||||
getopt.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
getopt.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
getopt.o: $(topdir)/sig.h $(topdir)/pathnames.h $(topdir)/externs.h
|
getopt.o: $(topdir)/sig.h $(topdir)/pathnames.h $(topdir)/externs.h
|
||||||
|
|
@ -263,224 +274,232 @@ mkbuiltins.o: $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
||||||
|
|
||||||
# def files
|
# def files
|
||||||
alias.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
alias.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
alias.o: $(topdir)/error.h $(topdir)/general.h $(BASHINCDIR)/maxpath.h
|
alias.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h $(BASHINCDIR)/maxpath.h
|
||||||
alias.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
alias.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
alias.o: $(topdir)/subst.h $(topdir)/externs.h $(srcdir)/common.h
|
alias.o: $(topdir)/subst.h $(topdir)/externs.h $(srcdir)/common.h
|
||||||
alias.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
alias.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
bind.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
bind.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
||||||
bind.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
bind.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
bind.o: $(topdir)/subst.h $(topdir)/externs.h $(srcdir)/bashgetopt.h
|
bind.o: $(topdir)/subst.h $(topdir)/externs.h $(srcdir)/bashgetopt.h
|
||||||
bind.o: $(topdir)/general.h $(BASHINCDIR)/maxpath.h $(topdir)/bashline.h
|
bind.o: $(topdir)/general.h $(topdir)/xmalloc.h $(BASHINCDIR)/maxpath.h $(topdir)/bashline.h
|
||||||
bind.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
bind.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
break.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
break.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
break.o: $(topdir)/error.h $(topdir)/general.h
|
break.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
break.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
break.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
break.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
break.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
break.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
break.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
builtin.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
builtin.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
builtin.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/externs.h
|
builtin.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/externs.h
|
||||||
builtin.o: $(topdir)/quit.h $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
builtin.o: $(topdir)/quit.h $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
||||||
builtin.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
builtin.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
builtin.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
builtin.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
cd.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
cd.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
||||||
cd.o: $(topdir)/general.h $(topdir)/quit.h $(topdir)/dispose_cmd.h
|
cd.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/quit.h $(topdir)/dispose_cmd.h
|
||||||
cd.o: $(topdir)/make_cmd.h $(topdir)/subst.h $(topdir)/externs.h
|
cd.o: $(topdir)/make_cmd.h $(topdir)/subst.h $(topdir)/externs.h
|
||||||
cd.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
cd.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
cd.o: $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
cd.o: $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
||||||
command.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
command.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
command.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/externs.h
|
command.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/externs.h
|
||||||
command.o: $(topdir)/quit.h $(srcdir)/bashgetopt.h $(BASHINCDIR)/maxpath.h
|
command.o: $(topdir)/quit.h $(srcdir)/bashgetopt.h $(BASHINCDIR)/maxpath.h
|
||||||
command.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
command.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
command.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
command.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
declare.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
declare.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
declare.o: $(topdir)/error.h $(topdir)/general.h
|
declare.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
declare.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
declare.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
declare.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
declare.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
declare.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
declare.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
|
declare.o: $(topdir)/arrayfunc.h
|
||||||
echo.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
echo.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
||||||
echo.o: $(topdir)/general.h $(topdir)/subst.h $(topdir)/externs.h
|
echo.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/subst.h $(topdir)/externs.h
|
||||||
echo.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
echo.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
echo.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
echo.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
echo.o: $(BASHINCDIR)/maxpath.h
|
echo.o: $(BASHINCDIR)/maxpath.h
|
||||||
enable.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
enable.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
enable.o: $(topdir)/error.h $(topdir)/general.h
|
enable.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
enable.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
enable.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
enable.o: $(topdir)/subst.h $(topdir)/externs.h
|
enable.o: $(topdir)/subst.h $(topdir)/externs.h
|
||||||
enable.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
enable.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
enable.o: $(BASHINCDIR)/maxpath.h
|
enable.o: $(BASHINCDIR)/maxpath.h
|
||||||
enable.o: $(topdir)/pcomplete.h
|
enable.o: $(topdir)/pcomplete.h
|
||||||
eval.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
eval.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
eval.o: $(topdir)/error.h $(topdir)/general.h
|
eval.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
eval.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
eval.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
eval.o: $(topdir)/subst.h $(topdir)/externs.h
|
eval.o: $(topdir)/subst.h $(topdir)/externs.h
|
||||||
eval.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
eval.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
eval.o: $(BASHINCDIR)/maxpath.h
|
eval.o: $(BASHINCDIR)/maxpath.h
|
||||||
exec.o: $(topdir)/bashtypes.h
|
exec.o: $(topdir)/bashtypes.h
|
||||||
exec.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
exec.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
exec.o: $(topdir)/error.h $(topdir)/general.h
|
exec.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
exec.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
exec.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
exec.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/flags.h
|
exec.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/flags.h
|
||||||
exec.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
exec.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
exec.o: $(srcdir)/common.h $(topdir)/execute_cmd.h $(BASHINCDIR)/maxpath.h
|
exec.o: $(srcdir)/common.h $(topdir)/execute_cmd.h $(BASHINCDIR)/maxpath.h
|
||||||
exec.o: $(topdir)/findcmd.h
|
exec.o: $(topdir)/findcmd.h
|
||||||
exit.o: $(topdir)/bashtypes.h
|
exit.o: $(topdir)/bashtypes.h
|
||||||
exit.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
exit.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
exit.o: $(topdir)/error.h $(topdir)/general.h
|
exit.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
exit.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
exit.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
exit.o: $(topdir)/subst.h $(topdir)/externs.h
|
exit.o: $(topdir)/subst.h $(topdir)/externs.h
|
||||||
exit.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
exit.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
exit.o: $(BASHINCDIR)/maxpath.h ./builtext.h
|
exit.o: $(BASHINCDIR)/maxpath.h ./builtext.h
|
||||||
fc.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h
|
fc.o: $(topdir)/bashtypes.h $(BASHINCDIR)/posixstat.h
|
||||||
fc.o: $(topdir)/builtins.h $(topdir)/command.h $(srcdir)/bashgetopt.h
|
fc.o: $(topdir)/builtins.h $(topdir)/command.h $(srcdir)/bashgetopt.h
|
||||||
fc.o: $(topdir)/bashhist.h
|
fc.o: $(topdir)/bashhist.h
|
||||||
fc.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
fc.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
||||||
fc.o: $(topdir)/general.h $(BASHINCDIR)/maxpath.h
|
fc.o: $(topdir)/general.h $(topdir)/xmalloc.h $(BASHINCDIR)/maxpath.h
|
||||||
fc.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
fc.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
fc.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/shell.h $(topdir)/syntax.h
|
fc.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/shell.h $(topdir)/syntax.h
|
||||||
fc.o: $(topdir)/flags.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
fc.o: $(topdir)/flags.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
fc.o: $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h
|
fc.o: $(topdir)/bashansi.h $(BASHINCDIR)/ansi_stdlib.h $(BASHINCDIR)/chartypes.h
|
||||||
fg_bg.o: $(topdir)/bashtypes.h
|
fg_bg.o: $(topdir)/bashtypes.h
|
||||||
fg_bg.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
fg_bg.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
fg_bg.o: $(topdir)/error.h $(topdir)/general.h
|
fg_bg.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
fg_bg.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
fg_bg.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
fg_bg.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
fg_bg.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
fg_bg.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
fg_bg.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
getopts.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
getopts.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
getopts.o: $(topdir)/error.h $(topdir)/general.h
|
getopts.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
getopts.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
getopts.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
getopts.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
getopts.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
getopts.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
getopts.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
hash.o: $(topdir)/builtins.h $(topdir)/command.h $(topdir)/quit.h
|
hash.o: $(topdir)/builtins.h $(topdir)/command.h $(topdir)/quit.h
|
||||||
hash.o: $(topdir)/findcmd.h $(topdir)/hashlib.h
|
hash.o: $(topdir)/findcmd.h $(topdir)/hashlib.h
|
||||||
hash.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
hash.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
hash.o: $(topdir)/error.h $(topdir)/general.h
|
hash.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
hash.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
hash.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
hash.o: $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
hash.o: $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
||||||
help.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
help.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
help.o: $(topdir)/error.h $(topdir)/general.h
|
help.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
help.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
help.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
help.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
help.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
help.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
help.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
|
help.o: ${srcdir}/common.h ../version.h
|
||||||
history.o: $(topdir)/bashtypes.h
|
history.o: $(topdir)/bashtypes.h
|
||||||
history.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
history.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
history.o: $(topdir)/error.h $(topdir)/general.h
|
history.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
history.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
history.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
history.o: $(topdir)/subst.h $(topdir)/externs.h
|
history.o: $(topdir)/subst.h $(topdir)/externs.h
|
||||||
history.o: ${BASHINCDIR}/filecntl.h $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h
|
history.o: ${BASHINCDIR}/filecntl.h $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h
|
||||||
history.o: $(topdir)/variables.h $(topdir)/bashhist.h $(BASHINCDIR)/maxpath.h
|
history.o: $(topdir)/variables.h $(topdir)/conftypes.h $(topdir)/bashhist.h $(BASHINCDIR)/maxpath.h
|
||||||
inlib.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
inlib.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
inlib.o: $(topdir)/error.h $(topdir)/general.h
|
inlib.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
inlib.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
inlib.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
inlib.o: $(BASHINCDIR)/maxpath.h $(topdir)/subst.h $(topdir)/externs.h
|
inlib.o: $(BASHINCDIR)/maxpath.h $(topdir)/subst.h $(topdir)/externs.h
|
||||||
inlib.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
inlib.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
jobs.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
jobs.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
||||||
jobs.o: $(topdir)/general.h $(topdir)/quit.h $(srcdir)/bashgetopt.h
|
jobs.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/quit.h $(srcdir)/bashgetopt.h
|
||||||
jobs.o: $(BASHINCDIR)/maxpath.h $(topdir)/externs.h
|
jobs.o: $(BASHINCDIR)/maxpath.h $(topdir)/externs.h
|
||||||
jobs.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
jobs.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
jobs.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
jobs.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
kill.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
kill.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/error.h
|
||||||
kill.o: $(topdir)/general.h $(topdir)/subst.h $(topdir)/externs.h
|
kill.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/subst.h $(topdir)/externs.h
|
||||||
kill.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
kill.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
kill.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/trap.h $(topdir)/unwind_prot.h
|
kill.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/trap.h $(topdir)/unwind_prot.h
|
||||||
kill.o: $(topdir)/variables.h $(BASHINCDIR)/maxpath.h
|
kill.o: $(topdir)/variables.h $(topdir)/conftypes.h $(BASHINCDIR)/maxpath.h
|
||||||
let.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
let.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
let.o: $(topdir)/error.h $(topdir)/general.h
|
let.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
let.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
let.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
let.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
let.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
let.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
let.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
printf.o: ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/bashjmp.h
|
printf.o: ../config.h $(BASHINCDIR)/memalloc.h $(topdir)/bashjmp.h
|
||||||
printf.o: $(topdir)/command.h $(topdir)/error.h $(topdir)/general.h
|
printf.o: $(topdir)/command.h $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
printf.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
printf.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
printf.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/sig.h
|
printf.o: $(topdir)/subst.h $(topdir)/externs.h $(topdir)/sig.h
|
||||||
printf.o: $(topdir)/pathnames.h $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h
|
printf.o: $(topdir)/pathnames.h $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h
|
||||||
printf.o: $(topdir)/variables.h $(BASHINCDIR)/stdc.h $(srcdir)/bashgetopt.h
|
printf.o: $(topdir)/variables.h $(topdir)/conftypes.h $(BASHINCDIR)/stdc.h $(srcdir)/bashgetopt.h
|
||||||
|
printf.o: $(topdir)/bashtypes.h ${srcdir}/common.h $(BASHINCDIR)/chartypes.h
|
||||||
pushd.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
pushd.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
pushd.o: $(topdir)/error.h $(topdir)/general.h
|
pushd.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
pushd.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
pushd.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
pushd.o: $(topdir)/subst.h $(topdir)/externs.h
|
pushd.o: $(topdir)/subst.h $(topdir)/externs.h
|
||||||
pushd.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
pushd.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
pushd.o: $(BASHINCDIR)/maxpath.h $(srcdir)/common.h ./builtext.h
|
pushd.o: $(BASHINCDIR)/maxpath.h $(srcdir)/common.h ./builtext.h
|
||||||
read.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
read.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
read.o: $(topdir)/error.h $(topdir)/general.h
|
read.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
read.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
read.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
read.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
read.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
read.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
read.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
read.o: $(BASHINCDIR)/shtty.h
|
read.o: $(BASHINCDIR)/shtty.h
|
||||||
|
read.o: $(topdir)/arrayfunc.h
|
||||||
return.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
return.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
return.o: $(topdir)/error.h $(topdir)/general.h
|
return.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
return.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
return.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
return.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
return.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
return.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
return.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
set.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
set.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
set.o: $(topdir)/general.h $(topdir)/subst.h $(topdir)/externs.h
|
set.o: $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/subst.h $(topdir)/externs.h
|
||||||
set.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
set.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
set.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
set.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
set.o: $(BASHINCDIR)/maxpath.h $(topdir)/error.h
|
set.o: $(BASHINCDIR)/maxpath.h $(topdir)/error.h
|
||||||
|
set.o: $(topdir)/arrayfunc.h
|
||||||
setattr.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
setattr.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
setattr.o: $(topdir)/error.h $(topdir)/general.h $(BASHINCDIR)/maxpath.h
|
setattr.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h $(BASHINCDIR)/maxpath.h
|
||||||
setattr.o: $(topdir)/quit.h $(srcdir)/common.h $(srcdir)/bashgetopt.h
|
setattr.o: $(topdir)/quit.h $(srcdir)/common.h $(srcdir)/bashgetopt.h
|
||||||
setattr.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
setattr.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
setattr.o: $(topdir)/externs.h
|
setattr.o: $(topdir)/externs.h
|
||||||
setattr.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
setattr.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
|
setattr.o: $(topdir)/arrayfunc.h
|
||||||
shift.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
shift.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
shift.o: $(topdir)/error.h $(topdir)/general.h
|
shift.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
shift.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
shift.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
shift.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
shift.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
shift.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
shift.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
source.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
source.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
source.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/findcmd.h
|
source.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/findcmd.h
|
||||||
source.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
source.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
source.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
source.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
source.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
source.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
suspend.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
suspend.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
suspend.o: $(topdir)/error.h $(topdir)/general.h
|
suspend.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
suspend.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
suspend.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
suspend.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
suspend.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
suspend.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
suspend.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
test.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
test.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
test.o: $(topdir)/error.h $(topdir)/general.h
|
test.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
test.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
test.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
test.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
test.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
test.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
test.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
test.o: $(topdir)/test.h
|
test.o: $(topdir)/test.h
|
||||||
times.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
times.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
times.o: $(topdir)/error.h $(topdir)/general.h
|
times.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
times.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
times.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
times.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
times.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
times.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
times.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
times.o: $(BASHINCDIR)/posixtime.h
|
times.o: $(BASHINCDIR)/posixtime.h
|
||||||
trap.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
trap.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
trap.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/externs.h
|
trap.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h $(topdir)/externs.h
|
||||||
trap.o: $(topdir)/quit.h $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
trap.o: $(topdir)/quit.h $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
||||||
trap.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
trap.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
trap.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
trap.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
trap.o: $(topdir)/findcmd.h
|
trap.o: $(topdir)/findcmd.h
|
||||||
type.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
type.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
type.o: $(topdir)/error.h $(topdir)/general.h
|
type.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
type.o: $(topdir)/quit.h $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
type.o: $(topdir)/quit.h $(srcdir)/common.h $(BASHINCDIR)/maxpath.h
|
||||||
type.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
type.o: $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h $(topdir)/subst.h
|
||||||
type.o: $(topdir)/externs.h $(topdir)/hashcmd.h
|
type.o: $(topdir)/externs.h $(topdir)/hashcmd.h
|
||||||
type.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
type.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
ulimit.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
ulimit.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
ulimit.o: $(topdir)/error.h $(topdir)/general.h
|
ulimit.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
ulimit.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
ulimit.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
ulimit.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
ulimit.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
ulimit.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
ulimit.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
umask.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
umask.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
umask.o: $(topdir)/error.h $(topdir)/general.h
|
umask.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
umask.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
umask.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
umask.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
umask.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
umask.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
umask.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
|
umask.o: $(BASHINCDIR)/chartypes.h
|
||||||
wait.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
wait.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
wait.o: $(topdir)/error.h $(topdir)/general.h
|
wait.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
wait.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
wait.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
wait.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
wait.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
wait.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
wait.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
|
wait.o: $(BASHINCDIR)/chartypes.h
|
||||||
shopt.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
shopt.o: $(topdir)/command.h ../config.h $(BASHINCDIR)/memalloc.h
|
||||||
shopt.o: $(topdir)/error.h $(topdir)/general.h
|
shopt.o: $(topdir)/error.h $(topdir)/general.h $(topdir)/xmalloc.h
|
||||||
shopt.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
shopt.o: $(topdir)/quit.h $(topdir)/dispose_cmd.h $(topdir)/make_cmd.h
|
||||||
shopt.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
shopt.o: $(topdir)/subst.h $(topdir)/externs.h $(BASHINCDIR)/maxpath.h
|
||||||
shopt.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h
|
shopt.o: $(topdir)/shell.h $(topdir)/syntax.h $(topdir)/unwind_prot.h $(topdir)/variables.h $(topdir)/conftypes.h
|
||||||
shopt.o: $(srcdir)/common.h $(srcdir)/bashgetopt.h
|
shopt.o: $(srcdir)/common.h $(srcdir)/bashgetopt.h
|
||||||
|
|
||||||
complete.o: ../config.h
|
complete.o: ../config.h
|
||||||
|
|
|
||||||
|
|
@ -51,8 +51,7 @@ $END
|
||||||
# include "common.h"
|
# include "common.h"
|
||||||
# include "bashgetopt.h"
|
# include "bashgetopt.h"
|
||||||
|
|
||||||
extern int interactive;
|
static void print_alias __P((alias_t *));
|
||||||
static void print_alias ();
|
|
||||||
|
|
||||||
/* Hack the alias command in a Korn shell way. */
|
/* Hack the alias command in a Korn shell way. */
|
||||||
int
|
int
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@ Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../bashansi.h"
|
#include "../bashansi.h"
|
||||||
|
#include <chartypes.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "../shell.h"
|
#include "../shell.h"
|
||||||
|
|
@ -124,7 +125,7 @@ char *opts;
|
||||||
} else if (*cp == '#') {
|
} else if (*cp == '#') {
|
||||||
/* optional numeric argument */
|
/* optional numeric argument */
|
||||||
if (lcurrent->word->word[sp+1]) {
|
if (lcurrent->word->word[sp+1]) {
|
||||||
if (digit(lcurrent->word->word[sp+1])) {
|
if (DIGIT(lcurrent->word->word[sp+1])) {
|
||||||
list_optarg = lcurrent->word->word + sp + 1;
|
list_optarg = lcurrent->word->word + sp + 1;
|
||||||
lcurrent = lcurrent->next;
|
lcurrent = lcurrent->next;
|
||||||
} else
|
} else
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,8 @@
|
||||||
#if !defined (__BASH_GETOPT_H)
|
#if !defined (__BASH_GETOPT_H)
|
||||||
# define __BASH_GETOPT_H
|
# define __BASH_GETOPT_H
|
||||||
|
|
||||||
|
#include <stdc.h>
|
||||||
|
|
||||||
extern char *list_optarg;
|
extern char *list_optarg;
|
||||||
|
|
||||||
extern int list_optopt;
|
extern int list_optopt;
|
||||||
|
|
@ -30,8 +32,8 @@ extern int list_optopt;
|
||||||
extern WORD_LIST *lcurrent;
|
extern WORD_LIST *lcurrent;
|
||||||
extern WORD_LIST *loptend;
|
extern WORD_LIST *loptend;
|
||||||
|
|
||||||
extern int internal_getopt ();
|
extern int internal_getopt __P((WORD_LIST *, char *));
|
||||||
extern void reset_internal_getopt ();
|
extern void reset_internal_getopt __P((void));
|
||||||
extern void report_bad_option ();
|
extern void report_bad_option __P((void));
|
||||||
|
|
||||||
#endif /* !__BASH_GETOPT_H */
|
#endif /* !__BASH_GETOPT_H */
|
||||||
|
|
|
||||||
|
|
@ -76,8 +76,8 @@ extern int errno;
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
static int query_bindings ();
|
static int query_bindings __P((char *));
|
||||||
static int unbind_command ();
|
static int unbind_command __P((char *));
|
||||||
|
|
||||||
extern int no_line_editing;
|
extern int no_line_editing;
|
||||||
|
|
||||||
|
|
@ -102,7 +102,6 @@ bind_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
int return_code;
|
int return_code;
|
||||||
FILE *old_rl_outstream;
|
|
||||||
Keymap kmap, saved_keymap;
|
Keymap kmap, saved_keymap;
|
||||||
int flags, opt;
|
int flags, opt;
|
||||||
char *initfile, *map_name, *fun_name, *unbind_name, *remove_seq, *cmd_seq;
|
char *initfile, *map_name, *fun_name, *unbind_name, *remove_seq, *cmd_seq;
|
||||||
|
|
@ -118,10 +117,9 @@ bind_builtin (list)
|
||||||
if (!bash_readline_initialized)
|
if (!bash_readline_initialized)
|
||||||
initialize_readline ();
|
initialize_readline ();
|
||||||
|
|
||||||
/* Cannot use unwind_protect_pointer () on "FILE *", it is only
|
begin_unwind_frame ("bind_builtin");
|
||||||
guaranteed to work for strings. */
|
unwind_protect_var (rl_outstream);
|
||||||
/* XXX -- see if we can use unwind_protect here */
|
|
||||||
old_rl_outstream = rl_outstream;
|
|
||||||
rl_outstream = stdout;
|
rl_outstream = stdout;
|
||||||
|
|
||||||
reset_internal_getopt ();
|
reset_internal_getopt ();
|
||||||
|
|
@ -242,7 +240,7 @@ bind_builtin (list)
|
||||||
|
|
||||||
if ((flags & RFLAG) && remove_seq)
|
if ((flags & RFLAG) && remove_seq)
|
||||||
{
|
{
|
||||||
if (rl_set_key (remove_seq, (Function *)NULL, rl_get_keymap ()) != 0)
|
if (rl_set_key (remove_seq, (rl_command_func_t *)NULL, rl_get_keymap ()) != 0)
|
||||||
{
|
{
|
||||||
builtin_error ("cannot unbind %s", remove_seq);
|
builtin_error ("cannot unbind %s", remove_seq);
|
||||||
BIND_RETURN (EXECUTION_FAILURE);
|
BIND_RETURN (EXECUTION_FAILURE);
|
||||||
|
|
@ -263,7 +261,8 @@ bind_builtin (list)
|
||||||
if (saved_keymap)
|
if (saved_keymap)
|
||||||
rl_set_keymap (saved_keymap);
|
rl_set_keymap (saved_keymap);
|
||||||
|
|
||||||
rl_outstream = old_rl_outstream;
|
run_unwind_frame ("bind_builtin");
|
||||||
|
|
||||||
return (return_code);
|
return (return_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -271,7 +270,7 @@ static int
|
||||||
query_bindings (name)
|
query_bindings (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
Function *function;
|
rl_command_func_t *function;
|
||||||
char **keyseqs;
|
char **keyseqs;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
|
|
@ -303,7 +302,7 @@ static int
|
||||||
unbind_command (name)
|
unbind_command (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
Function *function;
|
rl_command_func_t *function;
|
||||||
|
|
||||||
function = rl_named_function (name);
|
function = rl_named_function (name);
|
||||||
if (function == 0)
|
if (function == 0)
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ $END
|
||||||
extern char *this_command_name;
|
extern char *this_command_name;
|
||||||
extern int posixly_correct;
|
extern int posixly_correct;
|
||||||
|
|
||||||
static int check_loop_level ();
|
static int check_loop_level __P((void));
|
||||||
|
|
||||||
/* The depth of while's and until's. */
|
/* The depth of while's and until's. */
|
||||||
int loop_level = 0;
|
int loop_level = 0;
|
||||||
|
|
@ -59,7 +59,7 @@ int
|
||||||
break_builtin (list)
|
break_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
int newbreak;
|
long newbreak;
|
||||||
|
|
||||||
if (check_loop_level () == 0)
|
if (check_loop_level () == 0)
|
||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
|
|
@ -94,7 +94,7 @@ int
|
||||||
continue_builtin (list)
|
continue_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
int newcont;
|
long newcont;
|
||||||
|
|
||||||
if (check_loop_level () == 0)
|
if (check_loop_level () == 0)
|
||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ int
|
||||||
builtin_builtin (list)
|
builtin_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
Function *function;
|
sh_builtin_func_t *function;
|
||||||
register char *command;
|
register char *command;
|
||||||
|
|
||||||
if (!list)
|
if (!list)
|
||||||
|
|
|
||||||
|
|
@ -53,13 +53,14 @@ $PRODUCES cd.c
|
||||||
extern int errno;
|
extern int errno;
|
||||||
#endif /* !errno */
|
#endif /* !errno */
|
||||||
|
|
||||||
extern int posixly_correct, interactive;
|
extern int posixly_correct;
|
||||||
extern int array_needs_making;
|
extern int array_needs_making;
|
||||||
extern char *bash_getcwd_errstr;
|
extern char *bash_getcwd_errstr;
|
||||||
|
|
||||||
static int change_to_directory ();
|
static int bindpwd __P((int));
|
||||||
|
static int change_to_directory __P((char *, int));
|
||||||
|
|
||||||
static char *cdspell ();
|
static char *cdspell __P((char *));
|
||||||
|
|
||||||
/* Change this to 1 to get cd spelling correction by default. */
|
/* Change this to 1 to get cd spelling correction by default. */
|
||||||
int cdspelling = 0;
|
int cdspelling = 0;
|
||||||
|
|
@ -87,7 +88,7 @@ bindpwd (no_symlinks)
|
||||||
int no_symlinks;
|
int no_symlinks;
|
||||||
{
|
{
|
||||||
char *dirname, *pwdvar;
|
char *dirname, *pwdvar;
|
||||||
int old_symlinks, old_anm;
|
int old_anm;
|
||||||
SHELL_VAR *tvar;
|
SHELL_VAR *tvar;
|
||||||
|
|
||||||
#define tcwd the_current_working_directory
|
#define tcwd the_current_working_directory
|
||||||
|
|
@ -424,7 +425,7 @@ cdspell (dirname)
|
||||||
char *guess;
|
char *guess;
|
||||||
|
|
||||||
n = (strlen (dirname) * 3 + 1) / 2 + 1;
|
n = (strlen (dirname) * 3 + 1) / 2 + 1;
|
||||||
guess = xmalloc (n);
|
guess = (char *)xmalloc (n);
|
||||||
|
|
||||||
switch (spname (dirname, guess))
|
switch (spname (dirname, guess))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -49,10 +49,14 @@ $END
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#if defined (_CS_PATH) && defined (HAVE_CONFSTR) && !HAVE_DECL_CONFSTR
|
||||||
|
extern size_t confstr __P((int, char *, size_t));
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int subshell_environment;
|
extern int subshell_environment;
|
||||||
|
|
||||||
static void restore_path ();
|
static void restore_path __P((char *));
|
||||||
static char *get_standard_path ();
|
static char *get_standard_path __P((void));
|
||||||
|
|
||||||
/* Run the commands mentioned in LIST without paying attention to shell
|
/* Run the commands mentioned in LIST without paying attention to shell
|
||||||
functions. */
|
functions. */
|
||||||
|
|
@ -131,11 +135,13 @@ command_builtin (list)
|
||||||
FREE (standard_path);
|
FREE (standard_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define COMMAND_BUILTIN_FLAGS (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION | CMD_COMMAND_BUILTIN)
|
||||||
|
|
||||||
command = make_bare_simple_command ();
|
command = make_bare_simple_command ();
|
||||||
command->value.Simple->words = (WORD_LIST *)copy_word_list (list);
|
command->value.Simple->words = (WORD_LIST *)copy_word_list (list);
|
||||||
command->value.Simple->redirects = (REDIRECT *)NULL;
|
command->value.Simple->redirects = (REDIRECT *)NULL;
|
||||||
command->flags |= (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION);
|
command->flags |= COMMAND_BUILTIN_FLAGS;
|
||||||
command->value.Simple->flags |= (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION);
|
command->value.Simple->flags |= COMMAND_BUILTIN_FLAGS;
|
||||||
#if 0
|
#if 0
|
||||||
/* This breaks for things like ( cd /tmp ; command z ababa ; echo next )
|
/* This breaks for things like ( cd /tmp ; command z ababa ; echo next )
|
||||||
or $(command echo a ; command echo b;) or even
|
or $(command echo a ; command echo b;) or even
|
||||||
|
|
@ -184,7 +190,7 @@ get_standard_path ()
|
||||||
len = (size_t)confstr (_CS_PATH, (char *)NULL, (size_t)0);
|
len = (size_t)confstr (_CS_PATH, (char *)NULL, (size_t)0);
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
{
|
{
|
||||||
p = xmalloc ((int)len + 2);
|
p = (char *)xmalloc (len + 2);
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
confstr (_CS_PATH, p, len);
|
confstr (_CS_PATH, p, len);
|
||||||
return (p);
|
return (p);
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <chartypes.h>
|
||||||
#include "../bashtypes.h"
|
#include "../bashtypes.h"
|
||||||
#include "posixstat.h"
|
#include "posixstat.h"
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
@ -63,26 +64,18 @@
|
||||||
extern int errno;
|
extern int errno;
|
||||||
#endif /* !errno */
|
#endif /* !errno */
|
||||||
|
|
||||||
#ifdef __STDC__
|
extern int no_symbolic_links;
|
||||||
typedef int QSFUNC (const void *, const void *);
|
|
||||||
#else
|
|
||||||
typedef int QSFUNC ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern int no_symbolic_links, interactive, interactive_shell;
|
|
||||||
extern int indirection_level, startup_state, subshell_environment;
|
extern int indirection_level, startup_state, subshell_environment;
|
||||||
extern int line_number;
|
extern int line_number;
|
||||||
extern int last_command_exit_value;
|
extern int last_command_exit_value;
|
||||||
extern int running_trap;
|
extern int running_trap;
|
||||||
extern int variable_context;
|
|
||||||
extern int posixly_correct;
|
extern int posixly_correct;
|
||||||
extern char *this_command_name, *shell_name;
|
extern char *this_command_name, *shell_name;
|
||||||
extern COMMAND *global_command;
|
|
||||||
extern char *bash_getcwd_errstr;
|
extern char *bash_getcwd_errstr;
|
||||||
|
|
||||||
/* Used by some builtins and the mainline code. */
|
/* Used by some builtins and the mainline code. */
|
||||||
Function *last_shell_builtin = (Function *)NULL;
|
sh_builtin_func_t *last_shell_builtin = (sh_builtin_func_t *)NULL;
|
||||||
Function *this_shell_builtin = (Function *)NULL;
|
sh_builtin_func_t *this_shell_builtin = (sh_builtin_func_t *)NULL;
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
|
|
@ -337,7 +330,7 @@ set_dollar_vars_changed ()
|
||||||
follow. If FATAL is true, call throw_to_top_level, which exits the
|
follow. If FATAL is true, call throw_to_top_level, which exits the
|
||||||
shell; if not, call jump_to_top_level (DISCARD), which aborts the
|
shell; if not, call jump_to_top_level (DISCARD), which aborts the
|
||||||
current command. */
|
current command. */
|
||||||
int
|
long
|
||||||
get_numeric_arg (list, fatal)
|
get_numeric_arg (list, fatal)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
int fatal;
|
int fatal;
|
||||||
|
|
@ -359,9 +352,31 @@ get_numeric_arg (list, fatal)
|
||||||
}
|
}
|
||||||
no_args (list->next);
|
no_args (list->next);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (count);
|
return (count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get an eight-bit status value from LIST */
|
||||||
|
int
|
||||||
|
get_exitstat (list)
|
||||||
|
WORD_LIST *list;
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
long sval;
|
||||||
|
char *arg;
|
||||||
|
|
||||||
|
arg = list->word->word;
|
||||||
|
if (arg == 0 || legal_number (arg, &sval) == 0)
|
||||||
|
{
|
||||||
|
builtin_error ("bad non-numeric arg `%s'", list->word->word);
|
||||||
|
return 255;
|
||||||
|
}
|
||||||
|
no_args (list->next);
|
||||||
|
|
||||||
|
status = sval & 255;
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the octal number parsed from STRING, or -1 to indicate
|
/* Return the octal number parsed from STRING, or -1 to indicate
|
||||||
that the string contained a bad number. */
|
that the string contained a bad number. */
|
||||||
int
|
int
|
||||||
|
|
@ -375,9 +390,11 @@ read_octal (string)
|
||||||
{
|
{
|
||||||
digits++;
|
digits++;
|
||||||
result = (result * 8) + (*string++ - '0');
|
result = (result * 8) + (*string++ - '0');
|
||||||
|
if (result > 0777)
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!digits || result > 0777 || *string)
|
if (digits == 0 || *string)
|
||||||
result = -1;
|
result = -1;
|
||||||
|
|
||||||
return (result);
|
return (result);
|
||||||
|
|
@ -409,7 +426,7 @@ get_working_directory (for_whom)
|
||||||
|
|
||||||
if (the_current_working_directory == 0)
|
if (the_current_working_directory == 0)
|
||||||
{
|
{
|
||||||
the_current_working_directory = xmalloc (PATH_MAX);
|
the_current_working_directory = (char *)xmalloc (PATH_MAX);
|
||||||
the_current_working_directory[0] = '\0';
|
the_current_working_directory[0] = '\0';
|
||||||
directory = getcwd (the_current_working_directory, PATH_MAX);
|
directory = getcwd (the_current_working_directory, PATH_MAX);
|
||||||
if (directory == 0)
|
if (directory == 0)
|
||||||
|
|
@ -449,7 +466,7 @@ get_job_spec (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
register char *word;
|
register char *word;
|
||||||
int job, substring;
|
int job, substring_search;
|
||||||
|
|
||||||
if (list == 0)
|
if (list == 0)
|
||||||
return (current_job);
|
return (current_job);
|
||||||
|
|
@ -462,13 +479,13 @@ get_job_spec (list)
|
||||||
if (*word == '%')
|
if (*word == '%')
|
||||||
word++;
|
word++;
|
||||||
|
|
||||||
if (digit (*word) && all_digits (word))
|
if (DIGIT (*word) && all_digits (word))
|
||||||
{
|
{
|
||||||
job = atoi (word);
|
job = atoi (word);
|
||||||
return (job >= job_slots ? NO_JOB : job - 1);
|
return (job >= job_slots ? NO_JOB : job - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
substring = 0;
|
substring_search = 0;
|
||||||
switch (*word)
|
switch (*word)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
|
@ -480,7 +497,7 @@ get_job_spec (list)
|
||||||
return (previous_job);
|
return (previous_job);
|
||||||
|
|
||||||
case '?': /* Substring search requested. */
|
case '?': /* Substring search requested. */
|
||||||
substring++;
|
substring_search++;
|
||||||
word++;
|
word++;
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
|
|
||||||
|
|
@ -498,15 +515,17 @@ get_job_spec (list)
|
||||||
p = jobs[i]->pipe;
|
p = jobs[i]->pipe;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if ((substring && strindex (p->command, word)) ||
|
if ((substring_search && strindex (p->command, word)) ||
|
||||||
(STREQN (p->command, word, wl)))
|
(STREQN (p->command, word, wl)))
|
||||||
if (job != NO_JOB)
|
{
|
||||||
{
|
if (job != NO_JOB)
|
||||||
builtin_error ("ambigious job spec: %s", word);
|
{
|
||||||
return (DUP_JOB);
|
builtin_error ("ambigious job spec: %s", word);
|
||||||
}
|
return (DUP_JOB);
|
||||||
else
|
}
|
||||||
job = i;
|
else
|
||||||
|
job = i;
|
||||||
|
}
|
||||||
|
|
||||||
p = p->next;
|
p = p->next;
|
||||||
}
|
}
|
||||||
|
|
@ -658,33 +677,33 @@ builtin_address_internal (name, disabled_okay)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the pointer to the function implementing builtin command NAME. */
|
/* Return the pointer to the function implementing builtin command NAME. */
|
||||||
Function *
|
sh_builtin_func_t *
|
||||||
find_shell_builtin (name)
|
find_shell_builtin (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
current_builtin = builtin_address_internal (name, 0);
|
current_builtin = builtin_address_internal (name, 0);
|
||||||
return (current_builtin ? current_builtin->function : (Function *)NULL);
|
return (current_builtin ? current_builtin->function : (sh_builtin_func_t *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the address of builtin with NAME, whether it is enabled or not. */
|
/* Return the address of builtin with NAME, whether it is enabled or not. */
|
||||||
Function *
|
sh_builtin_func_t *
|
||||||
builtin_address (name)
|
builtin_address (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
current_builtin = builtin_address_internal (name, 1);
|
current_builtin = builtin_address_internal (name, 1);
|
||||||
return (current_builtin ? current_builtin->function : (Function *)NULL);
|
return (current_builtin ? current_builtin->function : (sh_builtin_func_t *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return the function implementing the builtin NAME, but only if it is a
|
/* Return the function implementing the builtin NAME, but only if it is a
|
||||||
POSIX.2 special builtin. */
|
POSIX.2 special builtin. */
|
||||||
Function *
|
sh_builtin_func_t *
|
||||||
find_special_builtin (name)
|
find_special_builtin (name)
|
||||||
char *name;
|
char *name;
|
||||||
{
|
{
|
||||||
current_builtin = builtin_address_internal (name, 0);
|
current_builtin = builtin_address_internal (name, 0);
|
||||||
return ((current_builtin && (current_builtin->flags & SPECIAL_BUILTIN)) ?
|
return ((current_builtin && (current_builtin->flags & SPECIAL_BUILTIN)) ?
|
||||||
current_builtin->function :
|
current_builtin->function :
|
||||||
(Function *)NULL);
|
(sh_builtin_func_t *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,7 @@
|
||||||
#define SEVAL_NOHIST 0x04
|
#define SEVAL_NOHIST 0x04
|
||||||
|
|
||||||
/* Functions from common.c */
|
/* Functions from common.c */
|
||||||
extern void builtin_error __P((const char *, ...));
|
extern void builtin_error __P((const char *, ...)) __attribute__((__format__ (printf, 1, 2)));
|
||||||
extern void builtin_usage __P((void));
|
extern void builtin_usage __P((void));
|
||||||
extern void no_args __P((WORD_LIST *));
|
extern void no_args __P((WORD_LIST *));
|
||||||
extern void bad_option __P((char *));
|
extern void bad_option __P((char *));
|
||||||
|
|
@ -49,7 +49,8 @@ extern int dollar_vars_changed __P((void));
|
||||||
extern void set_dollar_vars_unchanged __P((void));
|
extern void set_dollar_vars_unchanged __P((void));
|
||||||
extern void set_dollar_vars_changed __P((void));
|
extern void set_dollar_vars_changed __P((void));
|
||||||
|
|
||||||
extern int get_numeric_arg __P((WORD_LIST *, int));
|
extern long get_numeric_arg __P((WORD_LIST *, int));
|
||||||
|
extern int get_exitstat __P((WORD_LIST *));
|
||||||
extern int read_octal __P((char *));
|
extern int read_octal __P((char *));
|
||||||
|
|
||||||
/* Keeps track of the current working directory. */
|
/* Keeps track of the current working directory. */
|
||||||
|
|
@ -65,23 +66,35 @@ extern int display_signal_list __P((WORD_LIST *, int));
|
||||||
/* It's OK to declare a function as returning a Function * without
|
/* It's OK to declare a function as returning a Function * without
|
||||||
providing a definition of what a `Function' is. */
|
providing a definition of what a `Function' is. */
|
||||||
extern struct builtin *builtin_address_internal __P((char *, int));
|
extern struct builtin *builtin_address_internal __P((char *, int));
|
||||||
extern Function *find_shell_builtin __P((char *));
|
extern sh_builtin_func_t *find_shell_builtin __P((char *));
|
||||||
extern Function *builtin_address __P((char *));
|
extern sh_builtin_func_t *builtin_address __P((char *));
|
||||||
extern Function *find_special_builtin __P((char *));
|
extern sh_builtin_func_t *find_special_builtin __P((char *));
|
||||||
extern void initialize_shell_builtins __P((void));
|
extern void initialize_shell_builtins __P((void));
|
||||||
|
|
||||||
|
/* Functions from getopts.def */
|
||||||
|
extern void getopts_reset __P((int));
|
||||||
|
|
||||||
/* Functions from set.def */
|
/* Functions from set.def */
|
||||||
extern void initialize_shell_options __P((int));
|
|
||||||
extern void list_minus_o_opts __P((int, int));
|
|
||||||
extern int set_minus_o_option __P((int, char *));
|
|
||||||
extern int minus_o_option_value __P((char *));
|
extern int minus_o_option_value __P((char *));
|
||||||
extern void reset_shell_options __P((void));
|
extern void list_minus_o_opts __P((int, int));
|
||||||
extern char **get_minus_o_opts __P((void));
|
extern char **get_minus_o_opts __P((void));
|
||||||
|
extern int set_minus_o_option __P((int, char *));
|
||||||
|
|
||||||
|
extern void set_shellopts __P((void));
|
||||||
|
extern void parse_shellopts __P((char *));
|
||||||
|
extern void initialize_shell_options __P((int));
|
||||||
|
|
||||||
|
extern void reset_shell_options __P((void));
|
||||||
|
|
||||||
/* Functions from shopt.def */
|
/* Functions from shopt.def */
|
||||||
extern void reset_shopt_options __P((void));
|
extern void reset_shopt_options __P((void));
|
||||||
extern char **get_shopt_options __P((void));
|
extern char **get_shopt_options __P((void));
|
||||||
|
|
||||||
|
extern int shopt_setopt __P((char *, int));
|
||||||
|
extern int shopt_listopt __P((char *, int));
|
||||||
|
|
||||||
|
extern int set_login_shell __P((int));
|
||||||
|
|
||||||
/* Functions from type.def */
|
/* Functions from type.def */
|
||||||
extern int describe_command __P((char *, int, int));
|
extern int describe_command __P((char *, int, int));
|
||||||
|
|
||||||
|
|
@ -93,17 +106,17 @@ extern void set_var_attribute __P((char *, int, int));
|
||||||
|
|
||||||
/* Functions from pushd.def */
|
/* Functions from pushd.def */
|
||||||
extern char *get_dirstack_from_string __P((char *));
|
extern char *get_dirstack_from_string __P((char *));
|
||||||
extern char *get_dirstack_element __P((int, int));
|
extern char *get_dirstack_element __P((long, int));
|
||||||
extern void set_dirstack_element __P((int, int, char *));
|
extern void set_dirstack_element __P((long, int, char *));
|
||||||
extern WORD_LIST *get_directory_stack __P((void));
|
extern WORD_LIST *get_directory_stack __P((void));
|
||||||
|
|
||||||
/* Functions from evalstring.c */
|
/* Functions from evalstring.c */
|
||||||
extern int parse_and_execute __P((char *, char *, int));
|
extern int parse_and_execute __P((char *, const char *, int));
|
||||||
extern void parse_and_execute_cleanup __P((void));
|
extern void parse_and_execute_cleanup __P((void));
|
||||||
|
|
||||||
/* Functions from evalfile.c */
|
/* Functions from evalfile.c */
|
||||||
extern int maybe_execute_file __P((char *, int));
|
extern int maybe_execute_file __P((const char *, int));
|
||||||
extern int source_file __P((char *));
|
extern int source_file __P((const char *));
|
||||||
extern int fc_execute_file __P((char *));
|
extern int fc_execute_file __P((const char *));
|
||||||
|
|
||||||
#endif /* !__COMMON_H */
|
#endif /* !__COMMON_H */
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ $PRODUCES complete.c
|
||||||
$BUILTIN complete
|
$BUILTIN complete
|
||||||
$DEPENDS_ON PROGRAMMABLE_COMPLETION
|
$DEPENDS_ON PROGRAMMABLE_COMPLETION
|
||||||
$FUNCTION complete_builtin
|
$FUNCTION complete_builtin
|
||||||
$SHORT_DOC complete [-abcdefjkvu] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
|
$SHORT_DOC complete [-abcdefgjkvu] [-pr] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...]
|
||||||
For each NAME, specify how arguments are to be completed.
|
For each NAME, specify how arguments are to be completed.
|
||||||
If the -p option is supplied, or if no options are supplied, existing
|
If the -p option is supplied, or if no options are supplied, existing
|
||||||
completion specifications are printed in a way that allows them to be
|
completion specifications are printed in a way that allows them to be
|
||||||
|
|
@ -51,12 +51,20 @@ $END
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
|
|
||||||
|
#include <readline/readline.h>
|
||||||
|
|
||||||
#define STRDUP(x) ((x) ? savestring (x) : (char *)NULL)
|
#define STRDUP(x) ((x) ? savestring (x) : (char *)NULL)
|
||||||
|
|
||||||
static int remove_cmd_completions ();
|
static int find_compact __P((char *));
|
||||||
|
static int find_compopt __P((char *));
|
||||||
|
|
||||||
static void print_all_completions ();
|
static int build_actions __P((WORD_LIST *, int *, int *, unsigned long *, unsigned long *));
|
||||||
static int print_cmd_completions ();
|
|
||||||
|
static int remove_cmd_completions __P((WORD_LIST *));
|
||||||
|
|
||||||
|
static void print_one_completion __P((char *, COMPSPEC *));
|
||||||
|
static void print_all_completions __P((void));
|
||||||
|
static int print_cmd_completions __P((WORD_LIST *));
|
||||||
|
|
||||||
static char *Aarg, *Garg, *Warg, *Parg, *Sarg, *Xarg, *Farg, *Carg;
|
static char *Aarg, *Garg, *Warg, *Parg, *Sarg, *Xarg, *Farg, *Carg;
|
||||||
|
|
||||||
|
|
@ -78,6 +86,7 @@ static struct _compacts {
|
||||||
{ "function", CA_FUNCTION, 0 },
|
{ "function", CA_FUNCTION, 0 },
|
||||||
{ "helptopic", CA_BUILTIN, 0 }, /* for now */
|
{ "helptopic", CA_BUILTIN, 0 }, /* for now */
|
||||||
{ "hostname", CA_HOSTNAME, 0 },
|
{ "hostname", CA_HOSTNAME, 0 },
|
||||||
|
{ "group", CA_GROUP, 'g' },
|
||||||
{ "job", CA_JOB, 'j' },
|
{ "job", CA_JOB, 'j' },
|
||||||
{ "keyword", CA_KEYWORD, 'k' },
|
{ "keyword", CA_KEYWORD, 'k' },
|
||||||
{ "running", CA_RUNNING, 0 },
|
{ "running", CA_RUNNING, 0 },
|
||||||
|
|
@ -144,14 +153,14 @@ build_actions (list, pp, rp, actp, optp)
|
||||||
int *pp, *rp;
|
int *pp, *rp;
|
||||||
unsigned long *actp, *optp;
|
unsigned long *actp, *optp;
|
||||||
{
|
{
|
||||||
int opt, ind, pflag, rflag, opt_given;
|
int opt, ind, opt_given;
|
||||||
unsigned long acts, copts;
|
unsigned long acts, copts;
|
||||||
|
|
||||||
acts = copts = (unsigned long)0L;
|
acts = copts = (unsigned long)0L;
|
||||||
opt_given = 0;
|
opt_given = 0;
|
||||||
|
|
||||||
reset_internal_getopt ();
|
reset_internal_getopt ();
|
||||||
while ((opt = internal_getopt (list, "abcdefjko:pruvA:G:W:P:S:X:F:C:")) != -1)
|
while ((opt = internal_getopt (list, "abcdefgjko:pruvA:G:W:P:S:X:F:C:")) != -1)
|
||||||
{
|
{
|
||||||
opt_given = 1;
|
opt_given = 1;
|
||||||
switch (opt)
|
switch (opt)
|
||||||
|
|
@ -200,6 +209,9 @@ build_actions (list, pp, rp, actp, optp)
|
||||||
case 'f':
|
case 'f':
|
||||||
acts |= CA_FILE;
|
acts |= CA_FILE;
|
||||||
break;
|
break;
|
||||||
|
case 'g':
|
||||||
|
acts |= CA_GROUP;
|
||||||
|
break;
|
||||||
case 'j':
|
case 'j':
|
||||||
acts |= CA_JOB;
|
acts |= CA_JOB;
|
||||||
break;
|
break;
|
||||||
|
|
@ -424,6 +436,7 @@ print_one_completion (cmd, cs)
|
||||||
PRINTOPT (CA_DIRECTORY, "-d");
|
PRINTOPT (CA_DIRECTORY, "-d");
|
||||||
PRINTOPT (CA_EXPORT, "-e");
|
PRINTOPT (CA_EXPORT, "-e");
|
||||||
PRINTOPT (CA_FILE, "-f");
|
PRINTOPT (CA_FILE, "-f");
|
||||||
|
PRINTOPT (CA_GROUP, "-g");
|
||||||
PRINTOPT (CA_KEYWORD, "-k");
|
PRINTOPT (CA_KEYWORD, "-k");
|
||||||
PRINTOPT (CA_JOB, "-j");
|
PRINTOPT (CA_JOB, "-j");
|
||||||
PRINTOPT (CA_USER, "-u");
|
PRINTOPT (CA_USER, "-u");
|
||||||
|
|
@ -490,7 +503,7 @@ print_cmd_completions (list)
|
||||||
$BUILTIN compgen
|
$BUILTIN compgen
|
||||||
$DEPENDS_ON PROGRAMMABLE_COMPLETION
|
$DEPENDS_ON PROGRAMMABLE_COMPLETION
|
||||||
$FUNCTION compgen_builtin
|
$FUNCTION compgen_builtin
|
||||||
$SHORT_DOC compgen [-abcdefjkvu] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [word]
|
$SHORT_DOC compgen [-abcdefgjkvu] [-o option] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [word]
|
||||||
Display the possible completions depending on the options. Intended
|
Display the possible completions depending on the options. Intended
|
||||||
to be used from within a shell function generating possible completions.
|
to be used from within a shell function generating possible completions.
|
||||||
If the optional WORD argument is supplied, matches against WORD are
|
If the optional WORD argument is supplied, matches against WORD are
|
||||||
|
|
@ -547,9 +560,21 @@ compgen_builtin (list)
|
||||||
|
|
||||||
rval = EXECUTION_FAILURE;
|
rval = EXECUTION_FAILURE;
|
||||||
sl = gen_compspec_completions (cs, "compgen", word, 0, 0);
|
sl = gen_compspec_completions (cs, "compgen", word, 0, 0);
|
||||||
|
|
||||||
|
/* This isn't perfect, but it's the best we can do, given what readline
|
||||||
|
exports from its set of completion utility functions. */
|
||||||
|
if ((sl == 0 || sl->list_len == 0) && (copts & COPT_DEFAULT))
|
||||||
|
{
|
||||||
|
char **matches;
|
||||||
|
|
||||||
|
matches = rl_completion_matches (word, rl_filename_completion_function);
|
||||||
|
sl = completions_to_stringlist (matches);
|
||||||
|
free_array (matches);
|
||||||
|
}
|
||||||
|
|
||||||
if (sl)
|
if (sl)
|
||||||
{
|
{
|
||||||
if (sl->list)
|
if (sl->list && sl->list_len)
|
||||||
{
|
{
|
||||||
rval = EXECUTION_SUCCESS;
|
rval = EXECUTION_SUCCESS;
|
||||||
print_stringlist (sl, (char *)NULL);
|
print_stringlist (sl, (char *)NULL);
|
||||||
|
|
|
||||||
|
|
@ -71,9 +71,9 @@ $END
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "builtext.h"
|
#include "builtext.h"
|
||||||
|
|
||||||
extern int variable_context, array_needs_making;
|
extern int array_needs_making;
|
||||||
|
|
||||||
static int declare_internal ();
|
static int declare_internal __P((register WORD_LIST *, int));
|
||||||
|
|
||||||
/* Declare or change variable attributes. */
|
/* Declare or change variable attributes. */
|
||||||
int
|
int
|
||||||
|
|
@ -110,7 +110,7 @@ declare_internal (list, local_var)
|
||||||
int local_var;
|
int local_var;
|
||||||
{
|
{
|
||||||
int flags_on, flags_off, *flags, any_failed, assign_error, pflag, nodefs;
|
int flags_on, flags_off, *flags, any_failed, assign_error, pflag, nodefs;
|
||||||
char *t;
|
char *t, *subscript_start;
|
||||||
SHELL_VAR *var;
|
SHELL_VAR *var;
|
||||||
|
|
||||||
flags_on = flags_off = any_failed = assign_error = pflag = nodefs = 0;
|
flags_on = flags_off = any_failed = assign_error = pflag = nodefs = 0;
|
||||||
|
|
@ -215,7 +215,7 @@ declare_internal (list, local_var)
|
||||||
char *value, *name;
|
char *value, *name;
|
||||||
int offset;
|
int offset;
|
||||||
#if defined (ARRAY_VARS)
|
#if defined (ARRAY_VARS)
|
||||||
int making_array_special, assigning_array_special;
|
int making_array_special, compound_array_assign, simple_array_assign;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
name = savestring (list->word->word);
|
name = savestring (list->word->word);
|
||||||
|
|
@ -230,9 +230,11 @@ declare_internal (list, local_var)
|
||||||
value = "";
|
value = "";
|
||||||
|
|
||||||
#if defined (ARRAY_VARS)
|
#if defined (ARRAY_VARS)
|
||||||
assigning_array_special = 0;
|
compound_array_assign = simple_array_assign = 0;
|
||||||
if (t = strchr (name, '['))
|
subscript_start = (char *)NULL;
|
||||||
|
if (t = strchr (name, '[')) /* ] */
|
||||||
{
|
{
|
||||||
|
subscript_start = t;
|
||||||
*t = '\0';
|
*t = '\0';
|
||||||
making_array_special = 1;
|
making_array_special = 1;
|
||||||
}
|
}
|
||||||
|
|
@ -344,18 +346,12 @@ declare_internal (list, local_var)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (ARRAY_VARS)
|
#if defined (ARRAY_VARS)
|
||||||
/* declare -a name=value does not work; declare name=value when
|
|
||||||
name is already an array does not work. */
|
|
||||||
if ((making_array_special || (flags_on & att_array) || array_p (var)) && offset)
|
if ((making_array_special || (flags_on & att_array) || array_p (var)) && offset)
|
||||||
{
|
{
|
||||||
if (value[0] == '(' && strchr (value, ')'))
|
if (value[0] == '(' && strchr (value, ')'))
|
||||||
assigning_array_special = 1;
|
compound_array_assign = 1;
|
||||||
else
|
else
|
||||||
{
|
simple_array_assign = 1;
|
||||||
builtin_error ("%s: cannot assign to array variables in this way", name);
|
|
||||||
assign_error++;
|
|
||||||
NEXT_VARIABLE ();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cannot use declare +a name to remove an array variable. */
|
/* Cannot use declare +a name to remove an array variable. */
|
||||||
|
|
@ -375,8 +371,18 @@ declare_internal (list, local_var)
|
||||||
VUNSETATTR (var, flags_off);
|
VUNSETATTR (var, flags_off);
|
||||||
|
|
||||||
#if defined (ARRAY_VARS)
|
#if defined (ARRAY_VARS)
|
||||||
if (offset && assigning_array_special)
|
if (offset && compound_array_assign)
|
||||||
assign_array_var_from_string (var, value);
|
assign_array_var_from_string (var, value);
|
||||||
|
else if (simple_array_assign && subscript_start)
|
||||||
|
{
|
||||||
|
/* declare [-a] name[N]=value */
|
||||||
|
*subscript_start = '['; /* ] */
|
||||||
|
var = assign_array_element (name, value);
|
||||||
|
*subscript_start = '\0';
|
||||||
|
}
|
||||||
|
else if (simple_array_assign)
|
||||||
|
/* let bind_array_variable take care of this. */
|
||||||
|
bind_array_variable (name, 0, value);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
/* bind_variable_value duplicates the essential internals of
|
/* bind_variable_value duplicates the essential internals of
|
||||||
|
|
|
||||||
|
|
@ -60,14 +60,6 @@ $END
|
||||||
# include "../pcomplete.h"
|
# include "../pcomplete.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM)
|
|
||||||
static int dyn_load_builtin ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (HAVE_DLCLOSE)
|
|
||||||
static int dyn_unload_builtin ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ENABLED 1
|
#define ENABLED 1
|
||||||
#define DISABLED 2
|
#define DISABLED 2
|
||||||
#define SPECIAL 4
|
#define SPECIAL 4
|
||||||
|
|
@ -79,8 +71,18 @@ static int dyn_unload_builtin ();
|
||||||
#define PFLAG 0x10
|
#define PFLAG 0x10
|
||||||
#define SFLAG 0x20
|
#define SFLAG 0x20
|
||||||
|
|
||||||
static int enable_shell_command ();
|
#if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM)
|
||||||
static void list_some_builtins ();
|
static int dyn_load_builtin __P((WORD_LIST *, int, char *));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined (HAVE_DLCLOSE)
|
||||||
|
static int dyn_unload_builtin __P((char *));
|
||||||
|
static void delete_builtin __P((struct builtin *));
|
||||||
|
static int local_dlclose __P((void *));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void list_some_builtins __P((int));
|
||||||
|
static int enable_shell_command __P((char *, int));
|
||||||
|
|
||||||
/* Enable/disable shell commands present in LIST. If list is not specified,
|
/* Enable/disable shell commands present in LIST. If list is not specified,
|
||||||
then print out a list of shell commands showing which are enabled and
|
then print out a list of shell commands showing which are enabled and
|
||||||
|
|
@ -305,7 +307,7 @@ dyn_load_builtin (list, flags, filename)
|
||||||
name = list->word->word;
|
name = list->word->word;
|
||||||
|
|
||||||
size = strlen (name);
|
size = strlen (name);
|
||||||
struct_name = xmalloc (size + 8);
|
struct_name = (char *)xmalloc (size + 8);
|
||||||
strcpy (struct_name, name);
|
strcpy (struct_name, name);
|
||||||
strcpy (struct_name + size, "_struct");
|
strcpy (struct_name + size, "_struct");
|
||||||
|
|
||||||
|
|
@ -355,7 +357,7 @@ dyn_load_builtin (list, flags, filename)
|
||||||
sizeof (struct builtin));
|
sizeof (struct builtin));
|
||||||
|
|
||||||
new_shell_builtins[total].name = (char *)0;
|
new_shell_builtins[total].name = (char *)0;
|
||||||
new_shell_builtins[total].function = (Function *)0;
|
new_shell_builtins[total].function = (sh_builtin_func_t *)0;
|
||||||
new_shell_builtins[total].flags = 0;
|
new_shell_builtins[total].flags = 0;
|
||||||
|
|
||||||
if (shell_builtins != static_shell_builtins)
|
if (shell_builtins != static_shell_builtins)
|
||||||
|
|
@ -427,7 +429,6 @@ dyn_unload_builtin (name)
|
||||||
struct builtin *b;
|
struct builtin *b;
|
||||||
void *handle;
|
void *handle;
|
||||||
int ref, i;
|
int ref, i;
|
||||||
char *uerror;
|
|
||||||
|
|
||||||
b = builtin_address_internal (name, 1);
|
b = builtin_address_internal (name, 1);
|
||||||
if (b == 0)
|
if (b == 0)
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,9 @@ extern int errno;
|
||||||
#define FEVAL_LONGJMP 0x010
|
#define FEVAL_LONGJMP 0x010
|
||||||
#define FEVAL_HISTORY 0x020
|
#define FEVAL_HISTORY 0x020
|
||||||
#define FEVAL_CHECKBINARY 0x040
|
#define FEVAL_CHECKBINARY 0x040
|
||||||
|
#define FEVAL_REGFILE 0x080
|
||||||
|
|
||||||
extern int interactive, interactive_shell, posixly_correct;
|
extern int posixly_correct;
|
||||||
extern int indirection_level, startup_state, subshell_environment;
|
extern int indirection_level, startup_state, subshell_environment;
|
||||||
extern int return_catch_flag, return_catch_value;
|
extern int return_catch_flag, return_catch_value;
|
||||||
extern int last_command_exit_value;
|
extern int last_command_exit_value;
|
||||||
|
|
@ -68,7 +69,7 @@ int sourcelevel = 0;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
_evalfile (filename, flags)
|
_evalfile (filename, flags)
|
||||||
char *filename;
|
const char *filename;
|
||||||
int flags;
|
int flags;
|
||||||
{
|
{
|
||||||
volatile int old_interactive;
|
volatile int old_interactive;
|
||||||
|
|
@ -77,7 +78,9 @@ _evalfile (filename, flags)
|
||||||
char *string;
|
char *string;
|
||||||
struct stat finfo;
|
struct stat finfo;
|
||||||
size_t file_size;
|
size_t file_size;
|
||||||
VFunction *errfunc;
|
sh_vmsg_func_t *errfunc;
|
||||||
|
|
||||||
|
USE_VAR(pflags);
|
||||||
|
|
||||||
fd = open (filename, O_RDONLY);
|
fd = open (filename, O_RDONLY);
|
||||||
|
|
||||||
|
|
@ -97,14 +100,14 @@ file_error_and_exit:
|
||||||
: ((errno == ENOENT) ? 0 : -1));
|
: ((errno == ENOENT) ? 0 : -1));
|
||||||
}
|
}
|
||||||
|
|
||||||
errfunc = (VFunction *)((flags & FEVAL_BUILTIN) ? builtin_error : internal_error);
|
errfunc = ((flags & FEVAL_BUILTIN) ? builtin_error : internal_error);
|
||||||
|
|
||||||
if (S_ISDIR (finfo.st_mode))
|
if (S_ISDIR (finfo.st_mode))
|
||||||
{
|
{
|
||||||
(*errfunc) ("%s: is a directory", filename);
|
(*errfunc) ("%s: is a directory", filename);
|
||||||
return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1);
|
return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1);
|
||||||
}
|
}
|
||||||
else if (S_ISREG (finfo.st_mode) == 0)
|
else if ((flags & FEVAL_REGFILE) && S_ISREG (finfo.st_mode) == 0)
|
||||||
{
|
{
|
||||||
(*errfunc) ("%s: not a regular file", filename);
|
(*errfunc) ("%s: not a regular file", filename);
|
||||||
return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1);
|
return ((flags & FEVAL_BUILTIN) ? EXECUTION_FAILURE : -1);
|
||||||
|
|
@ -122,7 +125,7 @@ file_error_and_exit:
|
||||||
setmode (fd, O_TEXT);
|
setmode (fd, O_TEXT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
string = xmalloc (1 + file_size);
|
string = (char *)xmalloc (1 + file_size);
|
||||||
result = read (fd, string, file_size);
|
result = read (fd, string, file_size);
|
||||||
string[result] = '\0';
|
string[result] = '\0';
|
||||||
|
|
||||||
|
|
@ -143,7 +146,7 @@ file_error_and_exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & FEVAL_CHECKBINARY) &&
|
if ((flags & FEVAL_CHECKBINARY) &&
|
||||||
check_binary_file ((unsigned char *)string, (result > 80) ? 80 : result))
|
check_binary_file (string, (result > 80) ? 80 : result))
|
||||||
{
|
{
|
||||||
free (string);
|
free (string);
|
||||||
(*errfunc) ("%s: cannot execute binary file", filename);
|
(*errfunc) ("%s: cannot execute binary file", filename);
|
||||||
|
|
@ -207,7 +210,7 @@ file_error_and_exit:
|
||||||
|
|
||||||
int
|
int
|
||||||
maybe_execute_file (fname, force_noninteractive)
|
maybe_execute_file (fname, force_noninteractive)
|
||||||
char *fname;
|
const char *fname;
|
||||||
int force_noninteractive;
|
int force_noninteractive;
|
||||||
{
|
{
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
@ -225,20 +228,20 @@ maybe_execute_file (fname, force_noninteractive)
|
||||||
#if defined (HISTORY)
|
#if defined (HISTORY)
|
||||||
int
|
int
|
||||||
fc_execute_file (filename)
|
fc_execute_file (filename)
|
||||||
char *filename;
|
const char *filename;
|
||||||
{
|
{
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
/* We want these commands to show up in the history list if
|
/* We want these commands to show up in the history list if
|
||||||
remember_on_history is set. */
|
remember_on_history is set. */
|
||||||
flags = FEVAL_ENOENTOK|FEVAL_HISTORY;
|
flags = FEVAL_ENOENTOK|FEVAL_HISTORY|FEVAL_REGFILE;
|
||||||
return (_evalfile (filename, flags));
|
return (_evalfile (filename, flags));
|
||||||
}
|
}
|
||||||
#endif /* HISTORY */
|
#endif /* HISTORY */
|
||||||
|
|
||||||
int
|
int
|
||||||
source_file (filename)
|
source_file (filename)
|
||||||
char *filename;
|
const char *filename;
|
||||||
{
|
{
|
||||||
int flags;
|
int flags;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@
|
||||||
#include "../input.h"
|
#include "../input.h"
|
||||||
#include "../execute_cmd.h"
|
#include "../execute_cmd.h"
|
||||||
#include "../redir.h"
|
#include "../redir.h"
|
||||||
|
#include "../trap.h"
|
||||||
|
|
||||||
#if defined (HISTORY)
|
#if defined (HISTORY)
|
||||||
# include "../bashhist.h"
|
# include "../bashhist.h"
|
||||||
|
|
@ -53,20 +54,15 @@ extern int errno;
|
||||||
|
|
||||||
#define IS_BUILTIN(s) (builtin_address_internal(s, 0) != (struct builtin *)NULL)
|
#define IS_BUILTIN(s) (builtin_address_internal(s, 0) != (struct builtin *)NULL)
|
||||||
|
|
||||||
extern void run_trap_cleanup ();
|
|
||||||
extern int zwrite ();
|
|
||||||
|
|
||||||
extern int interactive, interactive_shell;
|
|
||||||
extern int indirection_level, startup_state, subshell_environment;
|
extern int indirection_level, startup_state, subshell_environment;
|
||||||
extern int line_number;
|
extern int line_number;
|
||||||
extern int last_command_exit_value;
|
extern int last_command_exit_value;
|
||||||
extern int running_trap;
|
extern int running_trap;
|
||||||
extern int posixly_correct;
|
extern int posixly_correct;
|
||||||
extern COMMAND *global_command;
|
|
||||||
|
|
||||||
int parse_and_execute_level = 0;
|
int parse_and_execute_level = 0;
|
||||||
|
|
||||||
static int cat_file ();
|
static int cat_file __P((REDIRECT *));
|
||||||
|
|
||||||
/* How to force parse_and_execute () to clean up after itself. */
|
/* How to force parse_and_execute () to clean up after itself. */
|
||||||
void
|
void
|
||||||
|
|
@ -92,7 +88,7 @@ parse_and_execute_cleanup ()
|
||||||
int
|
int
|
||||||
parse_and_execute (string, from_file, flags)
|
parse_and_execute (string, from_file, flags)
|
||||||
char *string;
|
char *string;
|
||||||
char *from_file;
|
const char *from_file;
|
||||||
int flags;
|
int flags;
|
||||||
{
|
{
|
||||||
int code, x;
|
int code, x;
|
||||||
|
|
@ -297,7 +293,8 @@ cat_file (r)
|
||||||
REDIRECT *r;
|
REDIRECT *r;
|
||||||
{
|
{
|
||||||
char lbuf[128], *fn;
|
char lbuf[128], *fn;
|
||||||
int nr, fd, rval;
|
int fd, rval;
|
||||||
|
ssize_t nr;
|
||||||
|
|
||||||
if (r->instruction != r_input_direction)
|
if (r->instruction != r_input_direction)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -344,5 +341,5 @@ cat_file (r)
|
||||||
free (fn);
|
free (fn);
|
||||||
close (fd);
|
close (fd);
|
||||||
|
|
||||||
return (0);
|
return (rval);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ $END
|
||||||
extern int errno;
|
extern int errno;
|
||||||
#endif /* !errno */
|
#endif /* !errno */
|
||||||
|
|
||||||
extern int interactive, interactive_shell, subshell_environment;
|
extern int subshell_environment;
|
||||||
extern REDIRECT *redirection_undo_list;
|
extern REDIRECT *redirection_undo_list;
|
||||||
|
|
||||||
int no_exit_on_failed_exec;
|
int no_exit_on_failed_exec;
|
||||||
|
|
@ -79,7 +79,7 @@ mkdashname (name)
|
||||||
{
|
{
|
||||||
char *ret;
|
char *ret;
|
||||||
|
|
||||||
ret = xmalloc (2 + strlen (name));
|
ret = (char *)xmalloc (2 + strlen (name));
|
||||||
ret[0] = '-';
|
ret[0] = '-';
|
||||||
strcpy (ret + 1, name);
|
strcpy (ret + 1, name);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
|
|
@ -43,12 +43,12 @@ $END
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "builtext.h" /* for jobs_builtin */
|
#include "builtext.h" /* for jobs_builtin */
|
||||||
|
|
||||||
extern int interactive, login_shell;
|
|
||||||
extern int last_command_exit_value;
|
extern int last_command_exit_value;
|
||||||
extern Function *this_shell_builtin;
|
extern int subshell_environment;
|
||||||
extern Function *last_shell_builtin;
|
extern sh_builtin_func_t *this_shell_builtin;
|
||||||
|
extern sh_builtin_func_t *last_shell_builtin;
|
||||||
|
|
||||||
static int exit_or_logout ();
|
static int exit_or_logout __P((WORD_LIST *));
|
||||||
static int sourced_logout;
|
static int sourced_logout;
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
@ -119,10 +119,10 @@ exit_or_logout (list)
|
||||||
|
|
||||||
/* Get return value if present. This means that you can type
|
/* Get return value if present. This means that you can type
|
||||||
`logout 5' to a shell, and it returns 5. */
|
`logout 5' to a shell, and it returns 5. */
|
||||||
exit_value = list ? get_numeric_arg (list, 1) : last_command_exit_value;
|
exit_value = list ? get_exitstat (list) : last_command_exit_value;
|
||||||
|
|
||||||
/* Run our `~/.bash_logout' file if it exists, and this is a login shell. */
|
/* Run our `~/.bash_logout' file if it exists, and this is a login shell. */
|
||||||
if (login_shell && sourced_logout++ == 0)
|
if (login_shell && sourced_logout++ == 0 && subshell_environment == 0)
|
||||||
{
|
{
|
||||||
maybe_execute_file ("~/.bash_logout", 1);
|
maybe_execute_file ("~/.bash_logout", 1);
|
||||||
#ifdef SYS_BASH_LOGOUT
|
#ifdef SYS_BASH_LOGOUT
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@ $END
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <chartypes.h>
|
||||||
|
|
||||||
#include "../bashansi.h"
|
#include "../bashansi.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
@ -84,7 +85,7 @@ extern int echo_input_at_read;
|
||||||
extern int current_command_line_count;
|
extern int current_command_line_count;
|
||||||
extern int literal_history;
|
extern int literal_history;
|
||||||
|
|
||||||
extern int unlink ();
|
extern int unlink __P((const char *));
|
||||||
|
|
||||||
extern FILE *sh_mktmpfp __P((char *, int, char **));
|
extern FILE *sh_mktmpfp __P((char *, int, char **));
|
||||||
|
|
||||||
|
|
@ -117,10 +118,6 @@ extern FILE *sh_mktmpfp __P((char *, int, char **));
|
||||||
Equivalent to !command:sg/pat/rep execpt there can be multiple PAT=REP's.
|
Equivalent to !command:sg/pat/rep execpt there can be multiple PAT=REP's.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static char *fc_dosubs (), *fc_gethist (), *fc_readline ();
|
|
||||||
static int fc_gethnum (), fc_number ();
|
|
||||||
static void fc_replhist (), fc_addhist ();
|
|
||||||
|
|
||||||
/* Data structure describing a list of global replacements to perform. */
|
/* Data structure describing a list of global replacements to perform. */
|
||||||
typedef struct repl {
|
typedef struct repl {
|
||||||
struct repl *next;
|
struct repl *next;
|
||||||
|
|
@ -146,6 +143,16 @@ typedef struct repl {
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
static char *fc_dosubs __P((char *, REPL *));
|
||||||
|
static char *fc_gethist __P((char *, HIST_ENTRY **));
|
||||||
|
static int fc_gethnum __P((char *, HIST_ENTRY **));
|
||||||
|
static int fc_number __P((WORD_LIST *));
|
||||||
|
static void fc_replhist __P((char *));
|
||||||
|
#ifdef INCLUDE_UNUSED
|
||||||
|
static char *fc_readline __P((FILE *));
|
||||||
|
static void fc_addhist __P((char *));
|
||||||
|
#endif
|
||||||
|
|
||||||
/* String to execute on a file that we want to edit. */
|
/* String to execute on a file that we want to edit. */
|
||||||
#define FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-vi}}"
|
#define FC_EDIT_COMMAND "${FCEDIT:-${EDITOR:-vi}}"
|
||||||
|
|
||||||
|
|
@ -159,7 +166,7 @@ fc_builtin (list)
|
||||||
int histbeg, histend, last_hist, retval, opt;
|
int histbeg, histend, last_hist, retval, opt;
|
||||||
FILE *stream;
|
FILE *stream;
|
||||||
REPL *rlist, *rl;
|
REPL *rlist, *rl;
|
||||||
char *ename, *command, *newcom, *line;
|
char *ename, *command, *newcom;
|
||||||
HIST_ENTRY **hlist;
|
HIST_ENTRY **hlist;
|
||||||
char *fn;
|
char *fn;
|
||||||
|
|
||||||
|
|
@ -445,7 +452,7 @@ fc_gethnum (command, hlist)
|
||||||
s++;
|
s++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (s && digit(*s))
|
if (s && DIGIT(*s))
|
||||||
{
|
{
|
||||||
n = atoi (s);
|
n = atoi (s);
|
||||||
n *= sign;
|
n *= sign;
|
||||||
|
|
@ -494,6 +501,7 @@ fc_gethist (command, hlist)
|
||||||
return ((char *)NULL);
|
return ((char *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef INCLUDE_UNUSED
|
||||||
/* Read the edited history lines from STREAM and return them
|
/* Read the edited history lines from STREAM and return them
|
||||||
one at a time. This can read unlimited length lines. The
|
one at a time. This can read unlimited length lines. The
|
||||||
caller should free the storage. */
|
caller should free the storage. */
|
||||||
|
|
@ -508,7 +516,7 @@ fc_readline (stream)
|
||||||
while ((c = getc (stream)) != EOF)
|
while ((c = getc (stream)) != EOF)
|
||||||
{
|
{
|
||||||
if ((lindex + 2) >= line_len)
|
if ((lindex + 2) >= line_len)
|
||||||
line = (char *) xrealloc (line, (line_len += 128));
|
line = (char *)xrealloc (line, (line_len += 128));
|
||||||
|
|
||||||
if (c == '\n')
|
if (c == '\n')
|
||||||
{
|
{
|
||||||
|
|
@ -535,6 +543,7 @@ fc_readline (stream)
|
||||||
line[lindex++] = '\0';
|
line[lindex++] = '\0';
|
||||||
return (line);
|
return (line);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Perform the SUBS on COMMAND.
|
/* Perform the SUBS on COMMAND.
|
||||||
SUBS is a list of substitutions, and COMMAND is a simple string.
|
SUBS is a list of substitutions, and COMMAND is a simple string.
|
||||||
|
|
@ -604,6 +613,7 @@ fc_replhist (command)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef INCLUDE_UNUSED
|
||||||
/* Add LINE to the history, after removing a single trailing newline. */
|
/* Add LINE to the history, after removing a single trailing newline. */
|
||||||
static void
|
static void
|
||||||
fc_addhist (line)
|
fc_addhist (line)
|
||||||
|
|
@ -619,4 +629,6 @@ fc_addhist (line)
|
||||||
if (line && *line)
|
if (line && *line)
|
||||||
maybe_add_history (line);
|
maybe_add_history (line);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif /* HISTORY */
|
#endif /* HISTORY */
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ $END
|
||||||
#if defined (JOB_CONTROL)
|
#if defined (JOB_CONTROL)
|
||||||
extern char *this_command_name;
|
extern char *this_command_name;
|
||||||
|
|
||||||
static int fg_bg ();
|
static int fg_bg __P((WORD_LIST *, int));
|
||||||
|
|
||||||
/* How to bring a job into the foreground. */
|
/* How to bring a job into the foreground. */
|
||||||
int
|
int
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,8 @@
|
||||||
#ifndef _SH_GETOPT_H
|
#ifndef _SH_GETOPT_H
|
||||||
#define _SH_GETOPT_H 1
|
#define _SH_GETOPT_H 1
|
||||||
|
|
||||||
|
#include "stdc.h"
|
||||||
|
|
||||||
/* For communication from `getopt' to the caller.
|
/* For communication from `getopt' to the caller.
|
||||||
When `getopt' finds an option that takes an argument,
|
When `getopt' finds an option that takes an argument,
|
||||||
the argument value is returned here.
|
the argument value is returned here.
|
||||||
|
|
@ -54,7 +56,7 @@ extern int sh_optopt;
|
||||||
/* Set to 1 when an unrecognized option is encountered. */
|
/* Set to 1 when an unrecognized option is encountered. */
|
||||||
extern int sh_badopt;
|
extern int sh_badopt;
|
||||||
|
|
||||||
extern int sh_getopt ();
|
extern int sh_getopt __P((int, char *const *, const char *));
|
||||||
extern void sh_getopt_restore_state ();
|
extern void sh_getopt_restore_state __P((char **));
|
||||||
|
|
||||||
#endif /* _SH_GETOPT_H */
|
#endif /* _SH_GETOPT_H */
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,6 @@ $END
|
||||||
#define G_ARG_MISSING -3
|
#define G_ARG_MISSING -3
|
||||||
|
|
||||||
extern char *this_command_name;
|
extern char *this_command_name;
|
||||||
extern WORD_LIST *rest_of_args;
|
|
||||||
|
|
||||||
/* getopts_reset is magic code for when OPTIND is reset. N is the
|
/* getopts_reset is magic code for when OPTIND is reset. N is the
|
||||||
value that has just been assigned to OPTIND. */
|
value that has just been assigned to OPTIND. */
|
||||||
|
|
@ -304,14 +303,10 @@ getopts_builtin (list)
|
||||||
}
|
}
|
||||||
|
|
||||||
reset_internal_getopt ();
|
reset_internal_getopt ();
|
||||||
while ((ret = internal_getopt (list, "")) != -1)
|
if (internal_getopt (list, "") != -1)
|
||||||
{
|
{
|
||||||
switch (ret)
|
builtin_usage ();
|
||||||
{
|
return (EX_USAGE);
|
||||||
default:
|
|
||||||
builtin_usage ();
|
|
||||||
return (EX_USAGE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
list = loptend;
|
list = loptend;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,15 @@ $PRODUCES hash.c
|
||||||
|
|
||||||
$BUILTIN hash
|
$BUILTIN hash
|
||||||
$FUNCTION hash_builtin
|
$FUNCTION hash_builtin
|
||||||
$SHORT_DOC hash [-r] [-p pathname] [name ...]
|
$SHORT_DOC hash [-r] [-p pathname] [-t] [name ...]
|
||||||
For each NAME, the full pathname of the command is determined and
|
For each NAME, the full pathname of the command is determined and
|
||||||
remembered. If the -p option is supplied, PATHNAME is used as the
|
remembered. If the -p option is supplied, PATHNAME is used as the
|
||||||
full pathname of NAME, and no path search is performed. The -r
|
full pathname of NAME, and no path search is performed. The -r
|
||||||
option causes the shell to forget all remembered locations. If no
|
option causes the shell to forget all remembered locations.
|
||||||
arguments are given, information about remembered commands is displayed.
|
If the -t option is supplied the full pathname to which each NAME
|
||||||
|
corresponds is printed. If multiple NAME arguments are supplied with
|
||||||
|
-t, the NAME is printed before the hashed full pathname. If no arguments
|
||||||
|
are given, information about remembered commands is displayed.
|
||||||
$END
|
$END
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
@ -56,8 +59,9 @@ $END
|
||||||
extern int dot_found_in_search;
|
extern int dot_found_in_search;
|
||||||
extern char *this_command_name;
|
extern char *this_command_name;
|
||||||
|
|
||||||
static int add_hashed_command ();
|
static int add_hashed_command __P((char *, int));
|
||||||
static int print_hashed_commands ();
|
static int print_hashed_commands __P((void));
|
||||||
|
static int list_hashed_filename_targets __P((WORD_LIST *));
|
||||||
|
|
||||||
/* Print statistics on the current state of hashed commands. If LIST is
|
/* Print statistics on the current state of hashed commands. If LIST is
|
||||||
not empty, then rehash (or hash in the first place) the specified
|
not empty, then rehash (or hash in the first place) the specified
|
||||||
|
|
@ -66,7 +70,7 @@ int
|
||||||
hash_builtin (list)
|
hash_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
int expunge_hash_table, opt;
|
int expunge_hash_table, list_targets, opt;
|
||||||
char *w, *pathname;
|
char *w, *pathname;
|
||||||
|
|
||||||
if (hashing_enabled == 0)
|
if (hashing_enabled == 0)
|
||||||
|
|
@ -75,10 +79,10 @@ hash_builtin (list)
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
expunge_hash_table = 0;
|
expunge_hash_table = list_targets = 0;
|
||||||
pathname = (char *)NULL;
|
pathname = (char *)NULL;
|
||||||
reset_internal_getopt ();
|
reset_internal_getopt ();
|
||||||
while ((opt = internal_getopt (list, "rp:")) != -1)
|
while ((opt = internal_getopt (list, "rp:t")) != -1)
|
||||||
{
|
{
|
||||||
switch (opt)
|
switch (opt)
|
||||||
{
|
{
|
||||||
|
|
@ -88,6 +92,9 @@ hash_builtin (list)
|
||||||
case 'p':
|
case 'p':
|
||||||
pathname = list_optarg;
|
pathname = list_optarg;
|
||||||
break;
|
break;
|
||||||
|
case 't':
|
||||||
|
list_targets = 1;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
builtin_usage ();
|
builtin_usage ();
|
||||||
return (EX_USAGE);
|
return (EX_USAGE);
|
||||||
|
|
@ -95,6 +102,13 @@ hash_builtin (list)
|
||||||
}
|
}
|
||||||
list = loptend;
|
list = loptend;
|
||||||
|
|
||||||
|
/* hash -t requires at least one argument. */
|
||||||
|
if (list == 0 && list_targets)
|
||||||
|
{
|
||||||
|
builtin_error("-t: argument required");
|
||||||
|
return (EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
/* We want hash -r to be silent, but hash -- to print hashing info. That
|
/* We want hash -r to be silent, but hash -- to print hashing info. That
|
||||||
is the reason for the test of expunge_hash_table. */
|
is the reason for the test of expunge_hash_table. */
|
||||||
if (list == 0 && expunge_hash_table == 0)
|
if (list == 0 && expunge_hash_table == 0)
|
||||||
|
|
@ -108,6 +122,12 @@ hash_builtin (list)
|
||||||
if (expunge_hash_table)
|
if (expunge_hash_table)
|
||||||
flush_hashed_filenames ();
|
flush_hashed_filenames ();
|
||||||
|
|
||||||
|
/* If someone runs `hash -r -t xyz' he will be disappointed. */
|
||||||
|
if (list_targets)
|
||||||
|
{
|
||||||
|
return (list_hashed_filename_targets (list));
|
||||||
|
}
|
||||||
|
|
||||||
#if defined (RESTRICTED_SHELL)
|
#if defined (RESTRICTED_SHELL)
|
||||||
if (restricted && pathname && strchr (pathname, '/'))
|
if (restricted && pathname && strchr (pathname, '/'))
|
||||||
{
|
{
|
||||||
|
|
@ -198,3 +218,31 @@ print_hashed_commands ()
|
||||||
}
|
}
|
||||||
return (any_printed);
|
return (any_printed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
list_hashed_filename_targets (list)
|
||||||
|
WORD_LIST *list;
|
||||||
|
{
|
||||||
|
int all_found, multiple;
|
||||||
|
char *target;
|
||||||
|
WORD_LIST *l;
|
||||||
|
|
||||||
|
all_found = 1;
|
||||||
|
multiple = list->next != 0;
|
||||||
|
|
||||||
|
for (l = list; l; l = l->next)
|
||||||
|
{
|
||||||
|
target = find_hashed_filename (l->word->word);
|
||||||
|
if (target == 0)
|
||||||
|
{
|
||||||
|
all_found = 0;
|
||||||
|
builtin_error ("%s: not found", l->word->word);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (multiple)
|
||||||
|
printf ("%s\t", l->word->word);
|
||||||
|
printf ("%s\n", target);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (all_found ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,15 +47,13 @@ $END
|
||||||
#include "../shell.h"
|
#include "../shell.h"
|
||||||
#include "../builtins.h"
|
#include "../builtins.h"
|
||||||
#include "../pathexp.h"
|
#include "../pathexp.h"
|
||||||
|
#include "common.h"
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
|
|
||||||
#include <glob/fnmatch.h>
|
#include <glob/strmatch.h>
|
||||||
#include <glob/glob.h>
|
#include <glob/glob.h>
|
||||||
|
|
||||||
extern void builtin_error ();
|
static void show_builtin_command_help __P((void));
|
||||||
extern void builtin_usage ();
|
|
||||||
|
|
||||||
static void show_builtin_command_help ();
|
|
||||||
|
|
||||||
/* Print out a list of the known functions in the shell, and what they do.
|
/* Print out a list of the known functions in the shell, and what they do.
|
||||||
If LIST is supplied, print out the list which matches for each pattern
|
If LIST is supplied, print out the list which matches for each pattern
|
||||||
|
|
@ -109,7 +107,7 @@ help_builtin (list)
|
||||||
{
|
{
|
||||||
QUIT;
|
QUIT;
|
||||||
if ((strncmp (pattern, name, plen) == 0) ||
|
if ((strncmp (pattern, name, plen) == 0) ||
|
||||||
(fnmatch (pattern, name, FNMATCH_EXTFLAG) != FNM_NOMATCH))
|
(strmatch (pattern, name, FNMATCH_EXTFLAG) != FNM_NOMATCH))
|
||||||
{
|
{
|
||||||
printf ("%s: %s\n", name, shell_builtins[i].short_doc);
|
printf ("%s: %s\n", name, shell_builtins[i].short_doc);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,10 +70,11 @@ $END
|
||||||
extern int errno;
|
extern int errno;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void display_history ();
|
static void display_history __P((WORD_LIST *));
|
||||||
static void push_history ();
|
static int delete_histent __P((int));
|
||||||
static int expand_and_print_history ();
|
static int delete_last_history __P((void));
|
||||||
static int delete_histent ();
|
static void push_history __P((WORD_LIST *));
|
||||||
|
static int expand_and_print_history __P((WORD_LIST *));
|
||||||
|
|
||||||
#define AFLAG 0x01
|
#define AFLAG 0x01
|
||||||
#define RFLAG 0x02
|
#define RFLAG 0x02
|
||||||
|
|
@ -163,17 +164,14 @@ history_builtin (list)
|
||||||
#endif
|
#endif
|
||||||
else if (flags & DFLAG)
|
else if (flags & DFLAG)
|
||||||
{
|
{
|
||||||
if (legal_number (delete_arg, &delete_offset) == 0)
|
if ((legal_number (delete_arg, &delete_offset) == 0)
|
||||||
|
|| (delete_offset < history_base)
|
||||||
|
|| (delete_offset > (history_base + history_length)))
|
||||||
{
|
{
|
||||||
builtin_error ("%s: not a valid history position", delete_arg);
|
builtin_error ("%s: not a valid history position", delete_arg);
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
opt = delete_offset;
|
opt = delete_offset;
|
||||||
if (opt < history_base || opt < 0 || opt > (history_base + history_length))
|
|
||||||
{
|
|
||||||
builtin_error ("%d: not a valid history position", opt);
|
|
||||||
return (EXECUTION_FAILURE);
|
|
||||||
}
|
|
||||||
result = delete_histent (opt - history_base);
|
result = delete_histent (opt - history_base);
|
||||||
/* Since remove_history changes history_length, this can happen if
|
/* Since remove_history changes history_length, this can happen if
|
||||||
we delete the last history entry. */
|
we delete the last history entry. */
|
||||||
|
|
@ -217,16 +215,17 @@ display_history (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
int limited, limit;
|
long limit;
|
||||||
HIST_ENTRY **hlist;
|
HIST_ENTRY **hlist;
|
||||||
|
|
||||||
if (list)
|
if (list)
|
||||||
{
|
{
|
||||||
limited = 1;
|
|
||||||
limit = get_numeric_arg (list, 0);
|
limit = get_numeric_arg (list, 0);
|
||||||
|
if (limit < 0)
|
||||||
|
limit = -limit;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
limited = limit = 0;
|
limit = -1;
|
||||||
|
|
||||||
hlist = history_list ();
|
hlist = history_list ();
|
||||||
|
|
||||||
|
|
@ -235,10 +234,9 @@ display_history (list)
|
||||||
for (i = 0; hlist[i]; i++)
|
for (i = 0; hlist[i]; i++)
|
||||||
;
|
;
|
||||||
|
|
||||||
if (limit < 0)
|
if (0 <= limit && limit < i)
|
||||||
limit = -limit;
|
i -= limit;
|
||||||
|
else
|
||||||
if ((limited == 0) || ((i -= limit) < 0))
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
while (hlist[i])
|
while (hlist[i])
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,7 @@ $END
|
||||||
#define JSTATE_RUNNING 0x1
|
#define JSTATE_RUNNING 0x1
|
||||||
#define JSTATE_STOPPED 0x2
|
#define JSTATE_STOPPED 0x2
|
||||||
|
|
||||||
extern int job_control, interactive_shell;
|
static int execute_list_with_replacements __P((WORD_LIST *));
|
||||||
static int execute_list_with_replacements ();
|
|
||||||
|
|
||||||
/* The `jobs' command. Prints outs a list of active jobs. If the
|
/* The `jobs' command. Prints outs a list of active jobs. If the
|
||||||
argument `-l' is given, then the process id's are printed also.
|
argument `-l' is given, then the process id's are printed also.
|
||||||
|
|
@ -220,6 +219,7 @@ disown_builtin (list)
|
||||||
{
|
{
|
||||||
int opt, job, retval, nohup_only, running_jobs, all_jobs;
|
int opt, job, retval, nohup_only, running_jobs, all_jobs;
|
||||||
sigset_t set, oset;
|
sigset_t set, oset;
|
||||||
|
long pid_value;
|
||||||
|
|
||||||
nohup_only = running_jobs = all_jobs = 0;
|
nohup_only = running_jobs = all_jobs = 0;
|
||||||
reset_internal_getopt ();
|
reset_internal_getopt ();
|
||||||
|
|
@ -257,8 +257,8 @@ disown_builtin (list)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
BLOCK_CHILD (set, oset);
|
BLOCK_CHILD (set, oset);
|
||||||
job = (list && all_digits(list->word->word))
|
job = (list && legal_number (list->word->word, &pid_value) && pid_value == (pid_t) pid_value)
|
||||||
? get_job_by_pid (atoi(list->word->word), 0)
|
? get_job_by_pid ((pid_t) pid_value, 0)
|
||||||
: get_job_spec (list);
|
: get_job_spec (list);
|
||||||
|
|
||||||
if (job == NO_JOB || jobs == 0 || job < 0 || job >= job_slots || jobs[job] == 0)
|
if (job == NO_JOB || jobs == 0 || job < 0 || job >= job_slots || jobs[job] == 0)
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,6 @@ extern int errno;
|
||||||
#endif /* !errno */
|
#endif /* !errno */
|
||||||
|
|
||||||
#if defined (JOB_CONTROL)
|
#if defined (JOB_CONTROL)
|
||||||
extern int interactive;
|
|
||||||
extern int job_control;
|
|
||||||
extern int posixly_correct;
|
extern int posixly_correct;
|
||||||
|
|
||||||
#if !defined (CONTINUE_AFTER_KILL_ERROR)
|
#if !defined (CONTINUE_AFTER_KILL_ERROR)
|
||||||
|
|
@ -78,6 +76,7 @@ kill_builtin (list)
|
||||||
int signal, any_succeeded, listing, saw_signal;
|
int signal, any_succeeded, listing, saw_signal;
|
||||||
char *sigspec, *word;
|
char *sigspec, *word;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
long pid_value;
|
||||||
|
|
||||||
if (list == 0)
|
if (list == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -164,10 +163,10 @@ kill_builtin (list)
|
||||||
if (*word == '-')
|
if (*word == '-')
|
||||||
word++;
|
word++;
|
||||||
|
|
||||||
if (*word && all_digits (word))
|
if (*word && legal_number (word, &pid_value) && (pid_value == (pid_t)pid_value))
|
||||||
{
|
{
|
||||||
/* Use the entire argument in case of minus sign presence. */
|
/* Use the entire argument in case of minus sign presence. */
|
||||||
pid = (pid_t) atoi (list->word->word);
|
pid = (pid_t) pid_value;
|
||||||
|
|
||||||
if (kill_pid (pid, signal, 0) < 0)
|
if (kill_pid (pid, signal, 0) < 0)
|
||||||
goto signal_error;
|
goto signal_error;
|
||||||
|
|
@ -207,12 +206,10 @@ kill_builtin (list)
|
||||||
if (kill_pid (pid, signal, 1) < 0)
|
if (kill_pid (pid, signal, 1) < 0)
|
||||||
{
|
{
|
||||||
signal_error:
|
signal_error:
|
||||||
if (errno == EPERM)
|
if (errno == EINVAL)
|
||||||
builtin_error ("(%d) - Not owner", (int)pid);
|
|
||||||
else if (errno == ESRCH)
|
|
||||||
builtin_error ("(%d) - No such pid", (int)pid);
|
|
||||||
else
|
|
||||||
builtin_error ("Invalid signal %d", signal);
|
builtin_error ("Invalid signal %d", signal);
|
||||||
|
else
|
||||||
|
builtin_error ("(%ld) - %s", (long)pid, strerror (errno));
|
||||||
CONTINUE_OR_FAIL;
|
CONTINUE_OR_FAIL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ let_builtin (list)
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ((ret == 0L) ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
|
return ((ret == 0) ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef INCLUDE_UNUSED
|
#ifdef INCLUDE_UNUSED
|
||||||
|
|
@ -113,6 +113,6 @@ exp_builtin (list)
|
||||||
exp = string_list (list);
|
exp = string_list (list);
|
||||||
ret = evalexp (exp, &expok);
|
ret = evalexp (exp, &expok);
|
||||||
(void)free (exp);
|
(void)free (exp);
|
||||||
return (((ret == 0L) || (expok == 0)) ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
|
return (((ret == 0) || (expok == 0)) ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,8 @@ Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
#include "../bashansi.h"
|
#include "../bashansi.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "stdc.h"
|
||||||
|
|
||||||
#define DOCFILE "builtins.texi"
|
#define DOCFILE "builtins.texi"
|
||||||
|
|
||||||
static char *xmalloc (), *xrealloc ();
|
static char *xmalloc (), *xrealloc ();
|
||||||
|
|
@ -223,7 +225,7 @@ main (argc, argv)
|
||||||
if (struct_filename)
|
if (struct_filename)
|
||||||
{
|
{
|
||||||
temp_struct_filename = xmalloc (15);
|
temp_struct_filename = xmalloc (15);
|
||||||
sprintf (temp_struct_filename, "mk-%d", (int) getpid ());
|
sprintf (temp_struct_filename, "mk-%ld", (long) getpid ());
|
||||||
structfile = fopen (temp_struct_filename, "w");
|
structfile = fopen (temp_struct_filename, "w");
|
||||||
|
|
||||||
if (!structfile)
|
if (!structfile)
|
||||||
|
|
@ -378,17 +380,22 @@ array_free (array)
|
||||||
|
|
||||||
/* The definition of a function. */
|
/* The definition of a function. */
|
||||||
typedef int Function ();
|
typedef int Function ();
|
||||||
|
typedef int mk_handler_func_t __P((char *, DEF_FILE *, char *));
|
||||||
|
|
||||||
/* Structure handles processor directives. */
|
/* Structure handles processor directives. */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char *directive;
|
char *directive;
|
||||||
Function *function;
|
mk_handler_func_t *function;
|
||||||
} HANDLER_ENTRY;
|
} HANDLER_ENTRY;
|
||||||
|
|
||||||
extern int
|
extern int builtin_handler __P((char *, DEF_FILE *, char *));
|
||||||
builtin_handler (), function_handler (), short_doc_handler (),
|
extern int function_handler __P((char *, DEF_FILE *, char *));
|
||||||
comment_handler (), depends_on_handler (), produces_handler (),
|
extern int short_doc_handler __P((char *, DEF_FILE *, char *));
|
||||||
end_handler (), docname_handler ();
|
extern int comment_handler __P((char *, DEF_FILE *, char *));
|
||||||
|
extern int depends_on_handler __P((char *, DEF_FILE *, char *));
|
||||||
|
extern int produces_handler __P((char *, DEF_FILE *, char *));
|
||||||
|
extern int end_handler __P((char *, DEF_FILE *, char *));
|
||||||
|
extern int docname_handler __P((char *, DEF_FILE *, char *));
|
||||||
|
|
||||||
HANDLER_ENTRY handlers[] = {
|
HANDLER_ENTRY handlers[] = {
|
||||||
{ "BUILTIN", builtin_handler },
|
{ "BUILTIN", builtin_handler },
|
||||||
|
|
@ -400,7 +407,7 @@ HANDLER_ENTRY handlers[] = {
|
||||||
{ "DEPENDS_ON", depends_on_handler },
|
{ "DEPENDS_ON", depends_on_handler },
|
||||||
{ "PRODUCES", produces_handler },
|
{ "PRODUCES", produces_handler },
|
||||||
{ "END", end_handler },
|
{ "END", end_handler },
|
||||||
{ (char *)NULL, (Function *)NULL }
|
{ (char *)NULL, (mk_handler_func_t *)NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Return the entry in the table of handlers for NAME. */
|
/* Return the entry in the table of handlers for NAME. */
|
||||||
|
|
@ -724,8 +731,9 @@ add_documentation (defs, line)
|
||||||
/* How to handle the $BUILTIN directive. */
|
/* How to handle the $BUILTIN directive. */
|
||||||
int
|
int
|
||||||
builtin_handler (self, defs, arg)
|
builtin_handler (self, defs, arg)
|
||||||
char *self, *arg;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
BUILTIN_DESC *new;
|
BUILTIN_DESC *new;
|
||||||
char *name;
|
char *name;
|
||||||
|
|
@ -769,8 +777,9 @@ builtin_handler (self, defs, arg)
|
||||||
/* How to handle the $FUNCTION directive. */
|
/* How to handle the $FUNCTION directive. */
|
||||||
int
|
int
|
||||||
function_handler (self, defs, arg)
|
function_handler (self, defs, arg)
|
||||||
char *self, *arg;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
register BUILTIN_DESC *builtin;
|
register BUILTIN_DESC *builtin;
|
||||||
|
|
||||||
|
|
@ -793,8 +802,9 @@ function_handler (self, defs, arg)
|
||||||
/* How to handle the $DOCNAME directive. */
|
/* How to handle the $DOCNAME directive. */
|
||||||
int
|
int
|
||||||
docname_handler (self, defs, arg)
|
docname_handler (self, defs, arg)
|
||||||
char *self, *arg;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
register BUILTIN_DESC *builtin;
|
register BUILTIN_DESC *builtin;
|
||||||
|
|
||||||
|
|
@ -812,8 +822,9 @@ docname_handler (self, defs, arg)
|
||||||
/* How to handle the $SHORT_DOC directive. */
|
/* How to handle the $SHORT_DOC directive. */
|
||||||
int
|
int
|
||||||
short_doc_handler (self, defs, arg)
|
short_doc_handler (self, defs, arg)
|
||||||
char *self, *arg;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
register BUILTIN_DESC *builtin;
|
register BUILTIN_DESC *builtin;
|
||||||
|
|
||||||
|
|
@ -830,9 +841,10 @@ short_doc_handler (self, defs, arg)
|
||||||
|
|
||||||
/* How to handle the $COMMENT directive. */
|
/* How to handle the $COMMENT directive. */
|
||||||
int
|
int
|
||||||
comment_handler (self, defs)
|
comment_handler (self, defs, arg)
|
||||||
char *self;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
@ -840,8 +852,9 @@ comment_handler (self, defs)
|
||||||
/* How to handle the $DEPENDS_ON directive. */
|
/* How to handle the $DEPENDS_ON directive. */
|
||||||
int
|
int
|
||||||
depends_on_handler (self, defs, arg)
|
depends_on_handler (self, defs, arg)
|
||||||
char *self, *arg;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
register BUILTIN_DESC *builtin;
|
register BUILTIN_DESC *builtin;
|
||||||
char *dependent;
|
char *dependent;
|
||||||
|
|
@ -860,8 +873,9 @@ depends_on_handler (self, defs, arg)
|
||||||
/* How to handle the $PRODUCES directive. */
|
/* How to handle the $PRODUCES directive. */
|
||||||
int
|
int
|
||||||
produces_handler (self, defs, arg)
|
produces_handler (self, defs, arg)
|
||||||
char *self, *arg;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
/* If just hacking documentation, don't change any of the production
|
/* If just hacking documentation, don't change any of the production
|
||||||
files. */
|
files. */
|
||||||
|
|
@ -893,8 +907,9 @@ produces_handler (self, defs, arg)
|
||||||
/* How to handle the $END directive. */
|
/* How to handle the $END directive. */
|
||||||
int
|
int
|
||||||
end_handler (self, defs, arg)
|
end_handler (self, defs, arg)
|
||||||
char *self, *arg;
|
char *self;
|
||||||
DEF_FILE *defs;
|
DEF_FILE *defs;
|
||||||
|
char *arg;
|
||||||
{
|
{
|
||||||
must_be_building (self, defs);
|
must_be_building (self, defs);
|
||||||
building_builtin = 0;
|
building_builtin = 0;
|
||||||
|
|
@ -1056,7 +1071,7 @@ char *structfile_header[] = {
|
||||||
"",
|
"",
|
||||||
" Functions which need to look at only the simple commands (e.g.",
|
" Functions which need to look at only the simple commands (e.g.",
|
||||||
" the enable_builtin ()), should ignore entries where",
|
" the enable_builtin ()), should ignore entries where",
|
||||||
" (array[i].function == (Function *)NULL). Such entries are for",
|
" (array[i].function == (sh_builtin_func_t *)NULL). Such entries are for",
|
||||||
" the list of shell reserved control structures, like `if' and `while'.",
|
" the list of shell reserved control structures, like `if' and `while'.",
|
||||||
" The end of the list is denoted with a NULL name field. */",
|
" The end of the list is denoted with a NULL name field. */",
|
||||||
"",
|
"",
|
||||||
|
|
@ -1065,7 +1080,7 @@ char *structfile_header[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
char *structfile_footer[] = {
|
char *structfile_footer[] = {
|
||||||
" { (char *)0x0, (Function *)0x0, 0, (char **)0x0, (char *)0x0 }",
|
" { (char *)0x0, (sh_builtin_func_t *)0x0, 0, (char **)0x0, (char *)0x0 }",
|
||||||
"};",
|
"};",
|
||||||
"",
|
"",
|
||||||
"struct builtin *shell_builtins = static_shell_builtins;",
|
"struct builtin *shell_builtins = static_shell_builtins;",
|
||||||
|
|
@ -1147,7 +1162,7 @@ write_builtins (defs, structfile, externfile)
|
||||||
if (externfile)
|
if (externfile)
|
||||||
{
|
{
|
||||||
if (builtin->function)
|
if (builtin->function)
|
||||||
fprintf (externfile, "extern int %s ();\n",
|
fprintf (externfile, "extern int %s __P((WORD_LIST *));\n",
|
||||||
builtin->function);
|
builtin->function);
|
||||||
|
|
||||||
fprintf (externfile, "extern char *%s_doc[];\n",
|
fprintf (externfile, "extern char *%s_doc[];\n",
|
||||||
|
|
@ -1162,7 +1177,7 @@ write_builtins (defs, structfile, externfile)
|
||||||
if (builtin->function)
|
if (builtin->function)
|
||||||
fprintf (structfile, "%s, ", builtin->function);
|
fprintf (structfile, "%s, ", builtin->function);
|
||||||
else
|
else
|
||||||
fprintf (structfile, "(Function *)0x0, ");
|
fprintf (structfile, "(sh_builtin_func_t *)0x0, ");
|
||||||
|
|
||||||
fprintf (structfile, "%s%s%s, %s_doc,\n",
|
fprintf (structfile, "%s%s%s, %s_doc,\n",
|
||||||
"BUILTIN_ENABLED | STATIC_BUILTIN",
|
"BUILTIN_ENABLED | STATIC_BUILTIN",
|
||||||
|
|
|
||||||
|
|
@ -42,20 +42,33 @@ $END
|
||||||
#if defined (HAVE_LIMITS_H)
|
#if defined (HAVE_LIMITS_H)
|
||||||
# include <limits.h>
|
# include <limits.h>
|
||||||
#else
|
#else
|
||||||
/* Assume 32-bit ints and longs. */
|
/* Assume 32-bit ints. */
|
||||||
# define LONG_MAX 2147483647L
|
|
||||||
# define LONG_MIN (-2147483647L-1)
|
|
||||||
# define INT_MAX 2147483647
|
# define INT_MAX 2147483647
|
||||||
# define INT_MIN (-2147483647-1)
|
# define INT_MIN (-2147483647-1)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <chartypes.h>
|
||||||
|
|
||||||
|
#ifdef HAVE_INTTYPES_H
|
||||||
|
# include <inttypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "../bashansi.h"
|
#include "../bashansi.h"
|
||||||
|
|
||||||
|
#define NEED_STRTOIMAX_DECL
|
||||||
|
|
||||||
#include "../shell.h"
|
#include "../shell.h"
|
||||||
#include "stdc.h"
|
#include "stdc.h"
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
/* This should use the ISO C constant format strings; I'll do that later. */
|
||||||
|
#if SIZEOF_LONG < SIZEOF_LONG_LONG
|
||||||
|
# define INTMAX_CONV "ll"
|
||||||
|
#else
|
||||||
|
# define INTMAX_CONV "l"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if !defined (errno)
|
#if !defined (errno)
|
||||||
extern int errno;
|
extern int errno;
|
||||||
|
|
@ -63,57 +76,78 @@ extern int errno;
|
||||||
|
|
||||||
#define PF(f, func) \
|
#define PF(f, func) \
|
||||||
do { \
|
do { \
|
||||||
if (fieldwidth && precision) \
|
if (have_fieldwidth && have_precision) \
|
||||||
(void)printf(f, fieldwidth, precision, func); \
|
tw += printf(f, fieldwidth, precision, func); \
|
||||||
else if (fieldwidth && precision == 0) \
|
else if (have_fieldwidth) \
|
||||||
(void)printf(f, fieldwidth, func); \
|
tw += printf(f, fieldwidth, func); \
|
||||||
else if (precision) \
|
else if (have_precision) \
|
||||||
(void)printf(f, precision, func); \
|
tw += printf(f, precision, func); \
|
||||||
else \
|
else \
|
||||||
(void)printf(f, func); \
|
tw += printf(f, func); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* We free the buffer used by mklong() if it's `too big'. */
|
||||||
#define PRETURN(value) \
|
#define PRETURN(value) \
|
||||||
do { /* free (format); */ fflush (stdout); return (value); } while (0)
|
do \
|
||||||
|
{ \
|
||||||
|
if (conv_bufsize > 4096 ) \
|
||||||
|
{ \
|
||||||
|
free(conv_buf); \
|
||||||
|
conv_bufsize = 0; \
|
||||||
|
conv_buf = 0; \
|
||||||
|
} \
|
||||||
|
fflush (stdout); \
|
||||||
|
return (value); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
#define SKIP1 "#-+ 0"
|
#define SKIP1 "#'-+ 0"
|
||||||
#define SKIP2 "*0123456789"
|
#define LENMODS "hjlLtz"
|
||||||
|
|
||||||
static void printstr __P((char *, char *, int, int, int));
|
static void printstr __P((char *, char *, int, int, int));
|
||||||
static int tescape __P((char *, int, char *, int *));
|
static int tescape __P((char *, int, char *, int *));
|
||||||
static char *bexpand __P((char *, int, int *, int *));
|
static char *bexpand __P((char *, int, int *, int *));
|
||||||
static char *mklong __P((char *, int));
|
static char *mklong __P((char *, char *));
|
||||||
static int getchr __P((void));
|
static int getchr __P((void));
|
||||||
static char *getstr __P((void));
|
static char *getstr __P((void));
|
||||||
static int getint __P((void));
|
static int getint __P((void));
|
||||||
static int getlong __P((long *));
|
static long getlong __P((void));
|
||||||
static int getulong __P((unsigned long *));
|
static unsigned long getulong __P((void));
|
||||||
static int getdouble __P((double *));
|
#if defined (HAVE_LONG_LONG)
|
||||||
|
static long long getllong __P((void));
|
||||||
|
static unsigned long long getullong __P((void));
|
||||||
|
#endif
|
||||||
|
static intmax_t getintmax __P((void));
|
||||||
|
static uintmax_t getuintmax __P((void));
|
||||||
|
static double getdouble __P((void));
|
||||||
|
#if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD
|
||||||
|
static long double getldouble __P((void));
|
||||||
|
#endif
|
||||||
static int asciicode __P((void));
|
static int asciicode __P((void));
|
||||||
|
|
||||||
static WORD_LIST *garglist;
|
static WORD_LIST *garglist;
|
||||||
static int retval;
|
static int retval;
|
||||||
|
static int conversion_error;
|
||||||
|
|
||||||
extern char *sh_backslash_quote ();
|
static char *conv_buf;
|
||||||
|
static size_t conv_bufsize;
|
||||||
|
|
||||||
int
|
int
|
||||||
printf_builtin (list)
|
printf_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
int ch, end, fieldwidth, precision, foundmod, fmtlen;
|
int ch, fieldwidth, precision;
|
||||||
char convch, nextch, *format, *fmt, *start;
|
int have_fieldwidth, have_precision;
|
||||||
|
long tw;
|
||||||
|
char convch, thisch, nextch, *format, *modstart, *fmt, *start;
|
||||||
|
|
||||||
|
conversion_error = 0;
|
||||||
retval = EXECUTION_SUCCESS;
|
retval = EXECUTION_SUCCESS;
|
||||||
reset_internal_getopt ();
|
reset_internal_getopt ();
|
||||||
while ((ch = internal_getopt (list, "")) != -1)
|
if (internal_getopt (list, "") != -1)
|
||||||
{
|
{
|
||||||
switch (ch)
|
builtin_usage();
|
||||||
{
|
return (EX_USAGE);
|
||||||
case '?':
|
|
||||||
default:
|
|
||||||
builtin_usage();
|
|
||||||
return (EX_USAGE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
list = loptend;
|
list = loptend;
|
||||||
|
|
||||||
|
|
@ -140,18 +174,20 @@ printf_builtin (list)
|
||||||
format strings are reused as necessary to use up the provided
|
format strings are reused as necessary to use up the provided
|
||||||
arguments, arguments of zero/null string are provided to use
|
arguments, arguments of zero/null string are provided to use
|
||||||
up the format string. */
|
up the format string. */
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
tw = 0;
|
||||||
/* find next format specification */
|
/* find next format specification */
|
||||||
for (fmt = format; *fmt; fmt++)
|
for (fmt = format; *fmt; fmt++)
|
||||||
{
|
{
|
||||||
precision = fieldwidth = foundmod = 0;
|
precision = fieldwidth = 0;
|
||||||
|
have_fieldwidth = have_precision = 0;
|
||||||
|
|
||||||
|
|
||||||
if (*fmt == '\\')
|
if (*fmt == '\\')
|
||||||
{
|
{
|
||||||
fmt++;
|
fmt++;
|
||||||
/* A NULL third argument to tescape means to not do special
|
/* A NULL fourth argument to tescape means to not do special
|
||||||
processing for \c. */
|
processing for \c. */
|
||||||
fmt += tescape (fmt, 1, &nextch, (int *)NULL);
|
fmt += tescape (fmt, 1, &nextch, (int *)NULL);
|
||||||
putchar (nextch);
|
putchar (nextch);
|
||||||
|
|
@ -177,27 +213,37 @@ printf_builtin (list)
|
||||||
/* found format specification, skip to field width */
|
/* found format specification, skip to field width */
|
||||||
for (; *fmt && strchr(SKIP1, *fmt); ++fmt)
|
for (; *fmt && strchr(SKIP1, *fmt); ++fmt)
|
||||||
;
|
;
|
||||||
fieldwidth = (*fmt == '*') ? getint () : 0;
|
|
||||||
|
|
||||||
/* skip to possible '.', get following precision */
|
/* Skip optional field width. */
|
||||||
for (; *fmt && strchr(SKIP2, *fmt); ++fmt)
|
if (*fmt == '*')
|
||||||
;
|
{
|
||||||
|
fmt++;
|
||||||
|
have_fieldwidth = 1;
|
||||||
|
fieldwidth = getint ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
while (DIGIT (*fmt))
|
||||||
|
fmt++;
|
||||||
|
|
||||||
|
/* Skip optional '.' and precision */
|
||||||
if (*fmt == '.')
|
if (*fmt == '.')
|
||||||
{
|
{
|
||||||
++fmt;
|
++fmt;
|
||||||
precision = (*fmt == '*') ? getint () : 0;
|
if (*fmt == '*')
|
||||||
|
{
|
||||||
|
fmt++;
|
||||||
|
have_precision = 1;
|
||||||
|
precision = getint ();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
while (DIGIT (*fmt))
|
||||||
|
fmt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* skip to conversion char */
|
|
||||||
for (; *fmt && strchr(SKIP2, *fmt); ++fmt)
|
|
||||||
;
|
|
||||||
|
|
||||||
/* skip possible format modifiers */
|
/* skip possible format modifiers */
|
||||||
if (*fmt == 'l' || *fmt == 'L' || *fmt == 'h')
|
modstart = fmt;
|
||||||
{
|
while (*fmt && strchr (LENMODS, *fmt))
|
||||||
fmt++;
|
fmt++;
|
||||||
foundmod = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*fmt == 0)
|
if (*fmt == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -206,8 +252,11 @@ printf_builtin (list)
|
||||||
}
|
}
|
||||||
|
|
||||||
convch = *fmt;
|
convch = *fmt;
|
||||||
nextch = fmt[1];
|
thisch = modstart[0];
|
||||||
fmt[1] = '\0';
|
nextch = modstart[1];
|
||||||
|
modstart[0] = convch;
|
||||||
|
modstart[1] = '\0';
|
||||||
|
|
||||||
switch(convch)
|
switch(convch)
|
||||||
{
|
{
|
||||||
case 'c':
|
case 'c':
|
||||||
|
|
@ -228,6 +277,24 @@ printf_builtin (list)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'n':
|
||||||
|
{
|
||||||
|
char *var;
|
||||||
|
|
||||||
|
var = getstr ();
|
||||||
|
if (var && *var)
|
||||||
|
{
|
||||||
|
if (legal_identifier (var))
|
||||||
|
bind_var_to_int (var, tw);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
builtin_error ("%s: invalid variable name", var);
|
||||||
|
PRETURN (EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'b': /* expand escapes in argument */
|
case 'b': /* expand escapes in argument */
|
||||||
{
|
{
|
||||||
char *p, *xp;
|
char *p, *xp;
|
||||||
|
|
@ -268,16 +335,34 @@ printf_builtin (list)
|
||||||
case 'd':
|
case 'd':
|
||||||
case 'i':
|
case 'i':
|
||||||
{
|
{
|
||||||
long p;
|
|
||||||
char *f;
|
char *f;
|
||||||
|
#if defined (HAVE_LONG_LONG)
|
||||||
|
if (thisch == 'l' && nextch == 'l')
|
||||||
|
{
|
||||||
|
long long p;
|
||||||
|
|
||||||
if (foundmod == 0 && ((f = mklong (start, convch)) == NULL))
|
p = getllong ();
|
||||||
PRETURN (EXECUTION_FAILURE);
|
f = mklong (start, "ll");
|
||||||
|
PF(f, p);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
f = start;
|
#endif
|
||||||
if (getlong (&p))
|
if (thisch == 'j')
|
||||||
PRETURN (EXECUTION_FAILURE);
|
{
|
||||||
PF(f, p);
|
intmax_t p;
|
||||||
|
|
||||||
|
p = getintmax ();
|
||||||
|
f = mklong (start, INTMAX_CONV);
|
||||||
|
PF(f, p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
long p;
|
||||||
|
|
||||||
|
p = getlong ();
|
||||||
|
f = mklong (start, "l");
|
||||||
|
PF(f, p);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -286,30 +371,67 @@ printf_builtin (list)
|
||||||
case 'x':
|
case 'x':
|
||||||
case 'X':
|
case 'X':
|
||||||
{
|
{
|
||||||
unsigned long p;
|
|
||||||
char *f;
|
char *f;
|
||||||
|
#if defined (HAVE_LONG_LONG)
|
||||||
|
if (thisch == 'l' && nextch == 'l')
|
||||||
|
{
|
||||||
|
unsigned long long p;
|
||||||
|
|
||||||
if (foundmod == 0 && ((f = mklong (start, convch)) == NULL))
|
p = getullong ();
|
||||||
PRETURN (EXECUTION_FAILURE);
|
f = mklong (start, "ll");
|
||||||
|
PF(f, p);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
f = start;
|
#endif
|
||||||
if (getulong (&p))
|
if (thisch == 'j')
|
||||||
PRETURN (EXECUTION_FAILURE);
|
{
|
||||||
PF (f, p);
|
uintmax_t p;
|
||||||
|
|
||||||
|
p = getuintmax ();
|
||||||
|
f = mklong (start, INTMAX_CONV);
|
||||||
|
PF(f, p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned long p;
|
||||||
|
|
||||||
|
p = getulong ();
|
||||||
|
f = mklong (start, "l");
|
||||||
|
PF (f, p);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'e':
|
case 'e':
|
||||||
case 'E':
|
case 'E':
|
||||||
case 'f':
|
case 'f':
|
||||||
|
case 'F':
|
||||||
case 'g':
|
case 'g':
|
||||||
case 'G':
|
case 'G':
|
||||||
|
#if defined (HAVE_PRINTF_A_FORMAT)
|
||||||
|
case 'a':
|
||||||
|
case 'A':
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
double p;
|
char *f;
|
||||||
|
#if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD
|
||||||
|
if (thisch == 'L')
|
||||||
|
{
|
||||||
|
long double p;
|
||||||
|
|
||||||
if (getdouble (&p))
|
p = getldouble ();
|
||||||
PRETURN (EXECUTION_FAILURE);
|
f = mklong (start, "L");
|
||||||
PF(start, p);
|
PF (f, p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
double p;
|
||||||
|
|
||||||
|
p = getdouble ();
|
||||||
|
f = mklong (start, "");
|
||||||
|
PF (f, p);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -320,11 +442,15 @@ printf_builtin (list)
|
||||||
PRETURN (EXECUTION_FAILURE);
|
PRETURN (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt[1] = nextch;
|
modstart[0] = thisch;
|
||||||
|
modstart[1] = nextch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (garglist && garglist != list->next);
|
while (garglist && garglist != list->next);
|
||||||
|
|
||||||
|
if (conversion_error)
|
||||||
|
retval = EXECUTION_FAILURE;
|
||||||
|
|
||||||
PRETURN (retval);
|
PRETURN (retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -352,10 +478,11 @@ printstr (fmt, string, len, fieldwidth, precision)
|
||||||
if (*fmt == '%')
|
if (*fmt == '%')
|
||||||
fmt++;
|
fmt++;
|
||||||
|
|
||||||
ljust = fw = pr = 0;
|
ljust = fw = 0;
|
||||||
|
pr = -1;
|
||||||
|
|
||||||
/* skip flags */
|
/* skip flags */
|
||||||
while (*fmt == '#' || *fmt == '-' || *fmt == '+' || *fmt == ' ' || *fmt == '0')
|
while (strchr (SKIP1, *fmt))
|
||||||
{
|
{
|
||||||
if (*fmt == '-')
|
if (*fmt == '-')
|
||||||
ljust = 1;
|
ljust = 1;
|
||||||
|
|
@ -367,11 +494,16 @@ printstr (fmt, string, len, fieldwidth, precision)
|
||||||
{
|
{
|
||||||
fmt++;
|
fmt++;
|
||||||
fw = fieldwidth;
|
fw = fieldwidth;
|
||||||
|
if (fw < 0)
|
||||||
|
{
|
||||||
|
fw = -fw;
|
||||||
|
ljust = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (isdigit (*fmt))
|
else if (DIGIT (*fmt))
|
||||||
{
|
{
|
||||||
fw = *fmt++ - '0';
|
fw = *fmt++ - '0';
|
||||||
while (isdigit (*fmt))
|
while (DIGIT (*fmt))
|
||||||
fw = (fw * 10) + (*fmt++ - '0');
|
fw = (fw * 10) + (*fmt++ - '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -384,10 +516,10 @@ printstr (fmt, string, len, fieldwidth, precision)
|
||||||
fmt++;
|
fmt++;
|
||||||
pr = precision;
|
pr = precision;
|
||||||
}
|
}
|
||||||
else if (isdigit (*fmt))
|
else if (DIGIT (*fmt))
|
||||||
{
|
{
|
||||||
pr = *fmt++ - '0';
|
pr = *fmt++ - '0';
|
||||||
while (isdigit (*fmt))
|
while (DIGIT (*fmt))
|
||||||
pr = (pr * 10) + (*fmt++ - '0');
|
pr = (pr * 10) + (*fmt++ - '0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -402,7 +534,7 @@ printstr (fmt, string, len, fieldwidth, precision)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* chars from string to print */
|
/* chars from string to print */
|
||||||
nc = (pr > 0 && pr <= len) ? pr : len;
|
nc = (pr >= 0 && pr <= len) ? pr : len;
|
||||||
|
|
||||||
padlen = fw - nc;
|
padlen = fw - nc;
|
||||||
if (padlen < 0)
|
if (padlen < 0)
|
||||||
|
|
@ -428,21 +560,6 @@ printstr (fmt, string, len, fieldwidth, precision)
|
||||||
recognize `\c' and use that as a string terminator. If we see \c, set
|
recognize `\c' and use that as a string terminator. If we see \c, set
|
||||||
*SAWC to 1 before returning. LEN is the length of STRING. */
|
*SAWC to 1 before returning. LEN is the length of STRING. */
|
||||||
|
|
||||||
#ifdef isoctal
|
|
||||||
#undef isoctal
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define isoctal(c) ((c) >= '0' && (c) <= '7')
|
|
||||||
|
|
||||||
#define OCTVALUE(c) ((c) - '0')
|
|
||||||
|
|
||||||
#ifndef isxdigit
|
|
||||||
# define isxdigit(c) (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define HEXVALUE(c) \
|
|
||||||
((c) >= 'a' && (c) <= 'f' ? (c)-'a'+10 : (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0')
|
|
||||||
|
|
||||||
/* Translate a single backslash-escape sequence starting at ESTART (the
|
/* Translate a single backslash-escape sequence starting at ESTART (the
|
||||||
character after the backslash) and return the number of characters
|
character after the backslash) and return the number of characters
|
||||||
consumed by the sequence. CP is the place to return the translated
|
consumed by the sequence. CP is the place to return the translated
|
||||||
|
|
@ -488,32 +605,32 @@ tescape (estart, trans_squote, cp, sawc)
|
||||||
/* %b octal constants are `\0' followed by one, two, or three
|
/* %b octal constants are `\0' followed by one, two, or three
|
||||||
octal digits... */
|
octal digits... */
|
||||||
case '0':
|
case '0':
|
||||||
for (temp = 3, evalue = 0; isoctal (*p) && temp--; p++)
|
for (temp = 3, evalue = 0; ISOCTAL (*p) && temp--; p++)
|
||||||
evalue = (evalue * 8) + OCTVALUE (*p);
|
evalue = (evalue * 8) + OCTVALUE (*p);
|
||||||
*cp = evalue;
|
*cp = evalue & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* but, as an extension, the other echo-like octal escape
|
/* but, as an extension, the other echo-like octal escape
|
||||||
sequences are supported as well. */
|
sequences are supported as well. */
|
||||||
case '1': case '2': case '3': case '4':
|
case '1': case '2': case '3': case '4':
|
||||||
case '5': case '6': case '7':
|
case '5': case '6': case '7':
|
||||||
for (temp = 2, evalue = c - '0'; isoctal (*p) && temp--; p++)
|
for (temp = 2, evalue = c - '0'; ISOCTAL (*p) && temp--; p++)
|
||||||
evalue = (evalue * 8) + OCTVALUE (*p);
|
evalue = (evalue * 8) + OCTVALUE (*p);
|
||||||
*cp = evalue;
|
*cp = evalue & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* And, as another extension, we allow \xNNN, where each N is a
|
/* And, as another extension, we allow \xNNN, where each N is a
|
||||||
hex digit. */
|
hex digit. */
|
||||||
case 'x':
|
case 'x':
|
||||||
for (temp = 3, evalue = 0; isxdigit (*p) && temp--; p++)
|
for (temp = 2, evalue = 0; ISXDIGIT ((unsigned char)*p) && temp--; p++)
|
||||||
evalue = (evalue * 16) + HEXVALUE (*p);
|
evalue = (evalue * 16) + HEXVALUE (*p);
|
||||||
if (temp == 3)
|
if (temp == 2)
|
||||||
{
|
{
|
||||||
builtin_error ("missing hex digit for \\x");
|
builtin_error ("missing hex digit for \\x");
|
||||||
*cp = '\\';
|
*cp = '\\';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
*cp = evalue;
|
*cp = evalue & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '\\': /* \\ -> \ */
|
case '\\': /* \\ -> \ */
|
||||||
|
|
@ -561,7 +678,7 @@ bexpand (string, len, sawc, lenp)
|
||||||
return ((char *)NULL);
|
return ((char *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = xmalloc (len + 1);
|
ret = (char *)xmalloc (len + 1);
|
||||||
for (r = ret, s = string; s && *s; )
|
for (r = ret, s = string; s && *s; )
|
||||||
{
|
{
|
||||||
c = *s++;
|
c = *s++;
|
||||||
|
|
@ -589,19 +706,28 @@ bexpand (string, len, sawc, lenp)
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
mklong (str, ch)
|
mklong (str, modifiers)
|
||||||
char *str;
|
char *str;
|
||||||
int ch;
|
char *modifiers;
|
||||||
{
|
{
|
||||||
static char copy[64];
|
size_t len, slen, mlen;
|
||||||
int len;
|
|
||||||
|
|
||||||
len = strlen (str) + 2;
|
slen = strlen (str);
|
||||||
FASTCOPY (str, copy, len - 3);
|
mlen = strlen (modifiers);
|
||||||
copy[len - 3] = 'l';
|
len = slen + mlen + 1;
|
||||||
copy[len - 2] = ch;
|
|
||||||
copy[len - 1] = '\0';
|
if (len > conv_bufsize)
|
||||||
return (copy);
|
{
|
||||||
|
conv_bufsize = (((len + 1023) >> 10) << 10);
|
||||||
|
conv_buf = (char *)xrealloc (conv_buf, conv_bufsize);
|
||||||
|
}
|
||||||
|
|
||||||
|
FASTCOPY (str, conv_buf, slen - 1);
|
||||||
|
FASTCOPY (modifiers, conv_buf + slen - 1, mlen);
|
||||||
|
|
||||||
|
conv_buf[len - 2] = str[slen - 1];
|
||||||
|
conv_buf[len - 1] = '\0';
|
||||||
|
return (conv_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
@ -635,8 +761,7 @@ getint ()
|
||||||
{
|
{
|
||||||
long ret;
|
long ret;
|
||||||
|
|
||||||
if (getlong (&ret))
|
ret = getlong ();
|
||||||
return (0);
|
|
||||||
|
|
||||||
if (ret > INT_MAX)
|
if (ret > INT_MAX)
|
||||||
{
|
{
|
||||||
|
|
@ -652,62 +777,50 @@ getint ()
|
||||||
return ((int)ret);
|
return ((int)ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static long
|
||||||
getlong (lp)
|
getlong ()
|
||||||
long *lp;
|
|
||||||
{
|
{
|
||||||
long ret;
|
long ret;
|
||||||
char *ep;
|
char *ep;
|
||||||
|
|
||||||
if (garglist == 0)
|
if (garglist == 0)
|
||||||
{
|
return (0);
|
||||||
*lp = 0L;
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
{
|
return asciicode ();
|
||||||
*lp = (long)asciicode ();
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
/* If we use 0 as the third argument, we can handle octal and hex, which
|
|
||||||
legal_number does not. (This was
|
|
||||||
if (legal_number (garglist->word->word, &ret) == 0)
|
|
||||||
) */
|
|
||||||
ret = strtol (garglist->word->word, &ep, 0);
|
ret = strtol (garglist->word->word, &ep, 0);
|
||||||
if (*ep != '\0')
|
|
||||||
|
if (*ep)
|
||||||
{
|
{
|
||||||
builtin_error ("%s: invalid number", garglist->word->word);
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
return (1);
|
/* POSIX.2 says ``...a diagnostic message shall be written to standard
|
||||||
|
error, and the utility shall not exit with a zero exit status, but
|
||||||
|
shall continue processing any remaining operands and shall write the
|
||||||
|
value accumulated at the time the error was detected to standard
|
||||||
|
output.'' Yecch. */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
}
|
}
|
||||||
else if (errno == ERANGE)
|
else if (errno == ERANGE)
|
||||||
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
*lp = ret;
|
|
||||||
garglist = garglist->next;
|
garglist = garglist->next;
|
||||||
return (0);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static unsigned long
|
||||||
getulong (ulp)
|
getulong ()
|
||||||
unsigned long *ulp;
|
|
||||||
{
|
{
|
||||||
unsigned long ret;
|
unsigned long ret;
|
||||||
char *ep;
|
char *ep;
|
||||||
|
|
||||||
if (garglist == 0)
|
if (garglist == 0)
|
||||||
{
|
return (0);
|
||||||
*ulp = (unsigned long)0;
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
{
|
return asciicode ();
|
||||||
*ulp = (unsigned long)asciicode ();
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ret = strtoul (garglist->word->word, &ep, 0);
|
ret = strtoul (garglist->word->word, &ep, 0);
|
||||||
|
|
@ -715,50 +828,205 @@ getulong (ulp)
|
||||||
if (*ep)
|
if (*ep)
|
||||||
{
|
{
|
||||||
builtin_error ("%s: invalid number", garglist->word->word);
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
return (1);
|
/* Same thing about POSIX.2 conversion error requirements as getlong(). */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
}
|
}
|
||||||
else if (errno == ERANGE)
|
else if (errno == ERANGE)
|
||||||
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
*ulp = ret;
|
|
||||||
garglist = garglist->next;
|
garglist = garglist->next;
|
||||||
return (0);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
#if defined (HAVE_LONG_LONG)
|
||||||
getdouble (dp)
|
|
||||||
double *dp;
|
static long long
|
||||||
|
getllong ()
|
||||||
|
{
|
||||||
|
long long ret;
|
||||||
|
char *ep;
|
||||||
|
|
||||||
|
if (garglist == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
|
return asciicode ();
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
ret = strtoll (garglist->word->word, &ep, 0);
|
||||||
|
|
||||||
|
if (*ep)
|
||||||
|
{
|
||||||
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
|
/* POSIX.2 says ``...a diagnostic message shall be written to standard
|
||||||
|
error, and the utility shall not exit with a zero exit status, but
|
||||||
|
shall continue processing any remaining operands and shall write the
|
||||||
|
value accumulated at the time the error was detected to standard
|
||||||
|
output.'' Yecch. */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
|
}
|
||||||
|
else if (errno == ERANGE)
|
||||||
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
|
garglist = garglist->next;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned long long
|
||||||
|
getullong ()
|
||||||
|
{
|
||||||
|
unsigned long long ret;
|
||||||
|
char *ep;
|
||||||
|
|
||||||
|
if (garglist == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
|
return asciicode ();
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
ret = strtoull (garglist->word->word, &ep, 0);
|
||||||
|
|
||||||
|
if (*ep)
|
||||||
|
{
|
||||||
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
|
/* Same thing about POSIX.2 conversion error requirements as getlong(). */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
|
}
|
||||||
|
else if (errno == ERANGE)
|
||||||
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
|
garglist = garglist->next;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_LONG_LONG */
|
||||||
|
|
||||||
|
static intmax_t
|
||||||
|
getintmax ()
|
||||||
|
{
|
||||||
|
intmax_t ret;
|
||||||
|
char *ep;
|
||||||
|
|
||||||
|
if (garglist == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
|
return asciicode ();
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
ret = strtoimax (garglist->word->word, &ep, 0);
|
||||||
|
|
||||||
|
if (*ep)
|
||||||
|
{
|
||||||
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
|
/* POSIX.2 says ``...a diagnostic message shall be written to standard
|
||||||
|
error, and the utility shall not exit with a zero exit status, but
|
||||||
|
shall continue processing any remaining operands and shall write the
|
||||||
|
value accumulated at the time the error was detected to standard
|
||||||
|
output.'' Yecch. */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
|
}
|
||||||
|
else if (errno == ERANGE)
|
||||||
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
|
garglist = garglist->next;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
static uintmax_t
|
||||||
|
getuintmax ()
|
||||||
|
{
|
||||||
|
uintmax_t ret;
|
||||||
|
char *ep;
|
||||||
|
|
||||||
|
if (garglist == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
|
return asciicode ();
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
ret = strtoumax (garglist->word->word, &ep, 0);
|
||||||
|
|
||||||
|
if (*ep)
|
||||||
|
{
|
||||||
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
|
/* Same thing about POSIX.2 conversion error requirements as getlong(). */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
|
}
|
||||||
|
else if (errno == ERANGE)
|
||||||
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
|
garglist = garglist->next;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
static double
|
||||||
|
getdouble ()
|
||||||
{
|
{
|
||||||
double ret;
|
double ret;
|
||||||
char *ep;
|
char *ep;
|
||||||
|
|
||||||
if (garglist == 0)
|
if (garglist == 0)
|
||||||
{
|
return (0);
|
||||||
*dp = (double)0;
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
{
|
return asciicode ();
|
||||||
*dp = (double)asciicode ();
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ret = strtod (garglist->word->word, &ep);
|
ret = strtod (garglist->word->word, &ep);
|
||||||
|
|
||||||
if (*ep)
|
if (*ep)
|
||||||
{
|
{
|
||||||
builtin_error ("%s: invalid number", garglist->word->word);
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
return (1);
|
/* Same thing about POSIX.2 conversion error requirements. */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
}
|
}
|
||||||
else if (errno == ERANGE)
|
else if (errno == ERANGE)
|
||||||
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
*dp = ret;
|
|
||||||
garglist = garglist->next;
|
garglist = garglist->next;
|
||||||
return (0);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD
|
||||||
|
static long double
|
||||||
|
getldouble ()
|
||||||
|
{
|
||||||
|
long double ret;
|
||||||
|
char *ep;
|
||||||
|
|
||||||
|
if (garglist == 0)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
|
||||||
|
return (asciicode ());
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
|
ret = strtold (garglist->word->word, &ep);
|
||||||
|
|
||||||
|
if (*ep)
|
||||||
|
{
|
||||||
|
builtin_error ("%s: invalid number", garglist->word->word);
|
||||||
|
/* Same thing about POSIX.2 conversion error requirements. */
|
||||||
|
ret = 0;
|
||||||
|
conversion_error = 1;
|
||||||
|
}
|
||||||
|
else if (errno == ERANGE)
|
||||||
|
builtin_error ("warning: %s: %s", garglist->word->word, strerror(ERANGE));
|
||||||
|
|
||||||
|
garglist = garglist->next;
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
#endif /* HAVE_LONG_DOUBLE && HAVE_DECL_STRTOLD */
|
||||||
|
|
||||||
/* NO check is needed for garglist here. */
|
/* NO check is needed for garglist here. */
|
||||||
static int
|
static int
|
||||||
asciicode ()
|
asciicode ()
|
||||||
|
|
|
||||||
25
builtins/psize.sh
Executable file → Normal file
25
builtins/psize.sh
Executable file → Normal file
|
|
@ -4,10 +4,18 @@
|
||||||
# pipesize.h so ulimit.c can use it.
|
# pipesize.h so ulimit.c can use it.
|
||||||
|
|
||||||
: ${TMPDIR:=/tmp}
|
: ${TMPDIR:=/tmp}
|
||||||
TMPNAME=pipsize.$$
|
# try to use mktemp(1) if the system supports it
|
||||||
TMPFILE=$TMPDIR/$TMPNAME
|
{ TMPFILE="`mktemp $TMPDIR/pipsize.XXXXXX 2>/dev/null`"; } 2>/dev/null
|
||||||
|
used_mktemp=true
|
||||||
|
|
||||||
trap 'rm -f $TMPFILE' 0 1 2 3 6 15
|
if [ -z "$TMPFILE" ]; then
|
||||||
|
TMPNAME=pipsize.$$
|
||||||
|
TMPFILE=$TMPDIR/$TMPNAME
|
||||||
|
used_mktemp=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
trap 'rm -f "$TMPFILE" ; exit 1' 1 2 3 6 15
|
||||||
|
trap 'rm -f "$TMPFILE"' 0
|
||||||
|
|
||||||
echo "/*"
|
echo "/*"
|
||||||
echo " * pipesize.h"
|
echo " * pipesize.h"
|
||||||
|
|
@ -21,14 +29,15 @@ echo ""
|
||||||
# Try to avoid tempfile races. We can't really check for the file's
|
# Try to avoid tempfile races. We can't really check for the file's
|
||||||
# existance before we run psize.aux, because `test -e' is not portable,
|
# existance before we run psize.aux, because `test -e' is not portable,
|
||||||
# `test -h' (test for symlinks) is not portable, and `test -f' only
|
# `test -h' (test for symlinks) is not portable, and `test -f' only
|
||||||
# checks for regular files
|
# checks for regular files. If we used mktemp(1), we're ahead of the
|
||||||
|
# game.
|
||||||
#
|
#
|
||||||
rm -f $TMPFILE
|
$used_mktemp || rm -f "$TMPFILE"
|
||||||
|
|
||||||
./psize.aux 2>$TMPFILE | sleep 3
|
./psize.aux 2>"$TMPFILE" | sleep 3
|
||||||
|
|
||||||
if [ -s $TMPFILE ]; then
|
if [ -s "$TMPFILE" ]; then
|
||||||
echo "#define PIPESIZE `cat $TMPFILE`"
|
echo "#define PIPESIZE `cat "$TMPFILE"`"
|
||||||
else
|
else
|
||||||
echo "#define PIPESIZE 512"
|
echo "#define PIPESIZE 512"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -136,12 +136,12 @@ static int directory_list_size;
|
||||||
/* Offset to the end of the list. */
|
/* Offset to the end of the list. */
|
||||||
static int directory_list_offset;
|
static int directory_list_offset;
|
||||||
|
|
||||||
static void pushd_error ();
|
static void pushd_error __P((int, char *));
|
||||||
static void clear_directory_stack ();
|
static void clear_directory_stack __P((void));
|
||||||
static int cd_to_string ();
|
static int cd_to_string __P((char *));
|
||||||
static int change_to_temp ();
|
static int change_to_temp __P((char *));
|
||||||
static int get_dirstack_index ();
|
static void add_dirstack_element __P((char *));
|
||||||
static void add_dirstack_element ();
|
static int get_dirstack_index __P((long, int, int *));
|
||||||
|
|
||||||
#define NOCD 0x01
|
#define NOCD 0x01
|
||||||
#define ROTATE 0x02
|
#define ROTATE 0x02
|
||||||
|
|
@ -293,7 +293,7 @@ popd_builtin (list)
|
||||||
char *which_word;
|
char *which_word;
|
||||||
|
|
||||||
which_word = (char *)NULL;
|
which_word = (char *)NULL;
|
||||||
for (flags = 0, which = 0L, direction = '+'; list; list = list->next)
|
for (flags = 0, which = 0, direction = '+'; list; list = list->next)
|
||||||
{
|
{
|
||||||
if (ISOPTION (list->word->word, 'n'))
|
if (ISOPTION (list->word->word, 'n'))
|
||||||
{
|
{
|
||||||
|
|
@ -537,7 +537,8 @@ add_dirstack_element (dir)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_dirstack_index (ind, sign, indexp)
|
get_dirstack_index (ind, sign, indexp)
|
||||||
int ind, sign, *indexp;
|
long ind;
|
||||||
|
int sign, *indexp;
|
||||||
{
|
{
|
||||||
if (indexp)
|
if (indexp)
|
||||||
*indexp = sign > 0 ? 1 : 2;
|
*indexp = sign > 0 ? 1 : 2;
|
||||||
|
|
@ -552,8 +553,10 @@ get_dirstack_index (ind, sign, indexp)
|
||||||
*indexp = sign > 0 ? 2 : 1;
|
*indexp = sign > 0 ? 2 : 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else
|
else if (ind >= 0 && ind <= directory_list_offset)
|
||||||
return (sign > 0 ? directory_list_offset - ind : ind);
|
return (sign > 0 ? directory_list_offset - ind : ind);
|
||||||
|
else
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Used by the tilde expansion code. */
|
/* Used by the tilde expansion code. */
|
||||||
|
|
@ -586,7 +589,8 @@ get_dirstack_from_string (string)
|
||||||
#ifdef INCLUDE_UNUSED
|
#ifdef INCLUDE_UNUSED
|
||||||
char *
|
char *
|
||||||
get_dirstack_element (ind, sign)
|
get_dirstack_element (ind, sign)
|
||||||
int ind, sign;
|
long ind;
|
||||||
|
int sign;
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|
@ -598,7 +602,8 @@ get_dirstack_element (ind, sign)
|
||||||
|
|
||||||
void
|
void
|
||||||
set_dirstack_element (ind, sign, value)
|
set_dirstack_element (ind, sign, value)
|
||||||
int ind, sign;
|
long ind;
|
||||||
|
int sign;
|
||||||
char *value;
|
char *value;
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
|
||||||
|
|
@ -83,15 +83,18 @@ extern int errno;
|
||||||
extern int interrupt_immediately;
|
extern int interrupt_immediately;
|
||||||
|
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
static char *edit_line ();
|
static char *edit_line __P((char *));
|
||||||
static void set_eol_delim ();
|
static void set_eol_delim __P((int));
|
||||||
static void reset_eol_delim ();
|
static void reset_eol_delim __P((char *));
|
||||||
#endif
|
#endif
|
||||||
static SHELL_VAR *bind_read_variable ();
|
static SHELL_VAR *bind_read_variable __P((char *, char *));
|
||||||
|
|
||||||
|
static sighandler sigalrm __P((int));
|
||||||
|
static void reset_alarm __P((void));
|
||||||
|
|
||||||
static procenv_t alrmbuf;
|
static procenv_t alrmbuf;
|
||||||
static SigHandler *old_alrm;
|
static SigHandler *old_alrm;
|
||||||
static int delim;
|
static unsigned char delim;
|
||||||
|
|
||||||
static sighandler
|
static sighandler
|
||||||
sigalrm (s)
|
sigalrm (s)
|
||||||
|
|
@ -120,7 +123,8 @@ read_builtin (list)
|
||||||
register char *varname;
|
register char *varname;
|
||||||
int size, i, pass_next, saw_escape, eof, opt, retval, code;
|
int size, i, pass_next, saw_escape, eof, opt, retval, code;
|
||||||
int input_is_tty, input_is_pipe, unbuffered_read;
|
int input_is_tty, input_is_pipe, unbuffered_read;
|
||||||
int raw, edit, tmout, nchars, silent;
|
int raw, edit, nchars, silent, have_timeout;
|
||||||
|
unsigned int tmout;
|
||||||
long timeoutval, ncharsval;
|
long timeoutval, ncharsval;
|
||||||
char c;
|
char c;
|
||||||
char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname;
|
char *input_string, *orig_input_string, *ifs_chars, *prompt, *arrayname;
|
||||||
|
|
@ -135,6 +139,25 @@ read_builtin (list)
|
||||||
int rlind;
|
int rlind;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
USE_VAR(size);
|
||||||
|
USE_VAR(i);
|
||||||
|
USE_VAR(pass_next);
|
||||||
|
USE_VAR(saw_escape);
|
||||||
|
USE_VAR(input_is_pipe);
|
||||||
|
/* USE_VAR(raw); */
|
||||||
|
USE_VAR(edit);
|
||||||
|
USE_VAR(tmout);
|
||||||
|
USE_VAR(nchars);
|
||||||
|
USE_VAR(silent);
|
||||||
|
USE_VAR(ifs_chars);
|
||||||
|
USE_VAR(prompt);
|
||||||
|
USE_VAR(arrayname);
|
||||||
|
#if defined (READLINE)
|
||||||
|
USE_VAR(rlbuf);
|
||||||
|
USE_VAR(rlind);
|
||||||
|
#endif
|
||||||
|
USE_VAR(list);
|
||||||
|
|
||||||
i = 0; /* Index into the string that we are reading. */
|
i = 0; /* Index into the string that we are reading. */
|
||||||
raw = edit = 0; /* Not reading raw input by default. */
|
raw = edit = 0; /* Not reading raw input by default. */
|
||||||
silent = 0;
|
silent = 0;
|
||||||
|
|
@ -145,8 +168,8 @@ read_builtin (list)
|
||||||
rlind = 0;
|
rlind = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
tmout = -1; /* no timeout */
|
tmout = 0; /* no timeout */
|
||||||
nchars = input_is_tty = input_is_pipe = unbuffered_read = 0;
|
nchars = input_is_tty = input_is_pipe = unbuffered_read = have_timeout = 0;
|
||||||
delim = '\n'; /* read until newline */
|
delim = '\n'; /* read until newline */
|
||||||
|
|
||||||
reset_internal_getopt ();
|
reset_internal_getopt ();
|
||||||
|
|
@ -175,17 +198,20 @@ read_builtin (list)
|
||||||
#endif
|
#endif
|
||||||
case 't':
|
case 't':
|
||||||
code = legal_number (list_optarg, &timeoutval);
|
code = legal_number (list_optarg, &timeoutval);
|
||||||
if (code == 0 || timeoutval < 0)
|
if (code == 0 || timeoutval < 0 || timeoutval != (unsigned int)timeoutval)
|
||||||
{
|
{
|
||||||
builtin_error ("%s: invalid timeout specification", list_optarg);
|
builtin_error ("%s: invalid timeout specification", list_optarg);
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
tmout = timeoutval;
|
{
|
||||||
|
have_timeout = 1;
|
||||||
|
tmout = timeoutval;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'n':
|
case 'n':
|
||||||
code = legal_number (list_optarg, &ncharsval);
|
code = legal_number (list_optarg, &ncharsval);
|
||||||
if (code == 0 || ncharsval < 0)
|
if (code == 0 || ncharsval < 0 || ncharsval != (int)ncharsval)
|
||||||
{
|
{
|
||||||
builtin_error ("%s: invalid number specification", list_optarg);
|
builtin_error ("%s: invalid number specification", list_optarg);
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
|
|
@ -204,7 +230,7 @@ read_builtin (list)
|
||||||
list = loptend;
|
list = loptend;
|
||||||
|
|
||||||
/* `read -t 0 var' returns failure immediately. */
|
/* `read -t 0 var' returns failure immediately. */
|
||||||
if (tmout == 0)
|
if (have_timeout && tmout == 0)
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
|
|
||||||
/* IF IFS is unset, we use the default of " \t\n". */
|
/* IF IFS is unset, we use the default of " \t\n". */
|
||||||
|
|
@ -213,7 +239,7 @@ read_builtin (list)
|
||||||
if (ifs_chars == 0) /* XXX */
|
if (ifs_chars == 0) /* XXX */
|
||||||
ifs_chars = ""; /* XXX */
|
ifs_chars = ""; /* XXX */
|
||||||
|
|
||||||
input_string = xmalloc (size = 128);
|
input_string = (char *)xmalloc (size = 128);
|
||||||
|
|
||||||
begin_unwind_frame ("read_builtin");
|
begin_unwind_frame ("read_builtin");
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
|
|
@ -250,7 +276,7 @@ read_builtin (list)
|
||||||
/* Turn off the timeout if stdin is a regular file (e.g. from
|
/* Turn off the timeout if stdin is a regular file (e.g. from
|
||||||
input redirection). */
|
input redirection). */
|
||||||
if ((fstat (0, &tsb) < 0) || S_ISREG (tsb.st_mode))
|
if ((fstat (0, &tsb) < 0) || S_ISREG (tsb.st_mode))
|
||||||
tmout = -1;
|
tmout = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmout > 0)
|
if (tmout > 0)
|
||||||
|
|
@ -358,7 +384,7 @@ read_builtin (list)
|
||||||
|
|
||||||
if (i + 2 >= size)
|
if (i + 2 >= size)
|
||||||
{
|
{
|
||||||
input_string = xrealloc (input_string, size += 128);
|
input_string = (char *)xrealloc (input_string, size += 128);
|
||||||
remove_unwind_protect ();
|
remove_unwind_protect ();
|
||||||
add_unwind_protect (xfree, input_string);
|
add_unwind_protect (xfree, input_string);
|
||||||
}
|
}
|
||||||
|
|
@ -383,7 +409,7 @@ read_builtin (list)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == delim)
|
if ((unsigned char)c == delim)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (c == CTLESC || c == CTLNUL)
|
if (c == CTLESC || c == CTLNUL)
|
||||||
|
|
@ -410,7 +436,7 @@ read_builtin (list)
|
||||||
if (nchars > 0)
|
if (nchars > 0)
|
||||||
rl_num_chars_to_read = 0;
|
rl_num_chars_to_read = 0;
|
||||||
if (delim != '\n')
|
if (delim != '\n')
|
||||||
reset_eol_delim ();
|
reset_eol_delim ((char *)NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -433,12 +459,9 @@ read_builtin (list)
|
||||||
an assign them to `arrayname' in turn. */
|
an assign them to `arrayname' in turn. */
|
||||||
if (arrayname)
|
if (arrayname)
|
||||||
{
|
{
|
||||||
var = find_variable (arrayname);
|
var = find_or_make_array_variable (arrayname, 1);
|
||||||
if (var == 0)
|
if (var == 0)
|
||||||
var = make_new_array_variable (arrayname);
|
return EXECUTION_FAILURE; /* readonly or noassign */
|
||||||
else if (array_p (var) == 0)
|
|
||||||
var = convert_var_to_array (var);
|
|
||||||
|
|
||||||
empty_array (array_cell (var));
|
empty_array (array_cell (var));
|
||||||
|
|
||||||
alist = list_string (input_string, ifs_chars, 0);
|
alist = list_string (input_string, ifs_chars, 0);
|
||||||
|
|
@ -504,7 +527,7 @@ read_builtin (list)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
builtin_error ("`%s': not a valid identifier", varname);
|
builtin_error ("`%s': not a valid identifier", varname);
|
||||||
free (orig_input_string);
|
xfree (orig_input_string);
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -522,7 +545,7 @@ read_builtin (list)
|
||||||
{
|
{
|
||||||
t1 = dequote_string (t);
|
t1 = dequote_string (t);
|
||||||
var = bind_read_variable (varname, t1);
|
var = bind_read_variable (varname, t1);
|
||||||
free (t1);
|
xfree (t1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
var = bind_read_variable (varname, t);
|
var = bind_read_variable (varname, t);
|
||||||
|
|
@ -536,7 +559,7 @@ read_builtin (list)
|
||||||
FREE (t);
|
FREE (t);
|
||||||
if (var == 0)
|
if (var == 0)
|
||||||
{
|
{
|
||||||
free (orig_input_string);
|
xfree (orig_input_string);
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -552,7 +575,7 @@ read_builtin (list)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
builtin_error ("`%s': not a valid identifier", list->word->word);
|
builtin_error ("`%s': not a valid identifier", list->word->word);
|
||||||
free (orig_input_string);
|
xfree (orig_input_string);
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -565,14 +588,14 @@ read_builtin (list)
|
||||||
{
|
{
|
||||||
t = dequote_string (input_string);
|
t = dequote_string (input_string);
|
||||||
var = bind_read_variable (list->word->word, t);
|
var = bind_read_variable (list->word->word, t);
|
||||||
free (t);
|
xfree (t);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
var = bind_read_variable (list->word->word, input_string);
|
var = bind_read_variable (list->word->word, input_string);
|
||||||
stupidly_hack_special_variables (list->word->word);
|
stupidly_hack_special_variables (list->word->word);
|
||||||
if (var)
|
if (var)
|
||||||
VUNSETATTR (var, att_invisible);
|
VUNSETATTR (var, att_invisible);
|
||||||
free (orig_input_string);
|
xfree (orig_input_string);
|
||||||
|
|
||||||
return (retval);
|
return (retval);
|
||||||
}
|
}
|
||||||
|
|
@ -583,21 +606,12 @@ bind_read_variable (name, value)
|
||||||
{
|
{
|
||||||
#if defined (ARRAY_VARS)
|
#if defined (ARRAY_VARS)
|
||||||
if (valid_array_reference (name) == 0)
|
if (valid_array_reference (name) == 0)
|
||||||
{
|
return (bind_variable (name, value));
|
||||||
#if 0
|
|
||||||
if (legal_identifier (name) == 0)
|
|
||||||
{
|
|
||||||
builtin_error ("`%s': not a valid identifier", name);
|
|
||||||
return ((SHELL_VAR *)NULL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return (bind_variable (name, value));
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
return (do_array_element_assignment (name, value));
|
return (assign_array_element (name, value));
|
||||||
#else
|
#else /* !ARRAY_VARS */
|
||||||
return bind_variable (name, value);
|
return bind_variable (name, value);
|
||||||
#endif
|
#endif /* !ARRAY_VARS */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
|
|
@ -614,18 +628,18 @@ edit_line (p)
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
return ret;
|
return ret;
|
||||||
len = strlen (ret);
|
len = strlen (ret);
|
||||||
ret = xrealloc (ret, len + 2);
|
ret = (char *)xrealloc (ret, len + 2);
|
||||||
ret[len++] = delim;
|
ret[len++] = delim;
|
||||||
ret[len] = '\0';
|
ret[len] = '\0';
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int old_delim_ctype;
|
static int old_delim_ctype;
|
||||||
static Function *old_delim_func;
|
static rl_command_func_t *old_delim_func;
|
||||||
static int old_newline_ctype;
|
static int old_newline_ctype;
|
||||||
static Function *old_newline_func;
|
static rl_command_func_t *old_newline_func;
|
||||||
|
|
||||||
static int delim_char;
|
static unsigned char delim_char;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_eol_delim (c)
|
set_eol_delim (c)
|
||||||
|
|
@ -653,8 +667,8 @@ set_eol_delim (c)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reset_eol_delim (c)
|
reset_eol_delim (cp)
|
||||||
int c;
|
char *cp;
|
||||||
{
|
{
|
||||||
Keymap cmap;
|
Keymap cmap;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,6 @@ histchars Characters controlling history expansion and quick
|
||||||
third is the `history comment' character, usually `#'.
|
third is the `history comment' character, usually `#'.
|
||||||
# endif /* BANG_HISTORY */
|
# endif /* BANG_HISTORY */
|
||||||
HISTIGNORE A colon-separated list of patterns used to decide which
|
HISTIGNORE A colon-separated list of patterns used to decide which
|
||||||
command should be saved on the history list.
|
commands should be saved on the history list.
|
||||||
#endif /* HISTORY */
|
#endif /* HISTORY */
|
||||||
$END
|
$END
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ int
|
||||||
return_builtin (list)
|
return_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
return_catch_value = list ? get_numeric_arg (list, 1) : last_command_exit_value;
|
return_catch_value = list ? get_exitstat (list) : last_command_exit_value;
|
||||||
|
|
||||||
if (return_catch_flag)
|
if (return_catch_flag)
|
||||||
longjmp (return_catch, 1);
|
longjmp (return_catch, 1);
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,10 @@ $PRODUCES set.c
|
||||||
# include "../bashhist.h"
|
# include "../bashhist.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int interactive;
|
|
||||||
extern int noclobber, posixly_correct, ignoreeof, eof_encountered_limit;
|
extern int noclobber, posixly_correct, ignoreeof, eof_encountered_limit;
|
||||||
|
#if defined (HISTORY)
|
||||||
|
extern int dont_save_function_defs;
|
||||||
|
#endif
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
extern int no_line_editing;
|
extern int no_line_editing;
|
||||||
#endif /* READLINE */
|
#endif /* READLINE */
|
||||||
|
|
@ -92,6 +94,7 @@ $SHORT_DOC set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
|
||||||
noclobber same as -C
|
noclobber same as -C
|
||||||
noexec same as -n
|
noexec same as -n
|
||||||
noglob same as -f
|
noglob same as -f
|
||||||
|
nolog currently accepted but ignored
|
||||||
notify same as -b
|
notify same as -b
|
||||||
nounset same as -u
|
nounset same as -u
|
||||||
onecmd same as -t
|
onecmd same as -t
|
||||||
|
|
@ -132,16 +135,19 @@ parameters and are assigned, in order, to $1, $2, .. $n. If no
|
||||||
ARGs are given, all shell variables are printed.
|
ARGs are given, all shell variables are printed.
|
||||||
$END
|
$END
|
||||||
|
|
||||||
static int set_ignoreeof ();
|
static void print_minus_o_option __P((char *, int, int));
|
||||||
static int set_posix_mode ();
|
static void print_all_shell_variables __P((void));
|
||||||
|
|
||||||
|
static int set_ignoreeof __P((int, char *));
|
||||||
|
static int set_posix_mode __P((int, char *));
|
||||||
|
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
static int set_edit_mode ();
|
static int set_edit_mode __P((int, char *));
|
||||||
static int get_edit_mode ();
|
static int get_edit_mode __P((char *));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (HISTORY)
|
#if defined (HISTORY)
|
||||||
static int bash_set_history ();
|
static int bash_set_history __P((int, char *));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static char *on = "on";
|
static char *on = "on";
|
||||||
|
|
@ -179,23 +185,29 @@ struct {
|
||||||
{(char *)NULL, 0 },
|
{(char *)NULL, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef int setopt_set_func_t __P((int, char *));
|
||||||
|
typedef int setopt_get_func_t __P((char *));
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
char *name;
|
char *name;
|
||||||
int *variable;
|
int *variable;
|
||||||
Function *set_func;
|
setopt_set_func_t *set_func;
|
||||||
Function *get_func;
|
setopt_get_func_t *get_func;
|
||||||
} binary_o_options[] = {
|
} binary_o_options[] = {
|
||||||
#if defined (HISTORY)
|
#if defined (HISTORY)
|
||||||
{ "history", &remember_on_history, bash_set_history, (Function *)NULL },
|
{ "history", &remember_on_history, bash_set_history, (setopt_get_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
{ "ignoreeof", &ignoreeof, set_ignoreeof, (Function *)NULL },
|
{ "ignoreeof", &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL },
|
||||||
{ "interactive-comments", &interactive_comments, (Function *)NULL, (Function *)NULL },
|
{ "interactive-comments", &interactive_comments, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
|
||||||
{ "posix", &posixly_correct, set_posix_mode, (Function *)NULL },
|
#if defined (HISTORY)
|
||||||
|
{ "nolog", &dont_save_function_defs, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
|
||||||
|
#endif
|
||||||
|
{ "posix", &posixly_correct, set_posix_mode, (setopt_get_func_t *)NULL },
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
{ "emacs", (int *)NULL, set_edit_mode, get_edit_mode },
|
{ "emacs", (int *)NULL, set_edit_mode, get_edit_mode },
|
||||||
{ "vi", (int *)NULL, set_edit_mode, get_edit_mode },
|
{ "vi", (int *)NULL, set_edit_mode, get_edit_mode },
|
||||||
#endif
|
#endif
|
||||||
{ (char *)NULL, (int *)NULL }
|
{ (char *)NULL, (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GET_BINARY_O_OPTION_VALUE(i, name) \
|
#define GET_BINARY_O_OPTION_VALUE(i, name) \
|
||||||
|
|
@ -375,7 +387,6 @@ set_minus_o_option (on_or_off, option_name)
|
||||||
char *option_name;
|
char *option_name;
|
||||||
{
|
{
|
||||||
int option_char;
|
int option_char;
|
||||||
VFunction *set_func;
|
|
||||||
register int i;
|
register int i;
|
||||||
|
|
||||||
for (i = 0; binary_o_options[i].name; i++)
|
for (i = 0; binary_o_options[i].name; i++)
|
||||||
|
|
@ -387,7 +398,7 @@ set_minus_o_option (on_or_off, option_name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0, option_char = -1, set_func = 0; o_options[i].name; i++)
|
for (i = 0, option_char = -1; o_options[i].name; i++)
|
||||||
{
|
{
|
||||||
if (STREQ (option_name, o_options[i].name))
|
if (STREQ (option_name, o_options[i].name))
|
||||||
{
|
{
|
||||||
|
|
@ -450,7 +461,7 @@ set_shellopts ()
|
||||||
if (GET_BINARY_O_OPTION_VALUE (i, binary_o_options[i].name))
|
if (GET_BINARY_O_OPTION_VALUE (i, binary_o_options[i].name))
|
||||||
vsize += strlen (binary_o_options[i].name) + 1;
|
vsize += strlen (binary_o_options[i].name) + 1;
|
||||||
|
|
||||||
value = xmalloc (vsize + 1);
|
value = (char *)xmalloc (vsize + 1);
|
||||||
|
|
||||||
for (i = vptr = 0; o_options[i].name; i++)
|
for (i = vptr = 0; o_options[i].name; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -752,6 +763,7 @@ unset_builtin (list)
|
||||||
name = list->word->word;
|
name = list->word->word;
|
||||||
|
|
||||||
#if defined (ARRAY_VARS)
|
#if defined (ARRAY_VARS)
|
||||||
|
unset_array = 0;
|
||||||
if (!unset_function && valid_array_reference (name))
|
if (!unset_function && valid_array_reference (name))
|
||||||
{
|
{
|
||||||
t = strchr (name, '[');
|
t = strchr (name, '[');
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ $PRODUCES setattr.c
|
||||||
extern int posixly_correct;
|
extern int posixly_correct;
|
||||||
extern int array_needs_making;
|
extern int array_needs_making;
|
||||||
extern char *this_command_name;
|
extern char *this_command_name;
|
||||||
extern Function *this_shell_builtin;
|
extern sh_builtin_func_t *this_shell_builtin;
|
||||||
|
|
||||||
#ifdef ARRAY_VARS
|
#ifdef ARRAY_VARS
|
||||||
extern int declare_builtin ();
|
extern int declare_builtin ();
|
||||||
|
|
@ -248,7 +248,11 @@ set_or_show_attributes (list, attribute, nodefs)
|
||||||
if (arrays_only && array_p (var) == 0)
|
if (arrays_only && array_p (var) == 0)
|
||||||
continue;
|
continue;
|
||||||
#endif
|
#endif
|
||||||
|
#if 0
|
||||||
if ((var->attributes & attribute) && invisible_p (var) == 0)
|
if ((var->attributes & attribute) && invisible_p (var) == 0)
|
||||||
|
#else
|
||||||
|
if ((var->attributes & attribute))
|
||||||
|
#endif
|
||||||
show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
|
show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
|
||||||
}
|
}
|
||||||
free (variable_list);
|
free (variable_list);
|
||||||
|
|
@ -327,6 +331,8 @@ show_var_attributes (var, pattr, nodefs)
|
||||||
printf ("%s\n", var->name);
|
printf ("%s\n", var->name);
|
||||||
else if (function_p (var))
|
else if (function_p (var))
|
||||||
printf ("%s\n", named_function_string (var->name, function_cell (var), 1));
|
printf ("%s\n", named_function_string (var->name, function_cell (var), 1));
|
||||||
|
else if (invisible_p (var))
|
||||||
|
printf ("%s\n", var->name);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x = sh_double_quote (value_cell (var) ? value_cell (var) : "");
|
x = sh_double_quote (value_cell (var) ? value_cell (var) : "");
|
||||||
|
|
@ -342,7 +348,6 @@ show_name_attributes (name, nodefs)
|
||||||
int nodefs;
|
int nodefs;
|
||||||
{
|
{
|
||||||
SHELL_VAR *var;
|
SHELL_VAR *var;
|
||||||
int ret;
|
|
||||||
|
|
||||||
var = find_tempenv_variable (name);
|
var = find_tempenv_variable (name);
|
||||||
if (var == 0)
|
if (var == 0)
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ int
|
||||||
shift_builtin (list)
|
shift_builtin (list)
|
||||||
WORD_LIST *list;
|
WORD_LIST *list;
|
||||||
{
|
{
|
||||||
int times;
|
long times;
|
||||||
register int count;
|
register int count;
|
||||||
WORD_LIST *temp;
|
WORD_LIST *temp;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ extern int force_append_history;
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
extern int hist_verify, history_reediting, perform_hostname_completion;
|
extern int hist_verify, history_reediting, perform_hostname_completion;
|
||||||
extern int no_empty_command_completion;
|
extern int no_empty_command_completion;
|
||||||
extern void enable_hostname_completion ();
|
extern int enable_hostname_completion __P((int));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined (PROGRAMMABLE_COMPLETION)
|
#if defined (PROGRAMMABLE_COMPLETION)
|
||||||
|
|
@ -90,72 +90,80 @@ extern int restricted_shell;
|
||||||
extern char *shell_name;
|
extern char *shell_name;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void set_shellopts ();
|
static int set_interactive_comments __P((int));
|
||||||
|
|
||||||
static int set_interactive_comments ();
|
|
||||||
|
|
||||||
#if defined (RESTRICTED_SHELL)
|
#if defined (RESTRICTED_SHELL)
|
||||||
static int set_restricted_shell ();
|
static int set_restricted_shell __P((int));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int shopt_login_shell;
|
||||||
|
|
||||||
|
typedef int shopt_set_func_t __P((int));
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
char *name;
|
char *name;
|
||||||
int *value;
|
int *value;
|
||||||
Function *set_func;
|
shopt_set_func_t *set_func;
|
||||||
} shopt_vars[] = {
|
} shopt_vars[] = {
|
||||||
{ "cdable_vars", &cdable_vars, (Function *)NULL },
|
{ "cdable_vars", &cdable_vars, (shopt_set_func_t *)NULL },
|
||||||
{ "cdspell", &cdspelling, (Function *)NULL },
|
{ "cdspell", &cdspelling, (shopt_set_func_t *)NULL },
|
||||||
{ "checkhash", &check_hashed_filenames, (Function *)NULL },
|
{ "checkhash", &check_hashed_filenames, (shopt_set_func_t *)NULL },
|
||||||
{ "checkwinsize", &check_window_size, (Function *)NULL },
|
{ "checkwinsize", &check_window_size, (shopt_set_func_t *)NULL },
|
||||||
#if defined (HISTORY)
|
#if defined (HISTORY)
|
||||||
{ "cmdhist", &command_oriented_history, (Function *)NULL },
|
{ "cmdhist", &command_oriented_history, (shopt_set_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
{ "dotglob", &glob_dot_filenames, (Function *)NULL },
|
{ "dotglob", &glob_dot_filenames, (shopt_set_func_t *)NULL },
|
||||||
{ "execfail", &no_exit_on_failed_exec, (Function *)NULL },
|
{ "execfail", &no_exit_on_failed_exec, (shopt_set_func_t *)NULL },
|
||||||
{ "expand_aliases", &expand_aliases, (Function *)NULL },
|
{ "expand_aliases", &expand_aliases, (shopt_set_func_t *)NULL },
|
||||||
#if defined (EXTENDED_GLOB)
|
#if defined (EXTENDED_GLOB)
|
||||||
{ "extglob", &extended_glob, (Function *)NULL },
|
{ "extglob", &extended_glob, (shopt_set_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
{ "histreedit", &history_reediting, (Function *)NULL },
|
{ "histreedit", &history_reediting, (shopt_set_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
#if defined (HISTORY)
|
#if defined (HISTORY)
|
||||||
{ "histappend", &force_append_history, (Function *)NULL },
|
{ "histappend", &force_append_history, (shopt_set_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
{ "histverify", &hist_verify, (Function *)NULL },
|
{ "histverify", &hist_verify, (shopt_set_func_t *)NULL },
|
||||||
{ "hostcomplete", &perform_hostname_completion, (Function *)enable_hostname_completion },
|
{ "hostcomplete", &perform_hostname_completion, enable_hostname_completion },
|
||||||
#endif
|
#endif
|
||||||
{ "huponexit", &hup_on_exit, (Function *)NULL },
|
{ "huponexit", &hup_on_exit, (shopt_set_func_t *)NULL },
|
||||||
{ "interactive_comments", &interactive_comments, set_interactive_comments },
|
{ "interactive_comments", &interactive_comments, set_interactive_comments },
|
||||||
#if defined (HISTORY)
|
#if defined (HISTORY)
|
||||||
{ "lithist", &literal_history, (Function *)NULL },
|
{ "lithist", &literal_history, (shopt_set_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
{ "mailwarn", &mail_warning, (Function *)NULL },
|
{ "login_shell", &shopt_login_shell, set_login_shell },
|
||||||
|
{ "mailwarn", &mail_warning, (shopt_set_func_t *)NULL },
|
||||||
#if defined (READLINE)
|
#if defined (READLINE)
|
||||||
{ "no_empty_cmd_completion", &no_empty_command_completion, (Function *)NULL },
|
{ "no_empty_cmd_completion", &no_empty_command_completion, (shopt_set_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
{ "nocaseglob", &glob_ignore_case, (Function *)NULL },
|
{ "nocaseglob", &glob_ignore_case, (shopt_set_func_t *)NULL },
|
||||||
{ "nullglob", &allow_null_glob_expansion, (Function *)NULL },
|
{ "nullglob", &allow_null_glob_expansion, (shopt_set_func_t *)NULL },
|
||||||
#if defined (PROGRAMMABLE_COMPLETION)
|
#if defined (PROGRAMMABLE_COMPLETION)
|
||||||
{ "progcomp", &prog_completion_enabled, (Function *)NULL },
|
{ "progcomp", &prog_completion_enabled, (shopt_set_func_t *)NULL },
|
||||||
#endif
|
#endif
|
||||||
{ "promptvars", &promptvars, (Function *)NULL },
|
{ "promptvars", &promptvars, (shopt_set_func_t *)NULL },
|
||||||
#if defined (RESTRICTED_SHELL)
|
#if defined (RESTRICTED_SHELL)
|
||||||
{ "restricted_shell", &restricted_shell, set_restricted_shell },
|
{ "restricted_shell", &restricted_shell, set_restricted_shell },
|
||||||
#endif
|
#endif
|
||||||
{ "shift_verbose", &print_shift_error, (Function *)NULL },
|
{ "shift_verbose", &print_shift_error, (shopt_set_func_t *)NULL },
|
||||||
{ "sourcepath", &source_uses_path, (Function *)NULL },
|
{ "sourcepath", &source_uses_path, (shopt_set_func_t *)NULL },
|
||||||
{ "xpg_echo", &xpg_echo, (Function *)NULL },
|
{ "xpg_echo", &xpg_echo, (shopt_set_func_t *)NULL },
|
||||||
{ (char *)0, (int *)0, (Function *)NULL }
|
{ (char *)0, (int *)0, (shopt_set_func_t *)NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
static char *on = "on";
|
static char *on = "on";
|
||||||
static char *off = "off";
|
static char *off = "off";
|
||||||
|
|
||||||
static int list_shopt_o_options ();
|
static int find_shopt __P((char *));
|
||||||
static int list_some_o_options (), list_some_shopts ();
|
static int toggle_shopts __P((int, WORD_LIST *, int));
|
||||||
static int toggle_shopts (), list_shopts (), set_shopt_o_options ();
|
static void print_shopt __P((char *, int, int));
|
||||||
|
static int list_shopts __P((WORD_LIST *, int));
|
||||||
|
static int list_some_shopts __P((int, int));
|
||||||
|
static int list_shopt_o_options __P((WORD_LIST *, int));
|
||||||
|
static int list_some_o_options __P((int, int));
|
||||||
|
static int set_shopt_o_options __P((int, WORD_LIST *, int));
|
||||||
|
|
||||||
#define SFLAG 0x01
|
#define SFLAG 0x01
|
||||||
#define UFLAG 0x02
|
#define UFLAG 0x02
|
||||||
|
|
@ -244,6 +252,8 @@ reset_shopt_options ()
|
||||||
hist_verify = history_reediting = 0;
|
hist_verify = history_reediting = 0;
|
||||||
perform_hostname_completion = 1;
|
perform_hostname_completion = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
shopt_login_shell = login_shell;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
@ -444,6 +454,15 @@ set_restricted_shell (mode)
|
||||||
}
|
}
|
||||||
#endif /* RESTRICTED_SHELL */
|
#endif /* RESTRICTED_SHELL */
|
||||||
|
|
||||||
|
/* Not static so shell.c can call it to initialize shopt_login_shell */
|
||||||
|
int
|
||||||
|
set_login_shell (mode)
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
shopt_login_shell = login_shell != 0;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
char **
|
char **
|
||||||
get_shopt_options ()
|
get_shopt_options ()
|
||||||
{
|
{
|
||||||
|
|
@ -457,3 +476,43 @@ get_shopt_options ()
|
||||||
ret[i] = (char *)NULL;
|
ret[i] = (char *)NULL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* External interface for other parts of the shell. NAME is a string option;
|
||||||
|
* MODE is 0 if we want to unset an option; 1 if we want to set an option.
|
||||||
|
* REUSABLE is 1 if we want to print output in a form that may be reused.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
shopt_setopt (name, mode)
|
||||||
|
char *name;
|
||||||
|
int mode;
|
||||||
|
{
|
||||||
|
WORD_LIST *wl;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
wl = add_string_to_list (name, (WORD_LIST *)NULL);
|
||||||
|
r = toggle_shopts (mode, wl, 0);
|
||||||
|
dispose_words (wl);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
shopt_listopt (name, reusable)
|
||||||
|
char *name;
|
||||||
|
int reusable;
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (name == 0)
|
||||||
|
return (list_shopts ((WORD_LIST *)NULL, reusable ? PFLAG : 0));
|
||||||
|
|
||||||
|
i = find_shopt (name);
|
||||||
|
if (i < 0)
|
||||||
|
{
|
||||||
|
SHOPT_ERROR (name);
|
||||||
|
return (EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
print_shopt (name, *shopt_vars[i].value, reusable ? PFLAG : 0);
|
||||||
|
return (EXECUTION_SUCCESS);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -47,8 +47,6 @@ $END
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
|
|
||||||
extern int job_control;
|
|
||||||
|
|
||||||
static SigHandler *old_cont;
|
static SigHandler *old_cont;
|
||||||
#if 0
|
#if 0
|
||||||
static SigHandler *old_stop;
|
static SigHandler *old_stop;
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ are string operators as well, and numeric comparison operators.
|
||||||
|
|
||||||
File operators:
|
File operators:
|
||||||
|
|
||||||
|
-a FILE True if file exists.
|
||||||
-b FILE True if file is block special.
|
-b FILE True if file is block special.
|
||||||
-c FILE True if file is character special.
|
-c FILE True if file is character special.
|
||||||
-d FILE True if file is a directory.
|
-d FILE True if file is a directory.
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,8 @@ $END
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
|
|
||||||
static int display_traps ();
|
static void showtrap __P((int));
|
||||||
|
static int display_traps __P((WORD_LIST *));
|
||||||
|
|
||||||
/* The trap command:
|
/* The trap command:
|
||||||
|
|
||||||
|
|
@ -79,7 +80,7 @@ static int display_traps ();
|
||||||
#define REVERT 1 /* Revert to this signals original value. */
|
#define REVERT 1 /* Revert to this signals original value. */
|
||||||
#define IGNORE 2 /* Ignore this signal. */
|
#define IGNORE 2 /* Ignore this signal. */
|
||||||
|
|
||||||
extern int interactive, posixly_correct;
|
extern int posixly_correct;
|
||||||
|
|
||||||
int
|
int
|
||||||
trap_builtin (list)
|
trap_builtin (list)
|
||||||
|
|
@ -228,7 +229,7 @@ display_traps (list)
|
||||||
|
|
||||||
if (list == 0)
|
if (list == 0)
|
||||||
{
|
{
|
||||||
for (i = 0; i <= NSIG; i++)
|
for (i = 0; i < BASH_NSIG; i++)
|
||||||
showtrap (i);
|
showtrap (i);
|
||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ $END
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
|
|
||||||
extern int find_reserved_word ();
|
extern int find_reserved_word __P((char *));
|
||||||
|
|
||||||
extern char *this_command_name;
|
extern char *this_command_name;
|
||||||
|
|
||||||
|
|
@ -213,7 +213,7 @@ describe_command (command, verbose, all)
|
||||||
int verbose, all;
|
int verbose, all;
|
||||||
{
|
{
|
||||||
int found, i, found_file, f;
|
int found, i, found_file, f;
|
||||||
char *full_path, *x, *cwd;
|
char *full_path, *x;
|
||||||
SHELL_VAR *func;
|
SHELL_VAR *func;
|
||||||
#if defined (ALIAS)
|
#if defined (ALIAS)
|
||||||
alias_t *alias;
|
alias_t *alias;
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,9 @@ option is given, it is interpreted as follows:
|
||||||
-u the maximum number of user processes
|
-u the maximum number of user processes
|
||||||
-v the size of virtual memory
|
-v the size of virtual memory
|
||||||
|
|
||||||
If LIMIT is given, it is the new value of the specified resource.
|
If LIMIT is given, it is the new value of the specified resource;
|
||||||
|
the special LIMIT values `soft', `hard', and `unlimited' stand for
|
||||||
|
the current soft limit, the current hard limit, and no limit, respectively.
|
||||||
Otherwise, the current value of the specified resource is printed.
|
Otherwise, the current value of the specified resource is printed.
|
||||||
If no option is given, then -f is assumed. Values are in 1024-byte
|
If no option is given, then -f is assumed. Values are in 1024-byte
|
||||||
increments, except for -t, which is in seconds, -p, which is in
|
increments, except for -t, which is in seconds, -p, which is in
|
||||||
|
|
@ -109,8 +111,6 @@ extern int errno;
|
||||||
# define print_rlimtype(num, nl) printf ("%ld%s", num, nl ? "\n" : "")
|
# define print_rlimtype(num, nl) printf ("%ld%s", num, nl ? "\n" : "")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DESCFMT "%-28s"
|
|
||||||
|
|
||||||
/* Some systems use RLIMIT_NOFILE, others use RLIMIT_OFILE */
|
/* Some systems use RLIMIT_NOFILE, others use RLIMIT_OFILE */
|
||||||
#if defined (HAVE_RESOURCE) && defined (RLIMIT_OFILE) && !defined (RLIMIT_NOFILE)
|
#if defined (HAVE_RESOURCE) && defined (RLIMIT_OFILE) && !defined (RLIMIT_NOFILE)
|
||||||
# define RLIMIT_NOFILE RLIMIT_OFILE
|
# define RLIMIT_NOFILE RLIMIT_OFILE
|
||||||
|
|
@ -154,58 +154,72 @@ extern int errno;
|
||||||
# define RLIM_INFINITY 0x7fffffff
|
# define RLIM_INFINITY 0x7fffffff
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined (RLIM_SAVED_CUR)
|
||||||
|
# define RLIM_SAVED_CUR RLIM_INFINITY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined (RLIM_SAVED_MAX)
|
||||||
|
# define RLIM_SAVED_MAX RLIM_INFINITY
|
||||||
|
#endif
|
||||||
|
|
||||||
#define LIMIT_HARD 0x01
|
#define LIMIT_HARD 0x01
|
||||||
#define LIMIT_SOFT 0x02
|
#define LIMIT_SOFT 0x02
|
||||||
|
|
||||||
|
static int _findlim __P((int));
|
||||||
|
|
||||||
static int ulimit_internal __P((int, char *, int, int));
|
static int ulimit_internal __P((int, char *, int, int));
|
||||||
|
|
||||||
|
static int get_limit __P((int, RLIMTYPE *, RLIMTYPE *));
|
||||||
|
static int set_limit __P((int, RLIMTYPE, int));
|
||||||
|
|
||||||
static void printone __P((int, RLIMTYPE, int));
|
static void printone __P((int, RLIMTYPE, int));
|
||||||
static void print_all_limits __P((int));
|
static void print_all_limits __P((int));
|
||||||
|
|
||||||
static int get_limit __P((int, int, RLIMTYPE *));
|
static int set_all_limits __P((int, RLIMTYPE));
|
||||||
static int set_limit __P((int, RLIMTYPE, int));
|
|
||||||
|
|
||||||
static int filesize __P((RLIMTYPE *));
|
static int filesize __P((RLIMTYPE *));
|
||||||
static int pipesize __P((RLIMTYPE *));
|
static int pipesize __P((RLIMTYPE *));
|
||||||
static int getmaxuprc __P((int, RLIMTYPE *));
|
static int getmaxuprc __P((RLIMTYPE *));
|
||||||
static int getmaxvm __P((int, RLIMTYPE *));
|
static int getmaxvm __P((RLIMTYPE *, RLIMTYPE *));
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int option; /* The ulimit option for this limit. */
|
int option; /* The ulimit option for this limit. */
|
||||||
int parameter; /* Parameter to pass to get_limit (). */
|
int parameter; /* Parameter to pass to get_limit (). */
|
||||||
int block_factor; /* Blocking factor for specific limit. */
|
int block_factor; /* Blocking factor for specific limit. */
|
||||||
char *description; /* Descriptive string to output. */
|
char *description; /* Descriptive string to output. */
|
||||||
|
char *units; /* scale */
|
||||||
} RESOURCE_LIMITS;
|
} RESOURCE_LIMITS;
|
||||||
|
|
||||||
static RESOURCE_LIMITS limits[] = {
|
static RESOURCE_LIMITS limits[] = {
|
||||||
#ifdef RLIMIT_CORE
|
#ifdef RLIMIT_CORE
|
||||||
{ 'c', RLIMIT_CORE, 1024, "core file size (blocks)" },
|
{ 'c', RLIMIT_CORE, 1024, "core file size", "blocks" },
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLIMIT_DATA
|
#ifdef RLIMIT_DATA
|
||||||
{ 'd', RLIMIT_DATA, 1024, "data seg size (kbytes)" },
|
{ 'd', RLIMIT_DATA, 1024, "data seg size", "kbytes" },
|
||||||
#endif
|
#endif
|
||||||
{ 'f', RLIMIT_FILESIZE, 1024, "file size (blocks)" },
|
{ 'f', RLIMIT_FILESIZE, 1024, "file size", "blocks" },
|
||||||
#ifdef RLIMIT_MEMLOCK
|
#ifdef RLIMIT_MEMLOCK
|
||||||
{ 'l', RLIMIT_MEMLOCK, 1024, "max locked memory (kbytes)" },
|
{ 'l', RLIMIT_MEMLOCK, 1024, "max locked memory", "kbytes" },
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLIMIT_RSS
|
#ifdef RLIMIT_RSS
|
||||||
{ 'm', RLIMIT_RSS, 1024, "max memory size (kbytes)" },
|
{ 'm', RLIMIT_RSS, 1024, "max memory size", "kbytes" },
|
||||||
#endif /* RLIMIT_RSS */
|
#endif /* RLIMIT_RSS */
|
||||||
{ 'n', RLIMIT_OPENFILES, 1, "open files" },
|
{ 'n', RLIMIT_OPENFILES, 1, "open files", (char *)NULL},
|
||||||
{ 'p', RLIMIT_PIPESIZE, 512, "pipe size (512 bytes)" },
|
{ 'p', RLIMIT_PIPESIZE, 512, "pipe size", "512 bytes" },
|
||||||
#ifdef RLIMIT_STACK
|
#ifdef RLIMIT_STACK
|
||||||
{ 's', RLIMIT_STACK, 1024, "stack size (kbytes)" },
|
{ 's', RLIMIT_STACK, 1024, "stack size", "kbytes" },
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLIMIT_CPU
|
#ifdef RLIMIT_CPU
|
||||||
{ 't', RLIMIT_CPU, 1, "cpu time (seconds)" },
|
{ 't', RLIMIT_CPU, 1, "cpu time", "seconds" },
|
||||||
#endif /* RLIMIT_CPU */
|
#endif /* RLIMIT_CPU */
|
||||||
{ 'u', RLIMIT_MAXUPROC, 1, "max user processes" },
|
{ 'u', RLIMIT_MAXUPROC, 1, "max user processes", (char *)NULL },
|
||||||
#if defined (HAVE_RESOURCE)
|
#if defined (HAVE_RESOURCE)
|
||||||
{ 'v', RLIMIT_VIRTMEM, RLIMIT_VMBLKSZ, "virtual memory (kbytes)" },
|
{ 'v', RLIMIT_VIRTMEM, RLIMIT_VMBLKSZ, "virtual memory", "kbytes" },
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLIMIT_SWAP
|
#ifdef RLIMIT_SWAP
|
||||||
{ 'w', RLIMIT_SWAP, 1024, "swap size (kbytes)" },
|
{ 'w', RLIMIT_SWAP, 1024, "swap size", "kbytes" },
|
||||||
#endif
|
#endif
|
||||||
{ -1, -1, -1, (char *)NULL }
|
{ -1, -1, -1, (char *)NULL, (char *)NULL }
|
||||||
};
|
};
|
||||||
#define NCMDS (sizeof(limits) / sizeof(limits[0]))
|
#define NCMDS (sizeof(limits) / sizeof(limits[0]))
|
||||||
|
|
||||||
|
|
@ -308,6 +322,17 @@ ulimit_builtin (list)
|
||||||
|
|
||||||
if (all_limits)
|
if (all_limits)
|
||||||
{
|
{
|
||||||
|
#ifdef NOTYET
|
||||||
|
if (list) /* setting */
|
||||||
|
{
|
||||||
|
if (STREQ (list->word->word, "unlimited") == 0)
|
||||||
|
{
|
||||||
|
builtin_error ("invalid limit argument: %s", list->word->word);
|
||||||
|
return (EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
return (set_all_limits (mode == 0 ? LIMIT_SOFT|LIMIT_HARD : mode, RLIM_INFINITY));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
print_all_limits (mode == 0 ? LIMIT_SOFT : mode);
|
print_all_limits (mode == 0 ? LIMIT_SOFT : mode);
|
||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
@ -347,58 +372,66 @@ ulimit_internal (cmd, cmdarg, mode, multiple)
|
||||||
int mode, multiple;
|
int mode, multiple;
|
||||||
{
|
{
|
||||||
int opt, limind, setting;
|
int opt, limind, setting;
|
||||||
long block_factor;
|
int block_factor;
|
||||||
RLIMTYPE current_limit, real_limit, limit;
|
RLIMTYPE soft_limit, hard_limit, real_limit, limit;
|
||||||
|
|
||||||
setting = cmdarg != 0;
|
setting = cmdarg != 0;
|
||||||
limind = _findlim (cmd);
|
limind = _findlim (cmd);
|
||||||
if (mode == 0)
|
if (mode == 0)
|
||||||
mode = setting ? (LIMIT_HARD|LIMIT_SOFT) : LIMIT_SOFT;
|
mode = setting ? (LIMIT_HARD|LIMIT_SOFT) : LIMIT_SOFT;
|
||||||
opt = get_limit (limind, mode, ¤t_limit);
|
opt = get_limit (limind, &soft_limit, &hard_limit);
|
||||||
if (opt < 0)
|
if (opt < 0)
|
||||||
{
|
{
|
||||||
builtin_error ("cannot get limit: %s", strerror (errno));
|
builtin_error ("cannot get %s limit: %s", limits[limind].description,
|
||||||
|
strerror (errno));
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (setting == 0) /* print the value of the specified limit */
|
if (setting == 0) /* print the value of the specified limit */
|
||||||
{
|
{
|
||||||
printone (limind, current_limit, multiple);
|
printone (limind, (mode & LIMIT_SOFT) ? soft_limit : hard_limit, multiple);
|
||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Setting the limit. */
|
/* Setting the limit. */
|
||||||
if (STREQ (cmdarg, "unlimited"))
|
if (STREQ (cmdarg, "hard"))
|
||||||
limit = RLIM_INFINITY;
|
real_limit = hard_limit;
|
||||||
|
else if (STREQ (cmdarg, "soft"))
|
||||||
|
real_limit = soft_limit;
|
||||||
|
else if (STREQ (cmdarg, "unlimited"))
|
||||||
|
real_limit = RLIM_INFINITY;
|
||||||
else if (all_digits (cmdarg))
|
else if (all_digits (cmdarg))
|
||||||
limit = string_to_rlimtype (cmdarg);
|
{
|
||||||
|
limit = string_to_rlimtype (cmdarg);
|
||||||
|
block_factor = limits[limind].block_factor;
|
||||||
|
real_limit = limit * block_factor;
|
||||||
|
|
||||||
|
if ((real_limit / block_factor) != limit)
|
||||||
|
{
|
||||||
|
builtin_error ("limit out of range: %s", cmdarg);
|
||||||
|
return (EXECUTION_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
builtin_error ("bad non-numeric arg `%s'", cmdarg);
|
builtin_error ("bad non-numeric arg `%s'", cmdarg);
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
block_factor = (limit == RLIM_INFINITY) ? 1 : limits[limind].block_factor;
|
|
||||||
real_limit = limit * block_factor;
|
|
||||||
|
|
||||||
if (real_limit < 0 || (real_limit == 0 && limit != 0))
|
|
||||||
{
|
|
||||||
builtin_error ("limit out of range: %d", limit);
|
|
||||||
return (EXECUTION_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (set_limit (limind, real_limit, mode) < 0)
|
if (set_limit (limind, real_limit, mode) < 0)
|
||||||
{
|
{
|
||||||
builtin_error ("cannot modify limit: %s", strerror (errno));
|
builtin_error ("cannot modify %s limit: %s", limits[limind].description,
|
||||||
|
strerror (errno));
|
||||||
return (EXECUTION_FAILURE);
|
return (EXECUTION_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (EXECUTION_SUCCESS);
|
return (EXECUTION_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_limit (ind, mode, limptr)
|
get_limit (ind, softlim, hardlim)
|
||||||
int ind, mode;
|
int ind;
|
||||||
RLIMTYPE *limptr;
|
RLIMTYPE *softlim, *hardlim;
|
||||||
{
|
{
|
||||||
RLIMTYPE value;
|
RLIMTYPE value;
|
||||||
#if defined (HAVE_RESOURCE)
|
#if defined (HAVE_RESOURCE)
|
||||||
|
|
@ -421,18 +454,16 @@ get_limit (ind, mode, limptr)
|
||||||
value = (RLIMTYPE)getdtablesize ();
|
value = (RLIMTYPE)getdtablesize ();
|
||||||
break;
|
break;
|
||||||
case RLIMIT_VIRTMEM:
|
case RLIMIT_VIRTMEM:
|
||||||
if (getmaxvm (mode, &value) < 0)
|
return (getmaxvm (softlim, hardlim));
|
||||||
return -1;
|
|
||||||
break;
|
|
||||||
case RLIMIT_MAXUPROC:
|
case RLIMIT_MAXUPROC:
|
||||||
if (getmaxuprc (mode, &value) < 0)
|
if (getmaxuprc (&value) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
*limptr = value;
|
*softlim = *hardlim = value;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -440,13 +471,16 @@ get_limit (ind, mode, limptr)
|
||||||
#if defined (HAVE_RESOURCE)
|
#if defined (HAVE_RESOURCE)
|
||||||
if (getrlimit (limits[ind].parameter, &limit) < 0)
|
if (getrlimit (limits[ind].parameter, &limit) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
value = (mode & LIMIT_SOFT) ? limit.rlim_cur : limit.rlim_max;
|
*softlim = limit.rlim_cur;
|
||||||
|
*hardlim = limit.rlim_max;
|
||||||
# if defined (HPUX9)
|
# if defined (HPUX9)
|
||||||
if (limits[ind].parameter == RLIMIT_FILESIZE)
|
if (limits[ind].parameter == RLIMIT_FILESIZE)
|
||||||
*limptr = value * 512; /* Ugh. */
|
{
|
||||||
|
*softlim *= 512;
|
||||||
|
*hardlim *= 512; /* Ugh. */
|
||||||
|
}
|
||||||
else
|
else
|
||||||
# endif /* HPUX9 */
|
# endif /* HPUX9 */
|
||||||
*limptr = value;
|
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
|
|
@ -521,26 +555,21 @@ set_limit (ind, newlim, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
getmaxvm (mode, valuep)
|
getmaxvm (softlim, hardlim)
|
||||||
int mode;
|
RLIMTYPE *softlim, *hardlim;
|
||||||
RLIMTYPE *valuep;
|
|
||||||
{
|
{
|
||||||
#if defined (HAVE_RESOURCE)
|
#if defined (HAVE_RESOURCE)
|
||||||
struct rlimit rl;
|
struct rlimit datalim, stacklim;
|
||||||
RLIMTYPE maxdata, maxstack;
|
|
||||||
|
|
||||||
if (getrlimit (RLIMIT_DATA, &rl) < 0)
|
if (getrlimit (RLIMIT_DATA, &datalim) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
else
|
|
||||||
maxdata = (mode & LIMIT_SOFT) ? rl.rlim_cur : rl.rlim_max;
|
|
||||||
|
|
||||||
if (getrlimit (RLIMIT_STACK, &rl) < 0)
|
if (getrlimit (RLIMIT_STACK, &stacklim) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
else
|
|
||||||
maxstack = (mode & LIMIT_SOFT) ? rl.rlim_cur : rl.rlim_max;
|
|
||||||
|
|
||||||
/* Protect against overflow. */
|
/* Protect against overflow. */
|
||||||
*valuep = (maxdata / 1024L) + (maxstack / 1024L);
|
*softlim = (datalim.rlim_cur / 1024L) + (stacklim.rlim_cur / 1024L);
|
||||||
|
*hardlim = (datalim.rlim_max / 1024L) + (stacklim.rlim_max / 1024L);
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
|
|
@ -557,11 +586,7 @@ filesize(valuep)
|
||||||
if ((result = ulimit (1, 0L)) < 0)
|
if ((result = ulimit (1, 0L)) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
else
|
else
|
||||||
# if 0
|
*valuep = (RLIMTYPE) result * 512;
|
||||||
*valuep = (RLIMTYPE) result;
|
|
||||||
# else
|
|
||||||
*valuep = (RLIMTYPE) result * 512L;
|
|
||||||
# endif
|
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
|
|
@ -590,8 +615,7 @@ pipesize (valuep)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
getmaxuprc (mode, valuep)
|
getmaxuprc (valuep)
|
||||||
int mode;
|
|
||||||
RLIMTYPE *valuep;
|
RLIMTYPE *valuep;
|
||||||
{
|
{
|
||||||
# if defined (HAVE_SYSCONF) && defined (_SC_CHILD_MAX)
|
# if defined (HAVE_SYSCONF) && defined (_SC_CHILD_MAX)
|
||||||
|
|
@ -618,20 +642,17 @@ print_all_limits (mode)
|
||||||
int mode;
|
int mode;
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
RLIMTYPE value;
|
RLIMTYPE softlim, hardlim;
|
||||||
|
|
||||||
if (mode == 0)
|
if (mode == 0)
|
||||||
mode |= LIMIT_SOFT;
|
mode |= LIMIT_SOFT;
|
||||||
|
|
||||||
for (i = 0; limits[i].option > 0; i++)
|
for (i = 0; limits[i].option > 0; i++)
|
||||||
{
|
{
|
||||||
if (get_limit (i, mode, &value) < 0)
|
if (get_limit (i, &softlim, &hardlim) < 0)
|
||||||
{
|
builtin_error ("cannot get %s limit: %s", limits[i].description, strerror (errno));
|
||||||
fprintf (stderr, DESCFMT, limits[i].description);
|
|
||||||
builtin_error ("cannot get limit: %s", strerror (errno));
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
printone (i, value, 1);
|
printone (i, (mode & LIMIT_SOFT) ? softlim : hardlim, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -641,11 +662,65 @@ printone (limind, curlim, pdesc)
|
||||||
RLIMTYPE curlim;
|
RLIMTYPE curlim;
|
||||||
int pdesc;
|
int pdesc;
|
||||||
{
|
{
|
||||||
|
char unitstr[64];
|
||||||
|
|
||||||
if (pdesc)
|
if (pdesc)
|
||||||
printf (DESCFMT, limits[limind].description);
|
{
|
||||||
|
if (limits[limind].units)
|
||||||
|
sprintf (unitstr, "(%s, -%c) ", limits[limind].units, limits[limind].option);
|
||||||
|
else
|
||||||
|
sprintf (unitstr, "(-%c) ", limits[limind].option);
|
||||||
|
|
||||||
|
printf ("%-18s %16s", limits[limind].description, unitstr);
|
||||||
|
}
|
||||||
if (curlim == RLIM_INFINITY)
|
if (curlim == RLIM_INFINITY)
|
||||||
puts ("unlimited");
|
puts ("unlimited");
|
||||||
|
else if (curlim == RLIM_SAVED_MAX)
|
||||||
|
puts ("hard");
|
||||||
|
else if (curlim == RLIM_SAVED_CUR)
|
||||||
|
puts ("soft");
|
||||||
else
|
else
|
||||||
print_rlimtype ((curlim / limits[limind].block_factor), 1);
|
print_rlimtype ((curlim / limits[limind].block_factor), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set all limits to NEWLIM. NEWLIM currently must be RLIM_INFINITY, which
|
||||||
|
causes all limits to be set as high as possible depending on mode (like
|
||||||
|
csh `unlimit'). Returns -1 if NEWLIM is invalid, 0 if all limits
|
||||||
|
were set successfully, and 1 if at least one limit could not be set.
|
||||||
|
|
||||||
|
To raise all soft limits to their corresponding hard limits, use
|
||||||
|
ulimit -S -a unlimited
|
||||||
|
To attempt to raise all hard limits to infinity (superuser-only), use
|
||||||
|
ulimit -H -a unlimited
|
||||||
|
To attempt to raise all soft and hard limits to infinity, use
|
||||||
|
ulimit -a unlimited
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int
|
||||||
|
set_all_limits (mode, newlim)
|
||||||
|
int mode;
|
||||||
|
RLIMTYPE newlim;
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
int retval = 0;
|
||||||
|
|
||||||
|
if (newlim != RLIM_INFINITY)
|
||||||
|
{
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode == 0)
|
||||||
|
mode = LIMIT_SOFT|LIMIT_HARD;
|
||||||
|
|
||||||
|
for (retval = i = 0; limits[i].option > 0; i++)
|
||||||
|
if (set_limit (i, newlim, mode) < 0)
|
||||||
|
{
|
||||||
|
builtin_error ("cannot modify %s limit: %s", limits[i].description,
|
||||||
|
strerror (errno));
|
||||||
|
retval = 1;
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* !_MINIX */
|
#endif /* !_MINIX */
|
||||||
|
|
|
||||||
|
|
@ -46,20 +46,25 @@ $END
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <chartypes.h>
|
||||||
|
|
||||||
#include "../shell.h"
|
#include "../shell.h"
|
||||||
#include "posixstat.h"
|
#include "posixstat.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "bashgetopt.h"
|
#include "bashgetopt.h"
|
||||||
|
|
||||||
|
#ifdef __LCC__
|
||||||
|
#define mode_t int
|
||||||
|
#endif
|
||||||
|
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
/* */
|
/* */
|
||||||
/* UMASK Builtin and Helpers */
|
/* UMASK Builtin and Helpers */
|
||||||
/* */
|
/* */
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
|
|
||||||
static void print_symbolic_umask ();
|
static void print_symbolic_umask __P((mode_t));
|
||||||
static int symbolic_umask ();
|
static int symbolic_umask __P((WORD_LIST *));
|
||||||
|
|
||||||
/* Set or display the mask used by the system when creating files. Flag
|
/* Set or display the mask used by the system when creating files. Flag
|
||||||
of -S means display the umask in a symbolic mode. */
|
of -S means display the umask in a symbolic mode. */
|
||||||
|
|
@ -92,7 +97,7 @@ umask_builtin (list)
|
||||||
|
|
||||||
if (list)
|
if (list)
|
||||||
{
|
{
|
||||||
if (digit (*list->word->word))
|
if (DIGIT (*list->word->word))
|
||||||
{
|
{
|
||||||
umask_value = read_octal (list->word->word);
|
umask_value = read_octal (list->word->word);
|
||||||
|
|
||||||
|
|
@ -128,7 +133,7 @@ umask_builtin (list)
|
||||||
if (print_symbolically)
|
if (print_symbolically)
|
||||||
print_symbolic_umask (umask_arg);
|
print_symbolic_umask (umask_arg);
|
||||||
else
|
else
|
||||||
printf ("%03o\n", umask_arg);
|
printf ("%04lo\n", (unsigned long)umask_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
fflush (stdout);
|
fflush (stdout);
|
||||||
|
|
@ -179,12 +184,12 @@ parse_symbolic_mode (mode, initial_bits)
|
||||||
char *mode;
|
char *mode;
|
||||||
int initial_bits;
|
int initial_bits;
|
||||||
{
|
{
|
||||||
int who, op, perm, mask, bits, c;
|
int who, op, perm, bits, c;
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
for (s = mode, bits = initial_bits;;)
|
for (s = mode, bits = initial_bits;;)
|
||||||
{
|
{
|
||||||
who = op = perm = mask = 0;
|
who = op = perm = 0;
|
||||||
|
|
||||||
/* Parse the `who' portion of the symbolic mode clause. */
|
/* Parse the `who' portion of the symbolic mode clause. */
|
||||||
while (member (*s, "agou"))
|
while (member (*s, "agou"))
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,8 @@ $END
|
||||||
# include <unistd.h>
|
# include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <chartypes.h>
|
||||||
|
|
||||||
#include "../bashansi.h"
|
#include "../bashansi.h"
|
||||||
|
|
||||||
#include "../shell.h"
|
#include "../shell.h"
|
||||||
|
|
@ -81,6 +83,8 @@ wait_builtin (list)
|
||||||
int status, code;
|
int status, code;
|
||||||
volatile int old_interrupt_immediately;
|
volatile int old_interrupt_immediately;
|
||||||
|
|
||||||
|
USE_VAR(list);
|
||||||
|
|
||||||
if (no_options (list))
|
if (no_options (list))
|
||||||
return (EX_USAGE);
|
return (EX_USAGE);
|
||||||
if (list != loptend)
|
if (list != loptend)
|
||||||
|
|
@ -120,13 +124,14 @@ wait_builtin (list)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
char *w;
|
char *w;
|
||||||
|
long pid_value;
|
||||||
|
|
||||||
w = list->word->word;
|
w = list->word->word;
|
||||||
if (digit (*w))
|
if (DIGIT (*w))
|
||||||
{
|
{
|
||||||
if (all_digits (w + 1))
|
if (legal_number (w, &pid_value) && pid_value == (pid_t)pid_value)
|
||||||
{
|
{
|
||||||
pid = (pid_t)atoi (w);
|
pid = (pid_t)pid_value;
|
||||||
status = wait_for_single_pid (pid);
|
status = wait_for_single_pid (pid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
11
command.h
11
command.h
|
|
@ -95,14 +95,18 @@ typedef struct word_list {
|
||||||
/* */
|
/* */
|
||||||
/* **************************************************************** */
|
/* **************************************************************** */
|
||||||
|
|
||||||
/* What a redirection descriptor looks like. If FLAGS is IS_DESCRIPTOR,
|
/* What a redirection descriptor looks like. If the redirection instruction
|
||||||
then we use REDIRECTEE.DEST, else we use the file specified. */
|
is ri_duplicating_input or ri_duplicating_output, use DEST, otherwise
|
||||||
|
use the file in FILENAME. Out-of-range descriptors are identified by a
|
||||||
|
negative DEST. */
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
long dest; /* Place to redirect REDIRECTOR to, or ... */
|
int dest; /* Place to redirect REDIRECTOR to, or ... */
|
||||||
WORD_DESC *filename; /* filename to redirect to. */
|
WORD_DESC *filename; /* filename to redirect to. */
|
||||||
} REDIRECTEE;
|
} REDIRECTEE;
|
||||||
|
|
||||||
|
/* Structure describing a redirection. If REDIRECTOR is negative, the parser
|
||||||
|
(or translator in redir.c) encountered an out-of-range file descriptor. */
|
||||||
typedef struct redirect {
|
typedef struct redirect {
|
||||||
struct redirect *next; /* Next element, or NULL. */
|
struct redirect *next; /* Next element, or NULL. */
|
||||||
int redirector; /* Descriptor to be redirected. */
|
int redirector; /* Descriptor to be redirected. */
|
||||||
|
|
@ -131,6 +135,7 @@ typedef struct element {
|
||||||
#define CMD_TIME_POSIX 0x100 /* time -p; use POSIX.2 time output spec. */
|
#define CMD_TIME_POSIX 0x100 /* time -p; use POSIX.2 time output spec. */
|
||||||
#define CMD_AMPERSAND 0x200 /* command & */
|
#define CMD_AMPERSAND 0x200 /* command & */
|
||||||
#define CMD_STDIN_REDIR 0x400 /* async command needs implicit </dev/null */
|
#define CMD_STDIN_REDIR 0x400 /* async command needs implicit </dev/null */
|
||||||
|
#define CMD_COMMAND_BUILTIN 0x0800 /* command executed by `command' builtin */
|
||||||
|
|
||||||
/* What a command looks like. */
|
/* What a command looks like. */
|
||||||
typedef struct command {
|
typedef struct command {
|
||||||
|
|
|
||||||
|
|
@ -57,3 +57,7 @@
|
||||||
/* Define this to make non-interactive shells begun with argv[0][0] == '-'
|
/* Define this to make non-interactive shells begun with argv[0][0] == '-'
|
||||||
run the startup files when not in posix mode. */
|
run the startup files when not in posix mode. */
|
||||||
/* #define NON_INTERACTIVE_LOGIN_SHELLS */
|
/* #define NON_INTERACTIVE_LOGIN_SHELLS */
|
||||||
|
|
||||||
|
/* Define this if you want bash to try to check whether it's being run by
|
||||||
|
sshd and source the .bashrc if so (like the rshd behavior). */
|
||||||
|
/* #define SSH_SOURCE_BASHRC */
|
||||||
|
|
|
||||||
188
config.h.in
188
config.h.in
|
|
@ -1,6 +1,6 @@
|
||||||
/* config.h -- Configuration file for bash. */
|
/* config.h -- Configuration file for bash. */
|
||||||
|
|
||||||
/* Copyright (C) 1987,1991 Free Software Foundation, Inc.
|
/* Copyright (C) 1987-2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GNU Bash, the Bourne Again SHell.
|
This file is part of GNU Bash, the Bourne Again SHell.
|
||||||
|
|
||||||
|
|
@ -21,7 +21,7 @@
|
||||||
#ifndef _CONFIG_H_
|
#ifndef _CONFIG_H_
|
||||||
#define _CONFIG_H_
|
#define _CONFIG_H_
|
||||||
|
|
||||||
/* Configuration settings controllable by autoconf. */
|
/* Configuration feature settings controllable by autoconf. */
|
||||||
|
|
||||||
/* Define JOB_CONTROL if your operating system supports
|
/* Define JOB_CONTROL if your operating system supports
|
||||||
BSD-like job control. */
|
BSD-like job control. */
|
||||||
|
|
@ -142,8 +142,61 @@
|
||||||
|
|
||||||
/* Beginning of autoconf additions. */
|
/* Beginning of autoconf additions. */
|
||||||
|
|
||||||
|
/* Characteristics of the C compiler */
|
||||||
|
#undef const
|
||||||
|
|
||||||
|
#undef inline
|
||||||
|
|
||||||
|
/* Define if cpp supports the ANSI-C stringizing `#' operator */
|
||||||
|
#undef HAVE_STRINGIZE
|
||||||
|
|
||||||
|
/* Define if the compiler supports `long double' variables. */
|
||||||
|
#undef HAVE_LONG_DOUBLE
|
||||||
|
|
||||||
|
#undef PROTOTYPES
|
||||||
|
|
||||||
|
#undef __CHAR_UNSIGNED__
|
||||||
|
|
||||||
|
/* Define if the compiler supports `long long' variables. */
|
||||||
|
#undef HAVE_LONG_LONG
|
||||||
|
|
||||||
|
#undef HAVE_UNSIGNED_LONG_LONG
|
||||||
|
|
||||||
|
/* The number of bytes in a int. */
|
||||||
|
#undef SIZEOF_INT
|
||||||
|
|
||||||
|
/* The number of bytes in a long. */
|
||||||
|
#undef SIZEOF_LONG
|
||||||
|
|
||||||
|
/* The number of bytes in a pointer to char. */
|
||||||
|
#undef SIZEOF_CHAR_P
|
||||||
|
|
||||||
|
/* The number of bytes in a double (hopefully 8). */
|
||||||
|
#undef SIZEOF_DOUBLE
|
||||||
|
|
||||||
|
/* The number of bytes in a `long long', if we have one. */
|
||||||
|
#undef SIZEOF_LONG_LONG
|
||||||
|
|
||||||
|
/* System paths */
|
||||||
|
|
||||||
#define DEFAULT_MAIL_DIRECTORY "/usr/spool/mail"
|
#define DEFAULT_MAIL_DIRECTORY "/usr/spool/mail"
|
||||||
|
|
||||||
|
/* Characteristics of the system's header files and libraries that affect
|
||||||
|
the compilation environment. */
|
||||||
|
|
||||||
|
/* Define if the system does not provide POSIX.1 features except
|
||||||
|
with this defined. */
|
||||||
|
#undef _POSIX_1_SOURCE
|
||||||
|
|
||||||
|
/* Define if you need to in order for stat and other things to work. */
|
||||||
|
#undef _POSIX_SOURCE
|
||||||
|
|
||||||
|
/* Define to use GNU libc extensions */
|
||||||
|
#undef _GNU_SOURCE
|
||||||
|
|
||||||
|
/* Define if you have the ANSI C header files. */
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
/* Memory management functions. */
|
/* Memory management functions. */
|
||||||
|
|
||||||
/* Define if using the bash version of malloc in lib/malloc/malloc.c */
|
/* Define if using the bash version of malloc in lib/malloc/malloc.c */
|
||||||
|
|
@ -165,18 +218,6 @@
|
||||||
|
|
||||||
/* SYSTEM TYPES */
|
/* SYSTEM TYPES */
|
||||||
|
|
||||||
/* The number of bytes in a int. */
|
|
||||||
#undef SIZEOF_INT
|
|
||||||
|
|
||||||
/* The number of bytes in a long. */
|
|
||||||
#undef SIZEOF_LONG
|
|
||||||
|
|
||||||
/* The number of bytes in a pointer to char. */
|
|
||||||
#undef SIZEOF_CHAR_P
|
|
||||||
|
|
||||||
/* The number of bytes in a double (hopefully 8). */
|
|
||||||
#undef SIZEOF_DOUBLE
|
|
||||||
|
|
||||||
/* Define to `long' if <sys/types.h> doesn't define. */
|
/* Define to `long' if <sys/types.h> doesn't define. */
|
||||||
#undef off_t
|
#undef off_t
|
||||||
|
|
||||||
|
|
@ -204,18 +245,27 @@
|
||||||
/* Define to `double' if <sys/types.h> doesn't define. */
|
/* Define to `double' if <sys/types.h> doesn't define. */
|
||||||
#undef bits64_t
|
#undef bits64_t
|
||||||
|
|
||||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
|
||||||
#undef ptrdiff_t
|
|
||||||
|
|
||||||
/* Define to `unsigned int' if <sys/types.h> doesn't define. */
|
/* Define to `unsigned int' if <sys/types.h> doesn't define. */
|
||||||
#undef u_int
|
#undef u_int
|
||||||
|
|
||||||
/* Define to `unsigned long' if <sys/types.h> doesn't define. */
|
/* Define to `unsigned long' if <sys/types.h> doesn't define. */
|
||||||
#undef u_long
|
#undef u_long
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
#undef ptrdiff_t
|
||||||
|
|
||||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||||
#undef size_t
|
#undef size_t
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
#undef ssize_t
|
||||||
|
|
||||||
|
/* Define to `long' if <stdint.h> doesn't define. */
|
||||||
|
#undef intmax_t
|
||||||
|
|
||||||
|
/* Define to `unsigned long' if <stdint.h> doesn't define. */
|
||||||
|
#undef uintmax_t
|
||||||
|
|
||||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
#undef uid_t
|
#undef uid_t
|
||||||
|
|
||||||
|
|
@ -228,6 +278,9 @@
|
||||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
#undef gid_t
|
#undef gid_t
|
||||||
|
|
||||||
|
/* Define to `unsigned int' if <sys/socket.h> doesn't define. */
|
||||||
|
#undef socklen_t
|
||||||
|
|
||||||
/* Define if you have quad_t in <sys/types.h>. */
|
/* Define if you have quad_t in <sys/types.h>. */
|
||||||
#undef HAVE_QUAD_T
|
#undef HAVE_QUAD_T
|
||||||
|
|
||||||
|
|
@ -237,13 +290,6 @@
|
||||||
Usually this is either `int' or `gid_t'. */
|
Usually this is either `int' or `gid_t'. */
|
||||||
#undef GETGROUPS_T
|
#undef GETGROUPS_T
|
||||||
|
|
||||||
/* Define if the system does not provide POSIX.1 features except
|
|
||||||
with this defined. */
|
|
||||||
#undef _POSIX_1_SOURCE
|
|
||||||
|
|
||||||
/* Define if you need to in order for stat and other things to work. */
|
|
||||||
#undef _POSIX_SOURCE
|
|
||||||
|
|
||||||
/* Characteristics of the machine archictecture. */
|
/* Characteristics of the machine archictecture. */
|
||||||
|
|
||||||
/* If using the C implementation of alloca, define if you know the
|
/* If using the C implementation of alloca, define if you know the
|
||||||
|
|
@ -258,9 +304,6 @@
|
||||||
/* Define if the machine architecture is big-endian. */
|
/* Define if the machine architecture is big-endian. */
|
||||||
#undef WORDS_BIGENDIAN
|
#undef WORDS_BIGENDIAN
|
||||||
|
|
||||||
/* Define if you have the ANSI C header files. */
|
|
||||||
#undef STDC_HEADERS
|
|
||||||
|
|
||||||
/* Check for the presence of certain non-function symbols in the system
|
/* Check for the presence of certain non-function symbols in the system
|
||||||
libraries. */
|
libraries. */
|
||||||
|
|
||||||
|
|
@ -301,6 +344,7 @@
|
||||||
|
|
||||||
#undef TERMIO_LDISC
|
#undef TERMIO_LDISC
|
||||||
|
|
||||||
|
#undef HAVE_STRUCT_STAT_ST_BLOCKS
|
||||||
|
|
||||||
/* Characteristics of definitions in the system header files. */
|
/* Characteristics of definitions in the system header files. */
|
||||||
|
|
||||||
|
|
@ -308,9 +352,26 @@
|
||||||
|
|
||||||
#undef HAVE_RESOURCE
|
#undef HAVE_RESOURCE
|
||||||
|
|
||||||
#undef SBRK_DECLARED
|
#undef HAVE_LIBC_FNM_EXTMATCH
|
||||||
|
|
||||||
#undef PRINTF_DECLARED
|
#undef HAVE_DECL_CONFSTR
|
||||||
|
|
||||||
|
#undef HAVE_DECL_STRTOLD
|
||||||
|
|
||||||
|
#undef HAVE_DECL_SBRK
|
||||||
|
|
||||||
|
#undef HAVE_DECL_PRINTF
|
||||||
|
|
||||||
|
#undef HAVE_DECL_STRSIGNAL
|
||||||
|
|
||||||
|
/* These are checked with BASH_CHECK_DECL */
|
||||||
|
|
||||||
|
#undef HAVE_DECL_STRTOIMAX
|
||||||
|
#undef HAVE_DECL_STRTOL
|
||||||
|
#undef HAVE_DECL_STRTOLL
|
||||||
|
#undef HAVE_DECL_STRTOUL
|
||||||
|
#undef HAVE_DECL_STRTOULL
|
||||||
|
#undef HAVE_DECL_STRTOUMAX
|
||||||
|
|
||||||
/* Characteristics of system calls and C library functions. */
|
/* Characteristics of system calls and C library functions. */
|
||||||
|
|
||||||
|
|
@ -334,6 +395,7 @@
|
||||||
|
|
||||||
#undef CAN_REDEFINE_GETENV
|
#undef CAN_REDEFINE_GETENV
|
||||||
|
|
||||||
|
#undef HAVE_PRINTF_A_FORMAT
|
||||||
|
|
||||||
/* Characteristics of properties exported by the kernel. */
|
/* Characteristics of properties exported by the kernel. */
|
||||||
|
|
||||||
|
|
@ -360,10 +422,6 @@
|
||||||
|
|
||||||
#undef MUST_REINSTALL_SIGHANDLERS
|
#undef MUST_REINSTALL_SIGHANDLERS
|
||||||
|
|
||||||
/* Define if system calls automatically restart after interruption
|
|
||||||
by a signal. */
|
|
||||||
#undef HAVE_RESTARTABLE_SYSCALLS
|
|
||||||
|
|
||||||
#undef HAVE_BSD_SIGNALS
|
#undef HAVE_BSD_SIGNALS
|
||||||
|
|
||||||
#undef HAVE_POSIX_SIGNALS
|
#undef HAVE_POSIX_SIGNALS
|
||||||
|
|
@ -375,6 +433,9 @@
|
||||||
|
|
||||||
/* Presence of system and C library functions. */
|
/* Presence of system and C library functions. */
|
||||||
|
|
||||||
|
/* Define if you have the asprintf function. */
|
||||||
|
#undef HAVE_ASPRINTF
|
||||||
|
|
||||||
/* Define if you have the bcopy function. */
|
/* Define if you have the bcopy function. */
|
||||||
#undef HAVE_BCOPY
|
#undef HAVE_BCOPY
|
||||||
|
|
||||||
|
|
@ -402,6 +463,9 @@
|
||||||
/* Define if you have the dup2 function. */
|
/* Define if you have the dup2 function. */
|
||||||
#undef HAVE_DUP2
|
#undef HAVE_DUP2
|
||||||
|
|
||||||
|
/* Define if you have the getaddrinfo function. */
|
||||||
|
#undef HAVE_GETADDRINFO
|
||||||
|
|
||||||
/* Define if you have the getcwd function. */
|
/* Define if you have the getcwd function. */
|
||||||
#undef HAVE_GETCWD
|
#undef HAVE_GETCWD
|
||||||
|
|
||||||
|
|
@ -444,6 +508,24 @@
|
||||||
/* Define if you have the inet_aton function. */
|
/* Define if you have the inet_aton function. */
|
||||||
#undef HAVE_INET_ATON
|
#undef HAVE_INET_ATON
|
||||||
|
|
||||||
|
/* Define if you have the isascii function. */
|
||||||
|
#undef HAVE_ISASCII
|
||||||
|
|
||||||
|
/* Define if you have the isblank function. */
|
||||||
|
#undef HAVE_ISBLANK
|
||||||
|
|
||||||
|
/* Define if you have the isgraph function. */
|
||||||
|
#undef HAVE_ISGRAPH
|
||||||
|
|
||||||
|
/* Define if you have the isprint function. */
|
||||||
|
#undef HAVE_ISPRINT
|
||||||
|
|
||||||
|
/* Define if you have the isspace function. */
|
||||||
|
#undef HAVE_ISSPACE
|
||||||
|
|
||||||
|
/* Define if you have the isxdigit function. */
|
||||||
|
#undef HAVE_ISXDIGIT
|
||||||
|
|
||||||
/* Define if you have the killpg function. */
|
/* Define if you have the killpg function. */
|
||||||
#undef HAVE_KILLPG
|
#undef HAVE_KILLPG
|
||||||
|
|
||||||
|
|
@ -498,6 +580,9 @@
|
||||||
/* Define if you have the POSIX.1-style sigsetjmp function. */
|
/* Define if you have the POSIX.1-style sigsetjmp function. */
|
||||||
#undef HAVE_POSIX_SIGSETJMP
|
#undef HAVE_POSIX_SIGSETJMP
|
||||||
|
|
||||||
|
/* Define if you have the snprintf function. */
|
||||||
|
#undef HAVE_SNPRINTF
|
||||||
|
|
||||||
/* Define if you have the strcasecmp function. */
|
/* Define if you have the strcasecmp function. */
|
||||||
#undef HAVE_STRCASECMP
|
#undef HAVE_STRCASECMP
|
||||||
|
|
||||||
|
|
@ -516,12 +601,24 @@
|
||||||
/* Define if you have the strtod function. */
|
/* Define if you have the strtod function. */
|
||||||
#undef HAVE_STRTOD
|
#undef HAVE_STRTOD
|
||||||
|
|
||||||
|
/* Define if you have the strtoimax function. */
|
||||||
|
#undef HAVE_STRTOIMAX
|
||||||
|
|
||||||
/* Define if you have the strtol function. */
|
/* Define if you have the strtol function. */
|
||||||
#undef HAVE_STRTOL
|
#undef HAVE_STRTOL
|
||||||
|
|
||||||
|
/* Define if you have the strtoll function. */
|
||||||
|
#undef HAVE_STRTOLL
|
||||||
|
|
||||||
/* Define if you have the strtoul function. */
|
/* Define if you have the strtoul function. */
|
||||||
#undef HAVE_STRTOUL
|
#undef HAVE_STRTOUL
|
||||||
|
|
||||||
|
/* Define if you have the strtoull function. */
|
||||||
|
#undef HAVE_STRTOULL
|
||||||
|
|
||||||
|
/* Define if you have the strtoumax function. */
|
||||||
|
#undef HAVE_STRTOUMAX
|
||||||
|
|
||||||
/* Define if you have the strsignal function or macro. */
|
/* Define if you have the strsignal function or macro. */
|
||||||
#undef HAVE_STRSIGNAL
|
#undef HAVE_STRSIGNAL
|
||||||
|
|
||||||
|
|
@ -552,16 +649,21 @@
|
||||||
/* Define if you have the uname function. */
|
/* Define if you have the uname function. */
|
||||||
#undef HAVE_UNAME
|
#undef HAVE_UNAME
|
||||||
|
|
||||||
|
/* Define if you have the vasprintf function. */
|
||||||
|
#undef HAVE_VASPRINTF
|
||||||
|
|
||||||
/* Define if you have the vprintf function. */
|
/* Define if you have the vprintf function. */
|
||||||
#undef HAVE_VPRINTF
|
#undef HAVE_VPRINTF
|
||||||
|
|
||||||
|
/* Define if you have the vsnprintf function. */
|
||||||
|
#undef HAVE_VSNPRINTF
|
||||||
|
|
||||||
/* Define if you have the waitpid function. */
|
/* Define if you have the waitpid function. */
|
||||||
#undef HAVE_WAITPID
|
#undef HAVE_WAITPID
|
||||||
|
|
||||||
/* Define if you have the wait3 function. */
|
/* Define if you have the wait3 function. */
|
||||||
#undef HAVE_WAIT3
|
#undef HAVE_WAIT3
|
||||||
|
|
||||||
|
|
||||||
/* Presence of certain system include files. */
|
/* Presence of certain system include files. */
|
||||||
|
|
||||||
/* Define if you have the <arpa/inet.h> header file. */
|
/* Define if you have the <arpa/inet.h> header file. */
|
||||||
|
|
@ -573,6 +675,12 @@
|
||||||
/* Define if you have the <dlfcn.h> header file. */
|
/* Define if you have the <dlfcn.h> header file. */
|
||||||
#undef HAVE_DLFCN_H
|
#undef HAVE_DLFCN_H
|
||||||
|
|
||||||
|
/* Define if you have the <grp.h> header file. */
|
||||||
|
#undef HAVE_GRP_H
|
||||||
|
|
||||||
|
/* Define if you have the <inttypes.h> header file. */
|
||||||
|
#undef HAVE_INTTYPES_H
|
||||||
|
|
||||||
/* Define if you have the <libintl.h> header file. */
|
/* Define if you have the <libintl.h> header file. */
|
||||||
#undef HAVE_LIBINTL_H
|
#undef HAVE_LIBINTL_H
|
||||||
|
|
||||||
|
|
@ -600,12 +708,18 @@
|
||||||
/* Define if you have the <string.h> header file. */
|
/* Define if you have the <string.h> header file. */
|
||||||
#undef HAVE_STRING_H
|
#undef HAVE_STRING_H
|
||||||
|
|
||||||
|
/* Define if you have the <strings.h> header file. */
|
||||||
|
#undef HAVE_STRINGS_H
|
||||||
|
|
||||||
/* Define if you have the <memory.h> header file. */
|
/* Define if you have the <memory.h> header file. */
|
||||||
#undef HAVE_MEMORY_H
|
#undef HAVE_MEMORY_H
|
||||||
|
|
||||||
/* Define if you have the <stddef.h> header file. */
|
/* Define if you have the <stddef.h> header file. */
|
||||||
#undef HAVE_STDDEF_H
|
#undef HAVE_STDDEF_H
|
||||||
|
|
||||||
|
/* Define if you have the <stdint.h> header file. */
|
||||||
|
#undef HAVE_STDINT_H
|
||||||
|
|
||||||
/* Define if you have the <sys/dir.h> header file. */
|
/* Define if you have the <sys/dir.h> header file. */
|
||||||
#undef HAVE_SYS_DIR_H
|
#undef HAVE_SYS_DIR_H
|
||||||
|
|
||||||
|
|
@ -690,6 +804,12 @@
|
||||||
<sys/resource.h>? */
|
<sys/resource.h>? */
|
||||||
#undef RLIMIT_NEEDS_KERNEL
|
#undef RLIMIT_NEEDS_KERNEL
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
#undef _FILE_OFFSET_BITS
|
||||||
|
|
||||||
|
/* Define for large files on AIX-style hosts. */
|
||||||
|
#undef _LARGE_FILES
|
||||||
|
|
||||||
/* Do strcoll(3) and strcmp(3) give different results in the default locale? */
|
/* Do strcoll(3) and strcmp(3) give different results in the default locale? */
|
||||||
#undef STRCOLL_BROKEN
|
#undef STRCOLL_BROKEN
|
||||||
|
|
||||||
|
|
|
||||||
277
configure.in
277
configure.in
|
|
@ -5,17 +5,37 @@ dnl report bugs to chet@po.cwru.edu
|
||||||
dnl
|
dnl
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
dnl checks for version info
|
# Copyright (C) 1987-2001 Free Software Foundation, Inc.
|
||||||
AC_REVISION([for Bash 2.05, version 2.90, from autoconf version] AC_ACVERSION)dnl
|
|
||||||
|
|
||||||
AC_INIT(shell.h)
|
# This program is free software; you can redistribute it and/or modify
|
||||||
AC_CONFIG_HEADER(config.h)
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||||
|
# 02111-1307, USA.
|
||||||
|
|
||||||
|
AC_REVISION([for Bash 2.05a, version 2.128, from autoconf version] AC_ACVERSION)dnl
|
||||||
|
|
||||||
|
AC_INIT(bash, 2.05a, bug-bash@gnu.org)
|
||||||
|
|
||||||
dnl make sure we are using a recent autoconf version
|
dnl make sure we are using a recent autoconf version
|
||||||
AC_PREREQ(2.12)
|
AC_PREREQ(2.50)
|
||||||
|
|
||||||
|
AC_CONFIG_SRCDIR(shell.h)
|
||||||
dnl where to find install.sh, config.sub, and config.guess
|
dnl where to find install.sh, config.sub, and config.guess
|
||||||
AC_CONFIG_AUX_DIR(./support)
|
AC_CONFIG_AUX_DIR(./support)
|
||||||
|
AC_CONFIG_HEADERS(config.h)
|
||||||
|
|
||||||
|
dnl checks for version info
|
||||||
|
BASHVERS=2.05a
|
||||||
|
|
||||||
dnl canonicalize the host and os so we can do some tricky things before
|
dnl canonicalize the host and os so we can do some tricky things before
|
||||||
dnl parsing options
|
dnl parsing options
|
||||||
|
|
@ -23,7 +43,6 @@ AC_CANONICAL_HOST
|
||||||
|
|
||||||
dnl configure defaults
|
dnl configure defaults
|
||||||
opt_bash_malloc=yes
|
opt_bash_malloc=yes
|
||||||
opt_glibc_malloc=no
|
|
||||||
opt_purify=no
|
opt_purify=no
|
||||||
opt_purecov=no
|
opt_purecov=no
|
||||||
opt_afs=no
|
opt_afs=no
|
||||||
|
|
@ -45,6 +64,7 @@ mips-irix6*) opt_bash_malloc=no ;; # needs 8-byte alignment
|
||||||
m68k-sysv) opt_bash_malloc=no ;; # fixes file descriptor leak in closedir
|
m68k-sysv) opt_bash_malloc=no ;; # fixes file descriptor leak in closedir
|
||||||
sparc-linux*) opt_bash_malloc=no ;; # sparc running linux; requires ELF
|
sparc-linux*) opt_bash_malloc=no ;; # sparc running linux; requires ELF
|
||||||
#*-freebsd*) opt_bash_malloc=no ;; # they claim it's better
|
#*-freebsd*) opt_bash_malloc=no ;; # they claim it's better
|
||||||
|
*-openbsd*) opt_bash_malloc=no ;; # they claim it needs eight-bit alignment
|
||||||
*-aix*) opt_bash_malloc=no ;; # AIX machines
|
*-aix*) opt_bash_malloc=no ;; # AIX machines
|
||||||
*-nextstep*) opt_bash_malloc=no ;; # NeXT machines running NeXTstep
|
*-nextstep*) opt_bash_malloc=no ;; # NeXT machines running NeXTstep
|
||||||
*-macos*) opt_bash_malloc=no ;; # Apple MacOS X
|
*-macos*) opt_bash_malloc=no ;; # Apple MacOS X
|
||||||
|
|
@ -64,23 +84,26 @@ dnl packages
|
||||||
AC_ARG_WITH(afs, --with-afs if you are running AFS, opt_afs=$withval)
|
AC_ARG_WITH(afs, --with-afs if you are running AFS, opt_afs=$withval)
|
||||||
AC_ARG_WITH(bash-malloc, --with-bash-malloc use the Bash version of malloc,opt_bash_malloc=$withval)
|
AC_ARG_WITH(bash-malloc, --with-bash-malloc use the Bash version of malloc,opt_bash_malloc=$withval)
|
||||||
AC_ARG_WITH(curses, --with-curses use the curses library instead of the termcap library,opt_curses=$withval)
|
AC_ARG_WITH(curses, --with-curses use the curses library instead of the termcap library,opt_curses=$withval)
|
||||||
AC_ARG_WITH(glibc-malloc, --with-glibc-malloc use the GNU C library version of malloc,opt_glibc_malloc=$withval)
|
|
||||||
AC_ARG_WITH(gnu-malloc, --with-gnu-malloc synonym for --with-bash-malloc,opt_bash_malloc=$withval)
|
AC_ARG_WITH(gnu-malloc, --with-gnu-malloc synonym for --with-bash-malloc,opt_bash_malloc=$withval)
|
||||||
AC_ARG_WITH(installed-readline, --with-installed-readline use a version of the readline library that is already installed, opt_with_installed_readline=$withval)
|
AC_ARG_WITH(installed-readline, --with-installed-readline use a version of the readline library that is already installed, opt_with_installed_readline=$withval)
|
||||||
AC_ARG_WITH(purecov, --with-purecov configure to postprocess with pure coverage, opt_purecov=$withval)
|
AC_ARG_WITH(purecov, --with-purecov configure to postprocess with pure coverage, opt_purecov=$withval)
|
||||||
AC_ARG_WITH(purify, --with-purify configure to postprocess with purify, opt_purify=$withval)
|
AC_ARG_WITH(purify, --with-purify configure to postprocess with purify, opt_purify=$withval)
|
||||||
|
|
||||||
dnl test for glibc malloc first because it can override the default
|
if test "$opt_bash_malloc" = yes; then
|
||||||
if test "$opt_glibc_malloc" = yes; then
|
|
||||||
MALLOC_TARGET=gmalloc
|
|
||||||
MALLOC_SRC=gmalloc.c
|
|
||||||
elif test "$opt_bash_malloc" = yes; then
|
|
||||||
MALLOC_TARGET=malloc
|
MALLOC_TARGET=malloc
|
||||||
MALLOC_SRC=malloc.c
|
MALLOC_SRC=malloc.c
|
||||||
|
|
||||||
|
MALLOC_LIB='-lmalloc'
|
||||||
|
MALLOC_LIBRARY='$(ALLOC_LIBDIR)/libmalloc.a'
|
||||||
|
MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)'
|
||||||
|
MALLOC_DEP='$(MALLOC_LIBRARY)'
|
||||||
|
|
||||||
AC_DEFINE(USING_BASH_MALLOC)
|
AC_DEFINE(USING_BASH_MALLOC)
|
||||||
else
|
else
|
||||||
MALLOC_TARGET=stubmalloc
|
MALLOC_LIB=
|
||||||
MALLOC_SRC=stub.c
|
MALLOC_LIBRARY=
|
||||||
|
MALLOC_LDFLAGS=
|
||||||
|
MALLOC_DEP=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$opt_purify" = yes; then
|
if test "$opt_purify" = yes; then
|
||||||
|
|
@ -126,6 +149,7 @@ opt_cond_command=yes
|
||||||
opt_arith_for_command=yes
|
opt_arith_for_command=yes
|
||||||
opt_net_redirs=yes
|
opt_net_redirs=yes
|
||||||
opt_progcomp=yes
|
opt_progcomp=yes
|
||||||
|
opt_largefile=yes
|
||||||
|
|
||||||
dnl options that affect how bash is compiled and linked
|
dnl options that affect how bash is compiled and linked
|
||||||
opt_static_link=no
|
opt_static_link=no
|
||||||
|
|
@ -160,6 +184,7 @@ AC_ARG_ENABLE(extended-glob, --enable-extended-glob include ksh-style extended p
|
||||||
AC_ARG_ENABLE(help-builtin, --enable-help-builtin include the help builtin, opt_help=$enableval)
|
AC_ARG_ENABLE(help-builtin, --enable-help-builtin include the help builtin, opt_help=$enableval)
|
||||||
AC_ARG_ENABLE(history, --enable-history turn on command history, opt_history=$enableval)
|
AC_ARG_ENABLE(history, --enable-history turn on command history, opt_history=$enableval)
|
||||||
AC_ARG_ENABLE(job-control, --enable-job-control enable job control features, opt_job_control=$enableval)
|
AC_ARG_ENABLE(job-control, --enable-job-control enable job control features, opt_job_control=$enableval)
|
||||||
|
AC_ARG_ENABLE(largefile, --enable-largefile enable support for large files, opt_largefile=$enableval)
|
||||||
AC_ARG_ENABLE(net-redirections, --enable-net-redirections enable /dev/tcp/host/port redirection, opt_net_redirs=$enableval)
|
AC_ARG_ENABLE(net-redirections, --enable-net-redirections enable /dev/tcp/host/port redirection, opt_net_redirs=$enableval)
|
||||||
AC_ARG_ENABLE(process-substitution, --enable-process-substitution enable process substitution, opt_process_subst=$enableval)
|
AC_ARG_ENABLE(process-substitution, --enable-process-substitution enable process substitution, opt_process_subst=$enableval)
|
||||||
AC_ARG_ENABLE(progcomp, --enable-progcomp enable programmable completion and the complete builtin, opt_progcomp=$enableval)
|
AC_ARG_ENABLE(progcomp, --enable-progcomp enable programmable completion and the complete builtin, opt_progcomp=$enableval)
|
||||||
|
|
@ -247,22 +272,21 @@ AC_SUBST(PURIFY)
|
||||||
AC_SUBST(MALLOC_TARGET)
|
AC_SUBST(MALLOC_TARGET)
|
||||||
AC_SUBST(MALLOC_SRC)
|
AC_SUBST(MALLOC_SRC)
|
||||||
|
|
||||||
|
AC_SUBST(MALLOC_LIB)
|
||||||
|
AC_SUBST(MALLOC_LIBRARY)
|
||||||
|
AC_SUBST(MALLOC_LDFLAGS)
|
||||||
|
AC_SUBST(MALLOC_DEP)
|
||||||
|
|
||||||
AC_SUBST(htmldir)
|
AC_SUBST(htmldir)
|
||||||
|
|
||||||
dnl Use GNU m4 macros to get the distribution and patchlevel information
|
echo ""
|
||||||
dnl into configure without requiring the files to be distributed
|
|
||||||
[BASHVERS=]dnl
|
|
||||||
esyscmd(cat _distribution)dnl
|
|
||||||
[BASHPATCH=]dnl
|
|
||||||
esyscmd(cat _patchlevel)dnl
|
|
||||||
|
|
||||||
echo "Beginning configuration for bash-$BASHVERS for ${host_cpu}-${host_vendor}-${host_os}"
|
echo "Beginning configuration for bash-$BASHVERS for ${host_cpu}-${host_vendor}-${host_os}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
dnl compilation checks
|
dnl compilation checks
|
||||||
dnl AC_PROG_CC sets $cross_compiling to `yes' if cross-compiling for a
|
dnl AC_PROG_CC sets $cross_compiling to `yes' if cross-compiling for a
|
||||||
dnl different environment
|
dnl different environment
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
BASH_LARGE_FILE_SUPPORT
|
|
||||||
|
|
||||||
dnl test for Unix variants
|
dnl test for Unix variants
|
||||||
AC_ISC_POSIX
|
AC_ISC_POSIX
|
||||||
|
|
@ -271,7 +295,8 @@ AC_MINIX
|
||||||
dnl test for non-Unix variants
|
dnl test for non-Unix variants
|
||||||
AC_CYGWIN
|
AC_CYGWIN
|
||||||
AC_MINGW32
|
AC_MINGW32
|
||||||
AC_EXEEXT
|
|
||||||
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
dnl BEGIN changes for cross-building for cygwin and BeOS
|
dnl BEGIN changes for cross-building for cygwin and BeOS
|
||||||
|
|
||||||
|
|
@ -333,10 +358,13 @@ if test "$opt_profiling" = "yes"; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$opt_static_link" = yes; then
|
if test "$opt_static_link" = yes; then
|
||||||
# if we're using gcc, add `-static' to LDFLAGS
|
# if we're using gcc, add `-static' to LDFLAGS, except on Solaris >= 2
|
||||||
if test -n "$GCC" || test "$ac_cv_prog_gcc" = "yes"; then
|
if test -n "$GCC" || test "$ac_cv_prog_gcc" = "yes"; then
|
||||||
STATIC_LD="-static"
|
STATIC_LD="-static"
|
||||||
LDFLAGS="$LDFLAGS -static" # XXX experimental
|
case "$host_os" in
|
||||||
|
solaris2*) ;;
|
||||||
|
*) LDFLAGS="$LDFLAGS -static" ;; # XXX experimental
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -351,40 +379,33 @@ dnl BEGIN READLINE and HISTORY LIBRARY SECTION
|
||||||
dnl prepare to allow bash to be linked against an already-installed readline
|
dnl prepare to allow bash to be linked against an already-installed readline
|
||||||
|
|
||||||
dnl first test that the readline version is new enough to link bash against
|
dnl first test that the readline version is new enough to link bash against
|
||||||
if test "$opt_readline" = yes && test "$opt_with_installed_readline" = "yes"
|
if test "$opt_readline" = yes && test "$opt_with_installed_readline" != "no"
|
||||||
then
|
then
|
||||||
|
echo opt_with_installed_readline = $opt_with_installed_readline
|
||||||
|
# If the user specified --with-installed-readline=PREFIX and PREFIX
|
||||||
|
# is not `yes', set ac_cv_rl_prefix to PREFIX
|
||||||
|
test $opt_with_installed_readline != "yes" && ac_cv_rl_prefix=$opt_with_installed_readline
|
||||||
|
|
||||||
dnl we duplicate some work that's done later here so we can look in
|
RL_LIB_READLINE_VERSION
|
||||||
dnl the correct directory for the readline library
|
|
||||||
|
|
||||||
if test -z "$TERMCAP_LIB" ; then
|
case "$ac_cv_rl_version" in
|
||||||
BASH_CHECK_LIB_TERMCAP
|
|
||||||
fi
|
|
||||||
|
|
||||||
test "x$prefix" = xNONE && _rl_prefix=$ac_default_prefix || _rl_prefix=${prefix}
|
|
||||||
test "x$exec_prefix" = xNONE && _rl_exec_prefix=${_rl_prefix} || _rl_exec_prefix=${exec_prefix}
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(version of installed readline library)
|
|
||||||
_rl_version=`exec_prefix=${_rl_exec_prefix} ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/rlvers.sh -C "${CC}" -L ${libdir} -I ${includedir} -T ${TERMCAP_LIB}`
|
|
||||||
AC_MSG_RESULT($_rl_version)
|
|
||||||
|
|
||||||
case "$_rl_version" in
|
|
||||||
4.[[2-9]]*|5*|6*|7*|8*|9*) ;;
|
4.[[2-9]]*|5*|6*|7*|8*|9*) ;;
|
||||||
*) opt_with_installed_readline=no
|
*) opt_with_installed_readline=no
|
||||||
AC_MSG_WARN(installed readline library is too old to be linked with bash)
|
AC_MSG_WARN(installed readline library is too old to be linked with bash)
|
||||||
AC_MSG_WARN(using private bash version)
|
AC_MSG_WARN(using private bash version)
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
unset _rl_version _rl_prefix _rl_exec_prefix
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test $opt_readline = yes; then
|
if test $opt_readline = yes; then
|
||||||
AC_DEFINE(READLINE)
|
AC_DEFINE(READLINE)
|
||||||
READLINE_LIB=-lreadline
|
READLINE_LIB=-lreadline
|
||||||
if test "$opt_with_installed_readline" = "yes" ; then
|
if test "$opt_with_installed_readline" != "no" ; then
|
||||||
RL_LIBDIR='$(libdir)'
|
case "$RL_INCLUDEDIR" in
|
||||||
|
/usr/include) ;;
|
||||||
|
*) RL_INCLUDE='-I${RL_INCLUDEDIR}'
|
||||||
|
esac
|
||||||
READLINE_DEP=
|
READLINE_DEP=
|
||||||
RL_INCLUDE='-I$(includedir)'
|
|
||||||
else
|
else
|
||||||
RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
|
RL_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
|
||||||
READLINE_DEP='$(READLINE_LIBRARY)'
|
READLINE_DEP='$(READLINE_LIBRARY)'
|
||||||
|
|
@ -401,10 +422,13 @@ if test $opt_history = yes || test $opt_bang_history = yes; then
|
||||||
AC_DEFINE(BANG_HISTORY)
|
AC_DEFINE(BANG_HISTORY)
|
||||||
fi
|
fi
|
||||||
HISTORY_LIB=-lhistory
|
HISTORY_LIB=-lhistory
|
||||||
if test "$opt_with_installed_readline" = "yes"; then
|
if test "$opt_with_installed_readline" != "no"; then
|
||||||
HIST_LIBDIR='$(libdir)'
|
HIST_LIBDIR=$RL_LIBDIR
|
||||||
HISTORY_DEP=
|
HISTORY_DEP=
|
||||||
RL_INCLUDE='-I$(includedir)'
|
case "$RL_INCLUDEDIR" in
|
||||||
|
/usr/include) ;;
|
||||||
|
*) RL_INCLUDE='-I${RL_INCLUDEDIR}'
|
||||||
|
esac
|
||||||
else
|
else
|
||||||
HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
|
HIST_LIBDIR='$(dot)/$(LIBSUBDIR)/readline'
|
||||||
HISTORY_DEP='$(HISTORY_LIBRARY)'
|
HISTORY_DEP='$(HISTORY_LIBRARY)'
|
||||||
|
|
@ -416,6 +440,7 @@ fi
|
||||||
AC_SUBST(READLINE_LIB)
|
AC_SUBST(READLINE_LIB)
|
||||||
AC_SUBST(READLINE_DEP)
|
AC_SUBST(READLINE_DEP)
|
||||||
AC_SUBST(RL_LIBDIR)
|
AC_SUBST(RL_LIBDIR)
|
||||||
|
AC_SUBST(RL_INCLUDEDIR)
|
||||||
AC_SUBST(RL_INCLUDE)
|
AC_SUBST(RL_INCLUDE)
|
||||||
AC_SUBST(HISTORY_LIB)
|
AC_SUBST(HISTORY_LIB)
|
||||||
AC_SUBST(HISTORY_DEP)
|
AC_SUBST(HISTORY_DEP)
|
||||||
|
|
@ -425,7 +450,7 @@ dnl END READLINE and HISTORY LIBRARY SECTION
|
||||||
|
|
||||||
dnl programs needed by the build and install process
|
dnl programs needed by the build and install process
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
AC_CHECK_PROG(AR, ar, ar)
|
AC_CHECK_PROG(AR, ar, , ar)
|
||||||
dnl Set default for ARFLAGS, since autoconf does not have a macro for it.
|
dnl Set default for ARFLAGS, since autoconf does not have a macro for it.
|
||||||
dnl This allows people to set it when running configure or make
|
dnl This allows people to set it when running configure or make
|
||||||
test -n "$ARFLAGS" || ARFLAGS="cr"
|
test -n "$ARFLAGS" || ARFLAGS="cr"
|
||||||
|
|
@ -439,14 +464,52 @@ opennt*|interix*) MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
|
||||||
esac
|
esac
|
||||||
AC_SUBST(MAKE_SHELL)
|
AC_SUBST(MAKE_SHELL)
|
||||||
|
|
||||||
|
dnl Turn on any extensions available in the GNU C library.
|
||||||
|
AC_DEFINE(_GNU_SOURCE, 1)
|
||||||
|
|
||||||
|
dnl C compiler characteristics
|
||||||
|
AC_C_CONST
|
||||||
|
AC_C_INLINE
|
||||||
|
AC_C_BIGENDIAN
|
||||||
|
AC_C_STRINGIZE
|
||||||
|
AC_C_LONG_DOUBLE
|
||||||
|
AC_C_PROTOTYPES
|
||||||
|
AC_C_CHAR_UNSIGNED
|
||||||
|
|
||||||
|
dnl header files
|
||||||
|
AC_HEADER_DIRENT
|
||||||
|
AC_HEADER_TIME
|
||||||
|
|
||||||
|
BASH_HEADER_INTTYPES
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \
|
||||||
|
memory.h locale.h termcap.h termio.h termios.h dlfcn.h \
|
||||||
|
stddef.h stdint.h netdb.h grp.h strings.h)
|
||||||
|
AC_CHECK_HEADERS(sys/ptem.h sys/pte.h sys/stream.h sys/select.h sys/file.h \
|
||||||
|
sys/resource.h sys/param.h sys/socket.h \
|
||||||
|
sys/time.h sys/times.h sys/wait.h)
|
||||||
|
AC_CHECK_HEADERS(netinet/in.h arpa/inet.h)
|
||||||
|
|
||||||
dnl special checks for libc functions
|
dnl special checks for libc functions
|
||||||
AC_FUNC_ALLOCA
|
AC_FUNC_ALLOCA
|
||||||
AC_FUNC_GETPGRP
|
AC_FUNC_GETPGRP
|
||||||
AC_FUNC_SETVBUF_REVERSED
|
AC_FUNC_SETVBUF_REVERSED
|
||||||
AC_FUNC_VPRINTF
|
AC_FUNC_VPRINTF
|
||||||
AC_FUNC_WAIT3
|
|
||||||
AC_FUNC_STRCOLL
|
AC_FUNC_STRCOLL
|
||||||
|
|
||||||
|
dnl if we're not using the bash malloc but require the C alloca, set things
|
||||||
|
dnl up to build a libmalloc.a containing only alloca.o
|
||||||
|
|
||||||
|
if test "$ac_cv_func_alloca_works" = "no" && test "$opt_bash_malloc" = "no"; then
|
||||||
|
MALLOC_TARGET=alloca
|
||||||
|
MALLOC_SRC=alloca.c
|
||||||
|
|
||||||
|
MALLOC_LIB='-lmalloc'
|
||||||
|
MALLOC_LIBRARY='$(ALLOC_LIBDIR)/libmalloc.a'
|
||||||
|
MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)'
|
||||||
|
MALLOC_DEP='$(MALLOC_LIBRARY)'
|
||||||
|
fi
|
||||||
|
|
||||||
dnl if vprintf is not in libc, see if it's defined in stdio.h
|
dnl if vprintf is not in libc, see if it's defined in stdio.h
|
||||||
if test "$ac_cv_func_vprintf" = no; then
|
if test "$ac_cv_func_vprintf" = no; then
|
||||||
AC_MSG_CHECKING(for declaration of vprintf in stdio.h)
|
AC_MSG_CHECKING(for declaration of vprintf in stdio.h)
|
||||||
|
|
@ -457,8 +520,12 @@ if test "$ac_cv_func_vprintf" = no; then
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$ac_cv_func_vprintf" = no && test "$ac_cv_func__doprnt" = "yes"; then
|
||||||
|
AC_LIBOBJ(vprint)
|
||||||
|
fi
|
||||||
|
|
||||||
dnl signal stuff
|
dnl signal stuff
|
||||||
AC_RETSIGTYPE
|
AC_TYPE_SIGNAL
|
||||||
|
|
||||||
dnl checks for certain version-specific system calls and libc functions
|
dnl checks for certain version-specific system calls and libc functions
|
||||||
AC_CHECK_FUNC(__setostype, AC_DEFINE(HAVE_SETOSTYPE))
|
AC_CHECK_FUNC(__setostype, AC_DEFINE(HAVE_SETOSTYPE))
|
||||||
|
|
@ -471,14 +538,31 @@ dnl checks for system calls
|
||||||
AC_CHECK_FUNCS(dup2 select getdtablesize getgroups gethostname \
|
AC_CHECK_FUNCS(dup2 select getdtablesize getgroups gethostname \
|
||||||
setdtablesize getpagesize killpg lstat getpeername sbrk \
|
setdtablesize getpagesize killpg lstat getpeername sbrk \
|
||||||
getrlimit getrusage gettimeofday waitpid tcgetpgrp \
|
getrlimit getrusage gettimeofday waitpid tcgetpgrp \
|
||||||
readlink rename)
|
readlink)
|
||||||
|
AC_REPLACE_FUNCS(rename)
|
||||||
|
|
||||||
dnl checks for c library functions
|
dnl checks for c library functions
|
||||||
AC_CHECK_FUNCS(bcopy bzero confstr getcwd strcasecmp setenv putenv \
|
AC_CHECK_FUNCS(bcopy bzero confstr sysconf pathconf setenv putenv \
|
||||||
setlinebuf setlocale strchr strerror strtod strtol \
|
setlinebuf setvbuf setlocale strchr tcgetattr uname \
|
||||||
strtoul tcgetattr uname sysconf ulimit times tzset \
|
ulimit tzset siginterrupt memmove ttyname times \
|
||||||
siginterrupt memmove ttyname gethostbyname getservbyname \
|
getaddrinfo gethostbyname getservbyname inet_aton \
|
||||||
inet_aton strpbrk setvbuf pathconf)
|
vsnprintf snprintf vasprintf asprintf fnmatch)
|
||||||
|
AC_CHECK_FUNCS(isascii isblank isgraph isprint isspace isxdigit)
|
||||||
|
AC_REPLACE_FUNCS(getcwd strcasecmp strerror strpbrk strtod)
|
||||||
|
AC_REPLACE_FUNCS(strtol strtoul strtoll strtoull strtoimax strtoumax)
|
||||||
|
|
||||||
|
AC_CHECK_DECLS([strtold])
|
||||||
|
AC_CHECK_DECLS([confstr])
|
||||||
|
AC_CHECK_DECLS([sbrk])
|
||||||
|
AC_CHECK_DECLS([printf])
|
||||||
|
AC_CHECK_DECLS([strsignal])
|
||||||
|
|
||||||
|
BASH_CHECK_DECL(strtoimax)
|
||||||
|
BASH_CHECK_DECL(strtol)
|
||||||
|
BASH_CHECK_DECL(strtoll)
|
||||||
|
BASH_CHECK_DECL(strtoul)
|
||||||
|
BASH_CHECK_DECL(strtoull)
|
||||||
|
BASH_CHECK_DECL(strtoumax)
|
||||||
|
|
||||||
dnl checks for locale functions
|
dnl checks for locale functions
|
||||||
AC_CHECK_HEADERS(libintl.h)
|
AC_CHECK_HEADERS(libintl.h)
|
||||||
|
|
@ -502,18 +586,6 @@ fi
|
||||||
dnl this defines SYS_SIGLIST_DECLARED
|
dnl this defines SYS_SIGLIST_DECLARED
|
||||||
AC_DECL_SYS_SIGLIST
|
AC_DECL_SYS_SIGLIST
|
||||||
|
|
||||||
dnl header files
|
|
||||||
AC_HEADER_DIRENT
|
|
||||||
AC_HEADER_TIME
|
|
||||||
|
|
||||||
AC_CHECK_HEADERS(unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \
|
|
||||||
memory.h locale.h termcap.h termio.h termios.h dlfcn.h \
|
|
||||||
stddef.h netdb.h)
|
|
||||||
AC_CHECK_HEADERS(sys/ptem.h sys/pte.h sys/stream.h sys/select.h sys/file.h \
|
|
||||||
sys/resource.h sys/param.h sys/socket.h \
|
|
||||||
sys/time.h sys/times.h sys/wait.h)
|
|
||||||
AC_CHECK_HEADERS(netinet/in.h arpa/inet.h)
|
|
||||||
|
|
||||||
dnl network functions -- check for inet_aton again
|
dnl network functions -- check for inet_aton again
|
||||||
if test "$ac_cv_func_inet_aton" != 'yes'; then
|
if test "$ac_cv_func_inet_aton" != 'yes'; then
|
||||||
BASH_FUNC_INET_ATON
|
BASH_FUNC_INET_ATON
|
||||||
|
|
@ -527,7 +599,7 @@ esac
|
||||||
|
|
||||||
dnl check for getpeername in the socket library only if it's not in libc
|
dnl check for getpeername in the socket library only if it's not in libc
|
||||||
if test "$ac_cv_func_getpeername" = no; then
|
if test "$ac_cv_func_getpeername" = no; then
|
||||||
BASH_CHECK_SOCKLIB
|
BASH_CHECK_LIB_SOCKET
|
||||||
fi
|
fi
|
||||||
dnl check for gethostbyname in socket libraries if it's not in libc
|
dnl check for gethostbyname in socket libraries if it's not in libc
|
||||||
if test "$ac_cv_func_gethostbyname" = no; then
|
if test "$ac_cv_func_gethostbyname" = no; then
|
||||||
|
|
@ -541,8 +613,12 @@ AC_TYPE_MODE_T
|
||||||
AC_TYPE_UID_T
|
AC_TYPE_UID_T
|
||||||
AC_TYPE_PID_T
|
AC_TYPE_PID_T
|
||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
|
AC_CHECK_TYPE(ssize_t, int)
|
||||||
AC_CHECK_TYPE(time_t, long)
|
AC_CHECK_TYPE(time_t, long)
|
||||||
|
|
||||||
|
BASH_TYPE_LONG_LONG
|
||||||
|
BASH_TYPE_UNSIGNED_LONG_LONG
|
||||||
|
|
||||||
AC_TYPE_SIGNAL
|
AC_TYPE_SIGNAL
|
||||||
|
|
||||||
AC_CHECK_SIZEOF(char, 1)
|
AC_CHECK_SIZEOF(char, 1)
|
||||||
|
|
@ -551,9 +627,10 @@ AC_CHECK_SIZEOF(int, 4)
|
||||||
AC_CHECK_SIZEOF(long, 4)
|
AC_CHECK_SIZEOF(long, 4)
|
||||||
AC_CHECK_SIZEOF(char *, 4)
|
AC_CHECK_SIZEOF(char *, 4)
|
||||||
AC_CHECK_SIZEOF(double, 8)
|
AC_CHECK_SIZEOF(double, 8)
|
||||||
|
AC_CHECK_SIZEOF([long long], 8)
|
||||||
|
|
||||||
AC_CHECK_TYPE(u_int, unsigned int)
|
AC_CHECK_TYPE(u_int, [unsigned int])
|
||||||
AC_CHECK_TYPE(u_long, unsigned long)
|
AC_CHECK_TYPE(u_long, [unsigned long])
|
||||||
|
|
||||||
BASH_TYPE_BITS16_T
|
BASH_TYPE_BITS16_T
|
||||||
BASH_TYPE_U_BITS16_T
|
BASH_TYPE_U_BITS16_T
|
||||||
|
|
@ -566,16 +643,11 @@ BASH_TYPE_PTRDIFF_T
|
||||||
dnl structures
|
dnl structures
|
||||||
AC_HEADER_STAT
|
AC_HEADER_STAT
|
||||||
|
|
||||||
dnl C compiler characteristics
|
|
||||||
AC_C_BIGENDIAN
|
|
||||||
|
|
||||||
dnl system services
|
dnl system services
|
||||||
AC_SYS_INTERPRETER
|
AC_SYS_INTERPRETER
|
||||||
if test $ac_cv_sys_interpreter = yes; then
|
if test $ac_cv_sys_interpreter = yes; then
|
||||||
AC_DEFINE(HAVE_HASH_BANG_EXEC)
|
AC_DEFINE(HAVE_HASH_BANG_EXEC)
|
||||||
fi
|
fi
|
||||||
dnl we use NO_READ_RESTART_ON_SIGNAL
|
|
||||||
AC_SYS_RESTARTABLE_SYSCALLS
|
|
||||||
|
|
||||||
dnl Miscellaneous Bash tests
|
dnl Miscellaneous Bash tests
|
||||||
if test "$ac_cv_func_lstat" = "no"; then
|
if test "$ac_cv_func_lstat" = "no"; then
|
||||||
|
|
@ -583,13 +655,9 @@ BASH_FUNC_LSTAT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl behavior of system calls and library functions
|
dnl behavior of system calls and library functions
|
||||||
BASH_DUP2_CLOEXEC_CHECK
|
BASH_FUNC_DUP2_CLOEXEC_CHECK
|
||||||
BASH_PGRP_SYNC
|
BASH_SYS_PGRP_SYNC
|
||||||
BASH_SIGNAL_CHECK
|
BASH_SYS_SIGNAL_VINTAGE
|
||||||
|
|
||||||
if test "$ac_cv_sys_restartable_syscalls" = "no"; then
|
|
||||||
BASH_SYS_RESTARTABLE_SYSCALLS
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl checking for the presence of certain library symbols
|
dnl checking for the presence of certain library symbols
|
||||||
BASH_SYS_ERRLIST
|
BASH_SYS_ERRLIST
|
||||||
|
|
@ -601,7 +669,12 @@ BASH_TYPE_SIGHANDLER
|
||||||
BASH_CHECK_TYPE(clock_t, [#include <sys/times.h>], long)
|
BASH_CHECK_TYPE(clock_t, [#include <sys/times.h>], long)
|
||||||
BASH_CHECK_TYPE(sigset_t, [#include <signal.h>], int)
|
BASH_CHECK_TYPE(sigset_t, [#include <signal.h>], int)
|
||||||
BASH_CHECK_TYPE(quad_t, , long, HAVE_QUAD_T)
|
BASH_CHECK_TYPE(quad_t, , long, HAVE_QUAD_T)
|
||||||
BASH_RLIMIT_TYPE
|
BASH_CHECK_TYPE(intmax_t, , $bash_cv_type_long_long)
|
||||||
|
BASH_CHECK_TYPE(uintmax_t, , $bash_cv_type_unsigned_long_long)
|
||||||
|
if test "$ac_cv_header_sys_socket_h" = "yes"; then
|
||||||
|
BASH_CHECK_TYPE(socklen_t, [#include <sys/socket.h>], int, HAVE_SOCKLEN_T)
|
||||||
|
fi
|
||||||
|
BASH_TYPE_RLIMIT
|
||||||
|
|
||||||
dnl presence and contents of structures used by system calls
|
dnl presence and contents of structures used by system calls
|
||||||
BASH_STRUCT_TERMIOS_LDISC
|
BASH_STRUCT_TERMIOS_LDISC
|
||||||
|
|
@ -610,36 +683,52 @@ BASH_STRUCT_DIRENT_D_INO
|
||||||
BASH_STRUCT_DIRENT_D_FILENO
|
BASH_STRUCT_DIRENT_D_FILENO
|
||||||
BASH_STRUCT_WINSIZE
|
BASH_STRUCT_WINSIZE
|
||||||
BASH_STRUCT_TIMEVAL
|
BASH_STRUCT_TIMEVAL
|
||||||
|
AC_CHECK_MEMBERS([struct stat.st_blocks])
|
||||||
|
|
||||||
dnl presence and behavior of C library functions
|
dnl presence and behavior of C library functions
|
||||||
BASH_FUNC_STRSIGNAL
|
BASH_FUNC_STRSIGNAL
|
||||||
BASH_FUNC_OPENDIR_CHECK
|
BASH_FUNC_OPENDIR_CHECK
|
||||||
BASH_FUNC_PRINTF
|
|
||||||
BASH_FUNC_ULIMIT_MAXFDS
|
BASH_FUNC_ULIMIT_MAXFDS
|
||||||
BASH_FUNC_GETENV
|
BASH_FUNC_GETENV
|
||||||
|
if test "$ac_func_getcwd" = "yes"; then
|
||||||
BASH_FUNC_GETCWD
|
BASH_FUNC_GETCWD
|
||||||
BASH_FUNC_SBRK_DECLARED
|
fi
|
||||||
BASH_FUNC_POSIX_SETJMP
|
BASH_FUNC_POSIX_SETJMP
|
||||||
BASH_FUNC_STRCOLL
|
BASH_FUNC_STRCOLL
|
||||||
|
|
||||||
|
dnl I have removed this check. The existing libc FNM_EXTMATCH implementation
|
||||||
|
dnl (glibc-2.2.4) disagrees with bash on the matching of incorrectly-formed
|
||||||
|
dnl patterns (bash treats them as strings or characters to be matched without
|
||||||
|
dnl any special meaning) and has one outright bug: a[X-]b should match
|
||||||
|
dnl both a-b and aXb.
|
||||||
|
dnl
|
||||||
|
dnl Once Ulrich and I get together on this, the check can return
|
||||||
|
dnl
|
||||||
|
dnl chet 10/31/2001
|
||||||
|
dnl
|
||||||
|
dnl BASH_FUNC_FNMATCH_EXTMATCH
|
||||||
|
|
||||||
|
BASH_FUNC_PRINTF_A_FORMAT
|
||||||
|
|
||||||
dnl presence and behavior of OS functions
|
dnl presence and behavior of OS functions
|
||||||
BASH_REINSTALL_SIGHANDLERS
|
BASH_SYS_REINSTALL_SIGHANDLERS
|
||||||
BASH_JOB_CONTROL_MISSING
|
BASH_SYS_JOB_CONTROL_MISSING
|
||||||
BASH_SYS_NAMED_PIPES
|
BASH_SYS_NAMED_PIPES
|
||||||
|
|
||||||
dnl presence of certain CPP defines
|
dnl presence of certain CPP defines
|
||||||
BASH_HAVE_TIOCGWINSZ
|
AC_HEADER_TIOCGWINSZ
|
||||||
BASH_HAVE_TIOCSTAT
|
BASH_HAVE_TIOCSTAT
|
||||||
BASH_HAVE_FIONREAD
|
BASH_HAVE_FIONREAD
|
||||||
|
|
||||||
dnl miscellaneous
|
dnl miscellaneous
|
||||||
BASH_MISC_SPEED_T
|
BASH_CHECK_SPEED_T
|
||||||
BASH_CHECK_GETPW_FUNCS
|
BASH_CHECK_GETPW_FUNCS
|
||||||
BASH_CHECK_RTSIGS
|
BASH_CHECK_RTSIGS
|
||||||
|
BASH_CHECK_SYS_SIGLIST
|
||||||
|
|
||||||
dnl special checks
|
dnl special checks
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
hpux*) BASH_KERNEL_RLIMIT_CHECK ;;
|
hpux*) BASH_CHECK_KERNEL_RLIMIT ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test "$opt_readline" = yes; then
|
if test "$opt_readline" = yes; then
|
||||||
|
|
@ -654,7 +743,7 @@ AC_SUBST(TERMCAP_DEP)
|
||||||
|
|
||||||
BASH_CHECK_DEV_FD
|
BASH_CHECK_DEV_FD
|
||||||
BASH_CHECK_DEV_STDIN
|
BASH_CHECK_DEV_STDIN
|
||||||
BASH_DEFAULT_MAIL_DIR
|
BASH_SYS_DEFAULT_MAIL_DIR
|
||||||
|
|
||||||
if test "$bash_cv_job_control_missing" = missing; then
|
if test "$bash_cv_job_control_missing" = missing; then
|
||||||
opt_job_control=no
|
opt_job_control=no
|
||||||
|
|
@ -689,6 +778,7 @@ hpux*) LOCAL_CFLAGS=-DHPUX ;;
|
||||||
dgux*) LOCAL_CFLAGS=-D_DGUX_SOURCE; LOCAL_LIBS=-ldgc ;;
|
dgux*) LOCAL_CFLAGS=-D_DGUX_SOURCE; LOCAL_LIBS=-ldgc ;;
|
||||||
isc*) LOCAL_CFLAGS=-Disc386 ;;
|
isc*) LOCAL_CFLAGS=-Disc386 ;;
|
||||||
rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;;
|
rhapsody*) LOCAL_CFLAGS=-DRHAPSODY ;;
|
||||||
|
darwin*) LOCAL_CFLAGS=-DMACOSX ;;
|
||||||
sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DNO_MEMSCRAMBLE -DPATH_MAX=1024" ;;
|
sco3.2v5*) LOCAL_CFLAGS="-b elf -DWAITPID_BROKEN -DNO_MEMSCRAMBLE -DPATH_MAX=1024" ;;
|
||||||
sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DNO_MEMSCRAMBLE -DPATH_MAX=1024" ;;
|
sco3.2v4*) LOCAL_CFLAGS="-DMUST_UNBLOCK_CHLD -DNO_MEMSCRAMBLE -DPATH_MAX=1024" ;;
|
||||||
sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
|
sco3.2*) LOCAL_CFLAGS=-DMUST_UNBLOCK_CHLD ;;
|
||||||
|
|
@ -699,7 +789,7 @@ linux*) LOCAL_LDFLAGS=-rdynamic ;; # allow dynamic loading
|
||||||
*qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s -lunix -lncurses" ;;
|
*qnx*) LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s -lunix -lncurses" ;;
|
||||||
powerux*) LOCAL_LIBS="-lgen" ;;
|
powerux*) LOCAL_LIBS="-lgen" ;;
|
||||||
cygwin*) LOCAL_LIBS="-luser32" ;;
|
cygwin*) LOCAL_LIBS="-luser32" ;;
|
||||||
opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG" ;;
|
opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
dnl Stanza for OS/compiler pair-specific flags
|
dnl Stanza for OS/compiler pair-specific flags
|
||||||
|
|
@ -776,7 +866,6 @@ AC_SUBST(AR)
|
||||||
AC_SUBST(ARFLAGS)
|
AC_SUBST(ARFLAGS)
|
||||||
|
|
||||||
AC_SUBST(BASHVERS)
|
AC_SUBST(BASHVERS)
|
||||||
AC_SUBST(BASHPATCH)
|
|
||||||
|
|
||||||
AC_SUBST(host_cpu)
|
AC_SUBST(host_cpu)
|
||||||
AC_SUBST(host_vendor)
|
AC_SUBST(host_vendor)
|
||||||
|
|
|
||||||
58
conftypes.h
Normal file
58
conftypes.h
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
/* conftypes.h -- defines for build and host system. */
|
||||||
|
|
||||||
|
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GNU Bash, the Bourne Again SHell.
|
||||||
|
|
||||||
|
Bash is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
Bash is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with Bash; see the file COPYING. If not, write to the Free
|
||||||
|
Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
|
||||||
|
|
||||||
|
#if !defined (_CONFTYPES_H_)
|
||||||
|
#define _CONFTYPES_H_
|
||||||
|
|
||||||
|
/* Placeholder for future modifications if cross-compiling or building a
|
||||||
|
`fat' binary, e.g. on Apple Rhapsody. These values are used in multiple
|
||||||
|
files, so they appear here. */
|
||||||
|
#if !defined (RHAPSODY)
|
||||||
|
# define HOSTTYPE CONF_HOSTTYPE
|
||||||
|
# define OSTYPE CONF_OSTYPE
|
||||||
|
# define MACHTYPE CONF_MACHTYPE
|
||||||
|
#else /* RHAPSODY */
|
||||||
|
# if defined(__powerpc__) || defined(__ppc__)
|
||||||
|
# define HOSTTYPE "powerpc"
|
||||||
|
# elif defined(__i386__)
|
||||||
|
# define HOSTTYPE "i386"
|
||||||
|
# else
|
||||||
|
# define HOSTTYPE CONF_HOSTTYPE
|
||||||
|
# endif
|
||||||
|
|
||||||
|
# define OSTYPE CONF_OSTYPE
|
||||||
|
# define VENDOR CONF_VENDOR
|
||||||
|
|
||||||
|
# define MACHTYPE HOSTTYPE "-" VENDOR "-" OSTYPE
|
||||||
|
#endif /* RHAPSODY */
|
||||||
|
|
||||||
|
#ifndef HOSTTYPE
|
||||||
|
# define HOSTTYPE "unknown"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef OSTYPE
|
||||||
|
# define OSTYPE "unknown"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MACHTYPE
|
||||||
|
# define MACHTYPE "unknown"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _CONFTYPES_H_ */
|
||||||
20
copy_cmd.c
20
copy_cmd.c
|
|
@ -32,6 +32,26 @@
|
||||||
|
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
|
|
||||||
|
static PATTERN_LIST *copy_case_clause __P((PATTERN_LIST *));
|
||||||
|
static PATTERN_LIST *copy_case_clauses __P((PATTERN_LIST *));
|
||||||
|
static FOR_COM *copy_for_command __P((FOR_COM *));
|
||||||
|
#if defined (ARITH_FOR_COMMAND)
|
||||||
|
static ARITH_FOR_COM *copy_arith_for_command __P((ARITH_FOR_COM *));
|
||||||
|
#endif
|
||||||
|
static GROUP_COM *copy_group_command __P((GROUP_COM *));
|
||||||
|
static SUBSHELL_COM *copy_subshell_command __P((SUBSHELL_COM *));
|
||||||
|
static CASE_COM *copy_case_command __P((CASE_COM *));
|
||||||
|
static WHILE_COM *copy_while_command __P((WHILE_COM *));
|
||||||
|
static IF_COM *copy_if_command __P((IF_COM *));
|
||||||
|
#if defined (DPAREN_ARITHMETIC)
|
||||||
|
static ARITH_COM *copy_arith_command __P((ARITH_COM *));
|
||||||
|
#endif
|
||||||
|
#if defined (COND_COMMAND)
|
||||||
|
static COND_COM *copy_cond_command __P((COND_COM *));
|
||||||
|
#endif
|
||||||
|
static SIMPLE_COM *copy_simple_command __P((SIMPLE_COM *));
|
||||||
|
static FUNCTION_DEF *copy_function_def __P((FUNCTION_DEF *));
|
||||||
|
|
||||||
WORD_DESC *
|
WORD_DESC *
|
||||||
copy_word (w)
|
copy_word (w)
|
||||||
WORD_DESC *w;
|
WORD_DESC *w;
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
Use gcc labelled initializers to set up the array. Note that
|
Use gcc labelled initializers to set up the array. Note that
|
||||||
some entries might wind up being NULL. */
|
some entries might wind up being NULL. */
|
||||||
|
|
||||||
char *signal_names[NSIG + 2] = {
|
char *signal_names[NSIG + 3] = {
|
||||||
[0] "EXIT",
|
[0] "EXIT",
|
||||||
[SIGHUP] "SIGHUP",
|
[SIGHUP] "SIGHUP",
|
||||||
[SIGINT] "SIGINT",
|
[SIGINT] "SIGINT",
|
||||||
|
|
@ -32,5 +32,6 @@ char *signal_names[NSIG + 2] = {
|
||||||
[SIGWINCH] "SIGWINCH",
|
[SIGWINCH] "SIGWINCH",
|
||||||
[SIGKILLTHR] "SIGKILLTHR",
|
[SIGKILLTHR] "SIGKILLTHR",
|
||||||
[NSIG] "DEBUG",
|
[NSIG] "DEBUG",
|
||||||
[NSIG + 1] (char *)0x0,
|
[NSIG + 1] "ERR",
|
||||||
|
[NSIG + 2] (char *)0x0,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,251 @@
|
||||||
# This file is a shell script that caches the results of configure
|
# This file is a shell script that caches the results of configure
|
||||||
# tests for CYGWIN32 so they don't need to be done when cross-compiling.
|
# tests run on this system so they can be shared between configure
|
||||||
|
# scripts and configure runs, see configure's option --config-cache.
|
||||||
|
# It is not useful on other systems. If it contains results you don't
|
||||||
|
# want to keep, you may remove or edit it.
|
||||||
|
#
|
||||||
|
# config.status only pays attention to the cache file if you give it
|
||||||
|
# the --recheck option to rerun configure.
|
||||||
|
#
|
||||||
|
# `ac_cv_env_foo' variables (set or unset) will be overriden when
|
||||||
|
# loading this file, other *unset* `ac_cv_foo' will be assigned the
|
||||||
|
# following values.
|
||||||
|
|
||||||
# AC_FUNC_GETPGRP should also define GETPGRP_VOID
|
ac_cv_build=${ac_cv_build='i686-pc-cygwin'}
|
||||||
|
ac_cv_build_alias=${ac_cv_build_alias='i686-pc-cygwin'}
|
||||||
|
ac_cv_c_bigendian=${ac_cv_c_bigendian='no'}
|
||||||
|
ac_cv_c_char_unsigned=${ac_cv_c_char_unsigned='no'}
|
||||||
|
ac_cv_c_compiler_gnu=${ac_cv_c_compiler_gnu='yes'}
|
||||||
|
ac_cv_c_const=${ac_cv_c_const='yes'}
|
||||||
|
ac_cv_c_inline=${ac_cv_c_inline='inline'}
|
||||||
|
ac_cv_c_long_double=${ac_cv_c_long_double='yes'}
|
||||||
|
ac_cv_c_stringize=${ac_cv_c_stringize='yes'}
|
||||||
|
ac_cv_decl_sys_siglist=${ac_cv_decl_sys_siglist='no'}
|
||||||
|
ac_cv_exeext=${ac_cv_exeext='.exe'}
|
||||||
|
ac_cv_func___setostype=${ac_cv_func___setostype='no'}
|
||||||
|
ac_cv_func__doprnt=${ac_cv_func__doprnt='no'}
|
||||||
|
ac_cv_func_alloca_works=${ac_cv_func_alloca_works='yes'}
|
||||||
|
ac_cv_func_asprintf=${ac_cv_func_asprintf='no'}
|
||||||
|
ac_cv_func_bcopy=${ac_cv_func_bcopy='yes'}
|
||||||
|
ac_cv_func_bindtextdomain=${ac_cv_func_bindtextdomain='no'}
|
||||||
|
ac_cv_func_bzero=${ac_cv_func_bzero='yes'}
|
||||||
|
ac_cv_func_confstr=${ac_cv_func_confstr='no'}
|
||||||
|
ac_cv_func_dlclose=${ac_cv_func_dlclose='yes'}
|
||||||
|
ac_cv_func_dlopen=${ac_cv_func_dlopen='yes'}
|
||||||
|
ac_cv_func_dlsym=${ac_cv_func_dlsym='yes'}
|
||||||
|
ac_cv_func_dup2=${ac_cv_func_dup2='yes'}
|
||||||
|
ac_cv_func_fnmatch=${ac_cv_func_fnmatch='no'}
|
||||||
|
ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo='no'}
|
||||||
|
ac_cv_func_getcwd=${ac_cv_func_getcwd='yes'}
|
||||||
|
ac_cv_func_getdtablesize=${ac_cv_func_getdtablesize='yes'}
|
||||||
|
ac_cv_func_getgroups=${ac_cv_func_getgroups='yes'}
|
||||||
|
ac_cv_func_gethostbyname=${ac_cv_func_gethostbyname='yes'}
|
||||||
|
ac_cv_func_gethostname=${ac_cv_func_gethostname='yes'}
|
||||||
|
ac_cv_func_getpagesize=${ac_cv_func_getpagesize='yes'}
|
||||||
|
ac_cv_func_getpeername=${ac_cv_func_getpeername='yes'}
|
||||||
ac_cv_func_getpgrp_void=${ac_cv_func_getpgrp_void='yes'}
|
ac_cv_func_getpgrp_void=${ac_cv_func_getpgrp_void='yes'}
|
||||||
# AC_FUNC_SETVBUF_REVERSED should not define anything else
|
ac_cv_func_getrlimit=${ac_cv_func_getrlimit='yes'}
|
||||||
|
ac_cv_func_getrusage=${ac_cv_func_getrusage='yes'}
|
||||||
|
ac_cv_func_getservbyname=${ac_cv_func_getservbyname='yes'}
|
||||||
|
ac_cv_func_gettext=${ac_cv_func_gettext='no'}
|
||||||
|
ac_cv_func_gettimeofday=${ac_cv_func_gettimeofday='yes'}
|
||||||
|
ac_cv_func_inet_aton=${ac_cv_func_inet_aton='yes'}
|
||||||
|
ac_cv_func_isascii=${ac_cv_func_isascii='yes'}
|
||||||
|
ac_cv_func_isblank=${ac_cv_func_isblank='no'}
|
||||||
|
ac_cv_func_isgraph=${ac_cv_func_isgraph='yes'}
|
||||||
|
ac_cv_func_isprint=${ac_cv_func_isprint='yes'}
|
||||||
|
ac_cv_func_isspace=${ac_cv_func_isspace='yes'}
|
||||||
|
ac_cv_func_isxdigit=${ac_cv_func_isxdigit='yes'}
|
||||||
|
ac_cv_func_killpg=${ac_cv_func_killpg='yes'}
|
||||||
|
ac_cv_func_lstat=${ac_cv_func_lstat='yes'}
|
||||||
|
ac_cv_func_memmove=${ac_cv_func_memmove='yes'}
|
||||||
|
ac_cv_func_mkfifo=${ac_cv_func_mkfifo='yes'}
|
||||||
|
ac_cv_func_pathconf=${ac_cv_func_pathconf='yes'}
|
||||||
|
ac_cv_func_putenv=${ac_cv_func_putenv='yes'}
|
||||||
|
ac_cv_func_readlink=${ac_cv_func_readlink='yes'}
|
||||||
|
ac_cv_func_rename=${ac_cv_func_rename='yes'}
|
||||||
|
ac_cv_func_sbrk=${ac_cv_func_sbrk='yes'}
|
||||||
|
ac_cv_func_select=${ac_cv_func_select='yes'}
|
||||||
|
ac_cv_func_setdtablesize=${ac_cv_func_setdtablesize='yes'}
|
||||||
|
ac_cv_func_setenv=${ac_cv_func_setenv='yes'}
|
||||||
|
ac_cv_func_setlinebuf=${ac_cv_func_setlinebuf='no'}
|
||||||
|
ac_cv_func_setlocale=${ac_cv_func_setlocale='yes'}
|
||||||
|
ac_cv_func_setvbuf=${ac_cv_func_setvbuf='yes'}
|
||||||
ac_cv_func_setvbuf_reversed=${ac_cv_func_setvbuf_reversed='no'}
|
ac_cv_func_setvbuf_reversed=${ac_cv_func_setvbuf_reversed='no'}
|
||||||
# on CYGWIN32, system calls do not restart
|
ac_cv_func_siginterrupt=${ac_cv_func_siginterrupt='no'}
|
||||||
ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
|
ac_cv_func_snprintf=${ac_cv_func_snprintf='yes'}
|
||||||
bash_cv_sys_restartable_syscalls=${bash_cv_sys_restartable_syscalls='no'}
|
ac_cv_func_strcasecmp=${ac_cv_func_strcasecmp='yes'}
|
||||||
|
ac_cv_func_strchr=${ac_cv_func_strchr='yes'}
|
||||||
# these may be necessary, but they are currently commented out
|
ac_cv_func_strcoll_works=${ac_cv_func_strcoll_works='yes'}
|
||||||
#ac_cv_c_bigendian=${ac_cv_c_bigendian='no'}
|
ac_cv_func_strerror=${ac_cv_func_strerror='yes'}
|
||||||
|
ac_cv_func_strpbrk=${ac_cv_func_strpbrk='yes'}
|
||||||
|
ac_cv_func_strtod=${ac_cv_func_strtod='yes'}
|
||||||
|
ac_cv_func_strtoimax=${ac_cv_func_strtoimax='no'}
|
||||||
|
ac_cv_func_strtol=${ac_cv_func_strtol='yes'}
|
||||||
|
ac_cv_func_strtoll=${ac_cv_func_strtoll='no'}
|
||||||
|
ac_cv_func_strtoul=${ac_cv_func_strtoul='yes'}
|
||||||
|
ac_cv_func_strtoull=${ac_cv_func_strtoull='no'}
|
||||||
|
ac_cv_func_strtoumax=${ac_cv_func_strtoumax='no'}
|
||||||
|
ac_cv_func_sysconf=${ac_cv_func_sysconf='yes'}
|
||||||
|
ac_cv_func_tcgetattr=${ac_cv_func_tcgetattr='yes'}
|
||||||
|
ac_cv_func_tcgetpgrp=${ac_cv_func_tcgetpgrp='yes'}
|
||||||
|
ac_cv_func_textdomain=${ac_cv_func_textdomain='no'}
|
||||||
|
ac_cv_func_times=${ac_cv_func_times='yes'}
|
||||||
|
ac_cv_func_ttyname=${ac_cv_func_ttyname='yes'}
|
||||||
|
ac_cv_func_tzset=${ac_cv_func_tzset='yes'}
|
||||||
|
ac_cv_func_ulimit=${ac_cv_func_ulimit='no'}
|
||||||
|
ac_cv_func_uname=${ac_cv_func_uname='yes'}
|
||||||
|
ac_cv_func_vasprintf=${ac_cv_func_vasprintf='no'}
|
||||||
|
ac_cv_func_vprintf=${ac_cv_func_vprintf='yes'}
|
||||||
|
ac_cv_func_vsnprintf=${ac_cv_func_vsnprintf='yes'}
|
||||||
|
ac_cv_func_wait3=${ac_cv_func_wait3='yes'}
|
||||||
|
ac_cv_func_waitpid=${ac_cv_func_waitpid='yes'}
|
||||||
|
ac_cv_have_decl_confstr=${ac_cv_have_decl_confstr='no'}
|
||||||
|
ac_cv_have_decl_printf=${ac_cv_have_decl_printf='yes'}
|
||||||
|
ac_cv_have_decl_sbrk=${ac_cv_have_decl_sbrk='yes'}
|
||||||
|
ac_cv_have_decl_strsignal=${ac_cv_have_decl_strsignal='yes'}
|
||||||
|
ac_cv_have_decl_strtold=${ac_cv_have_decl_strtold='no'}
|
||||||
|
ac_cv_header_arpa_inet_h=${ac_cv_header_arpa_inet_h='yes'}
|
||||||
|
ac_cv_header_dirent_dirent_h=${ac_cv_header_dirent_dirent_h='yes'}
|
||||||
|
ac_cv_header_dlfcn_h=${ac_cv_header_dlfcn_h='yes'}
|
||||||
|
ac_cv_header_grp_h=${ac_cv_header_grp_h='yes'}
|
||||||
|
ac_cv_header_inttypes_h=${ac_cv_header_inttypes_h='no'}
|
||||||
|
ac_cv_header_libintl_h=${ac_cv_header_libintl_h='yes'}
|
||||||
|
ac_cv_header_limits_h=${ac_cv_header_limits_h='yes'}
|
||||||
|
ac_cv_header_locale_h=${ac_cv_header_locale_h='yes'}
|
||||||
|
ac_cv_header_memory_h=${ac_cv_header_memory_h='yes'}
|
||||||
|
ac_cv_header_minix_config_h=${ac_cv_header_minix_config_h='no'}
|
||||||
|
ac_cv_header_netdb_h=${ac_cv_header_netdb_h='yes'}
|
||||||
|
ac_cv_header_netinet_in_h=${ac_cv_header_netinet_in_h='yes'}
|
||||||
|
ac_cv_header_stat_broken=${ac_cv_header_stat_broken='no'}
|
||||||
|
ac_cv_header_stdarg_h=${ac_cv_header_stdarg_h='yes'}
|
||||||
|
ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
|
||||||
|
ac_cv_header_stddef_h=${ac_cv_header_stddef_h='yes'}
|
||||||
|
ac_cv_header_stdint_h=${ac_cv_header_stdint_h='no'}
|
||||||
|
ac_cv_header_stdlib_h=${ac_cv_header_stdlib_h='yes'}
|
||||||
|
ac_cv_header_string_h=${ac_cv_header_string_h='yes'}
|
||||||
|
ac_cv_header_strings_h=${ac_cv_header_strings_h='yes'}
|
||||||
|
ac_cv_header_sys_file_h=${ac_cv_header_sys_file_h='yes'}
|
||||||
|
ac_cv_header_sys_param_h=${ac_cv_header_sys_param_h='yes'}
|
||||||
|
ac_cv_header_sys_pte_h=${ac_cv_header_sys_pte_h='no'}
|
||||||
|
ac_cv_header_sys_ptem_h=${ac_cv_header_sys_ptem_h='no'}
|
||||||
|
ac_cv_header_sys_resource_h=${ac_cv_header_sys_resource_h='yes'}
|
||||||
|
ac_cv_header_sys_select_h=${ac_cv_header_sys_select_h='yes'}
|
||||||
|
ac_cv_header_sys_socket_h=${ac_cv_header_sys_socket_h='yes'}
|
||||||
|
ac_cv_header_sys_stat_h=${ac_cv_header_sys_stat_h='yes'}
|
||||||
|
ac_cv_header_sys_stream_h=${ac_cv_header_sys_stream_h='no'}
|
||||||
|
ac_cv_header_sys_time_h=${ac_cv_header_sys_time_h='yes'}
|
||||||
|
ac_cv_header_sys_times_h=${ac_cv_header_sys_times_h='yes'}
|
||||||
|
ac_cv_header_sys_types_h=${ac_cv_header_sys_types_h='yes'}
|
||||||
|
ac_cv_header_sys_wait_h=${ac_cv_header_sys_wait_h='yes'}
|
||||||
|
ac_cv_header_termcap_h=${ac_cv_header_termcap_h='yes'}
|
||||||
|
ac_cv_header_termio_h=${ac_cv_header_termio_h='yes'}
|
||||||
|
ac_cv_header_termios_h=${ac_cv_header_termios_h='yes'}
|
||||||
|
ac_cv_header_time=${ac_cv_header_time='yes'}
|
||||||
|
ac_cv_header_unistd_h=${ac_cv_header_unistd_h='yes'}
|
||||||
|
ac_cv_header_varargs_h=${ac_cv_header_varargs_h='yes'}
|
||||||
|
ac_cv_host=${ac_cv_host='i686-pc-cygwin'}
|
||||||
|
ac_cv_host_alias=${ac_cv_host_alias='i686-pc-cygwin'}
|
||||||
|
ac_cv_lib_dir_opendir=${ac_cv_lib_dir_opendir='no'}
|
||||||
|
ac_cv_lib_dl_dlopen=${ac_cv_lib_dl_dlopen='no'}
|
||||||
|
ac_cv_lib_intl_bindtextdomain=${ac_cv_lib_intl_bindtextdomain='yes'}
|
||||||
|
ac_cv_lib_termcap_tgetent=${ac_cv_lib_termcap_tgetent='yes'}
|
||||||
|
ac_cv_member_struct_stat_st_blocks=${ac_cv_member_struct_stat_st_blocks='yes'}
|
||||||
|
ac_cv_member_struct_termio_c_line=${ac_cv_member_struct_termio_c_line='yes'}
|
||||||
|
ac_cv_member_struct_termios_c_line=${ac_cv_member_struct_termios_c_line='yes'}
|
||||||
|
ac_cv_objext=${ac_cv_objext='o'}
|
||||||
|
ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'}
|
||||||
|
ac_cv_prog_AR=${ac_cv_prog_AR='ar'}
|
||||||
|
ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
|
||||||
|
ac_cv_prog_YACC=${ac_cv_prog_YACC='bison -y'}
|
||||||
|
ac_cv_prog_ac_ct_CC=${ac_cv_prog_ac_ct_CC='gcc'}
|
||||||
|
ac_cv_prog_ac_ct_RANLIB=${ac_cv_prog_ac_ct_RANLIB='ranlib'}
|
||||||
|
ac_cv_prog_cc_g=${ac_cv_prog_cc_g='yes'}
|
||||||
|
ac_cv_prog_cc_stdc=${ac_cv_prog_cc_stdc=''}
|
||||||
|
ac_cv_prog_gcc_traditional=${ac_cv_prog_gcc_traditional='no'}
|
||||||
|
ac_cv_prog_make_make_set=${ac_cv_prog_make_make_set='yes'}
|
||||||
|
ac_cv_sizeof_char=${ac_cv_sizeof_char='1'}
|
||||||
ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p='4'}
|
ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p='4'}
|
||||||
|
ac_cv_sizeof_double=${ac_cv_sizeof_double='8'}
|
||||||
ac_cv_sizeof_int=${ac_cv_sizeof_int='4'}
|
ac_cv_sizeof_int=${ac_cv_sizeof_int='4'}
|
||||||
ac_cv_sizeof_long=${ac_cv_sizeof_long='4'}
|
ac_cv_sizeof_long=${ac_cv_sizeof_long='4'}
|
||||||
ac_cv_sizeof_double=${ac_cv_sizeof_double='8'}
|
ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long='8'}
|
||||||
|
ac_cv_sizeof_short=${ac_cv_sizeof_short='2'}
|
||||||
bash_cv_dup2_broken=${bash_cv_dup2_broken='no'}
|
ac_cv_sys_file_offset_bits=${ac_cv_sys_file_offset_bits='no'}
|
||||||
bash_cv_pgrp_pipe=${bash_cv_pgrp_pipe='no'}
|
ac_cv_sys_interpreter=${ac_cv_sys_interpreter='yes'}
|
||||||
bash_cv_type_rlimit=${bash_cv_type_rlimit='long'}
|
ac_cv_sys_large_files=${ac_cv_sys_large_files='no'}
|
||||||
bash_cv_decl_under_sys_siglist=${bash_cv_decl_under_sys_siglist='no'}
|
ac_cv_sys_largefile_CC=${ac_cv_sys_largefile_CC='no'}
|
||||||
bash_cv_under_sys_siglist=${bash_cv_under_sys_siglist='no'}
|
ac_cv_sys_posix_termios=${ac_cv_sys_posix_termios='yes'}
|
||||||
bash_cv_sys_siglist=${bash_cv_sys_siglist='no'}
|
ac_cv_sys_tiocgwinsz_in_termios_h=${ac_cv_sys_tiocgwinsz_in_termios_h='yes'}
|
||||||
bash_cv_opendir_not_robust=${bash_cv_opendir_not_robust='no'}
|
ac_cv_type_bits16_t=${ac_cv_type_bits16_t='no'}
|
||||||
bash_cv_getenv_redef=${bash_cv_getenv_redef='yes'}
|
ac_cv_type_bits32_t=${ac_cv_type_bits32_t='no'}
|
||||||
bash_cv_printf_declared=${bash_cv_printf_declared='yes'}
|
|
||||||
bash_cv_ulimit_maxfds=${bash_cv_ulimit_maxfds='no'}
|
|
||||||
bash_cv_getcwd_calls_popen=${bash_cv_getcwd_calls_popen='no'}
|
|
||||||
bash_cv_must_reinstall_sighandlers=${bash_cv_must_reinstall_sighandlers='no'}
|
|
||||||
bash_cv_job_control_missing=${bash_cv_job_control_missing='present'}
|
|
||||||
bash_cv_sys_named_pipes=${bash_cv_sys_named_pipes='missing'}
|
|
||||||
bash_cv_func_sigsetjmp=${bash_cv_func_sigsetjmp='missing'}
|
|
||||||
bash_cv_mail_dir=${bash_cv_mail_dir='unknown'}
|
|
||||||
bash_cv_func_strcoll_broken=${bash_cv_func_strcoll_broken='no'}
|
|
||||||
|
|
||||||
bash_cv_type_int32_t=${bash_cv_type_int32_t='int'}
|
|
||||||
bash_cv_type_u_int32_t=${bash_cv_type_u_int32_t='int'}
|
|
||||||
|
|
||||||
ac_cv_type_bits64_t=${ac_cv_type_bits64_t='no'}
|
ac_cv_type_bits64_t=${ac_cv_type_bits64_t='no'}
|
||||||
|
ac_cv_type_char=${ac_cv_type_char='yes'}
|
||||||
|
ac_cv_type_char_p=${ac_cv_type_char_p='yes'}
|
||||||
|
ac_cv_type_double=${ac_cv_type_double='yes'}
|
||||||
|
ac_cv_type_getgroups=${ac_cv_type_getgroups='gid_t'}
|
||||||
|
ac_cv_type_int=${ac_cv_type_int='yes'}
|
||||||
|
ac_cv_type_long=${ac_cv_type_long='yes'}
|
||||||
|
ac_cv_type_long_long=${ac_cv_type_long_long='yes'}
|
||||||
|
ac_cv_type_mode_t=${ac_cv_type_mode_t='yes'}
|
||||||
|
ac_cv_type_off_t=${ac_cv_type_off_t='yes'}
|
||||||
|
ac_cv_type_pid_t=${ac_cv_type_pid_t='yes'}
|
||||||
|
ac_cv_type_ptrdiff_t=${ac_cv_type_ptrdiff_t='yes'}
|
||||||
|
ac_cv_type_short=${ac_cv_type_short='yes'}
|
||||||
|
ac_cv_type_signal=${ac_cv_type_signal='void'}
|
||||||
|
ac_cv_type_size_t=${ac_cv_type_size_t='yes'}
|
||||||
|
ac_cv_type_ssize_t=${ac_cv_type_ssize_t='yes'}
|
||||||
|
ac_cv_type_time_t=${ac_cv_type_time_t='yes'}
|
||||||
|
ac_cv_type_u_bits16_t=${ac_cv_type_u_bits16_t='no'}
|
||||||
|
ac_cv_type_u_bits32_t=${ac_cv_type_u_bits32_t='no'}
|
||||||
|
ac_cv_type_u_int=${ac_cv_type_u_int='yes'}
|
||||||
|
ac_cv_type_u_long=${ac_cv_type_u_long='yes'}
|
||||||
|
ac_cv_type_uid_t=${ac_cv_type_uid_t='yes'}
|
||||||
|
ac_cv_working_alloca_h=${ac_cv_working_alloca_h='no'}
|
||||||
|
|
||||||
# end of cross-build/cygwin32.cache
|
bash_cv_decl_strtoimax=${bash_cv_decl_strtoimax='no'}
|
||||||
|
bash_cv_decl_strtol=${bash_cv_decl_strtol='yes'}
|
||||||
|
bash_cv_decl_strtoll=${bash_cv_decl_strtoll='no'}
|
||||||
|
bash_cv_decl_strtoul=${bash_cv_decl_strtoul='yes'}
|
||||||
|
bash_cv_decl_strtoull=${bash_cv_decl_strtoull='no'}
|
||||||
|
bash_cv_decl_strtoumax=${bash_cv_decl_strtoumax='no'}
|
||||||
|
bash_cv_decl_under_sys_siglist=${bash_cv_decl_under_sys_siglist='no'}
|
||||||
|
bash_cv_dev_fd=${bash_cv_dev_fd='absent'}
|
||||||
|
bash_cv_dev_stdin=${bash_cv_dev_stdin='absent'}
|
||||||
|
bash_cv_dirent_has_d_fileno=${bash_cv_dirent_has_d_fileno='no'}
|
||||||
|
bash_cv_dirent_has_dino=${bash_cv_dirent_has_dino='yes'}
|
||||||
|
bash_cv_dup2_broken=${bash_cv_dup2_broken='no'}
|
||||||
|
bash_cv_fionread_in_ioctl=${bash_cv_fionread_in_ioctl='no'}
|
||||||
|
bash_cv_func_sigsetjmp=${bash_cv_func_sigsetjmp='present'}
|
||||||
|
bash_cv_func_strcoll_broken=${bash_cv_func_strcoll_broken='no'}
|
||||||
|
bash_cv_getenv_redef=${bash_cv_getenv_redef='yes'}
|
||||||
|
bash_cv_getpw_declared=${bash_cv_getpw_declared='yes'}
|
||||||
|
bash_cv_have_strsignal=${bash_cv_have_strsignal='yes'}
|
||||||
|
bash_cv_job_control_missing=${bash_cv_job_control_missing='present'}
|
||||||
|
bash_cv_mail_dir=${bash_cv_mail_dir='unknown'}
|
||||||
|
bash_cv_must_reinstall_sighandlers=${bash_cv_must_reinstall_sighandlers='no'}
|
||||||
|
bash_cv_opendir_not_robust=${bash_cv_opendir_not_robust='no'}
|
||||||
|
bash_cv_pgrp_pipe=${bash_cv_pgrp_pipe='no'}
|
||||||
|
bash_cv_printf_a_format=${bash_cv_printf_a_format='no'}
|
||||||
|
bash_cv_signal_vintage=${bash_cv_signal_vintage='posix'}
|
||||||
|
bash_cv_speed_t_in_sys_types=${bash_cv_speed_t_in_sys_types='no'}
|
||||||
|
bash_cv_struct_timeval=${bash_cv_struct_timeval='yes'}
|
||||||
|
bash_cv_struct_winsize_header=${bash_cv_struct_winsize_header='termios_h'}
|
||||||
|
bash_cv_sys_errlist=${bash_cv_sys_errlist='no'}
|
||||||
|
bash_cv_sys_named_pipes=${bash_cv_sys_named_pipes='present'}
|
||||||
|
bash_cv_sys_siglist=${bash_cv_sys_siglist='no'}
|
||||||
|
bash_cv_termcap_lib=${bash_cv_termcap_lib='libtermcap'}
|
||||||
|
bash_cv_tiocstat_in_ioctl=${bash_cv_tiocstat_in_ioctl='no'}
|
||||||
|
bash_cv_type_clock_t=${bash_cv_type_clock_t='yes'}
|
||||||
|
bash_cv_type_intmax_t=${bash_cv_type_intmax_t='no'}
|
||||||
|
bash_cv_type_long_long=${bash_cv_type_long_long='long long'}
|
||||||
|
bash_cv_type_quad_t=${bash_cv_type_quad_t='no'}
|
||||||
|
bash_cv_type_rlimit=${bash_cv_type_rlimit='rlim_t'}
|
||||||
|
bash_cv_type_sigset_t=${bash_cv_type_sigset_t='yes'}
|
||||||
|
bash_cv_type_socklen_t=${bash_cv_type_socklen_t='no'}
|
||||||
|
bash_cv_type_uintmax_t=${bash_cv_type_uintmax_t='no'}
|
||||||
|
bash_cv_type_unsigned_long_long=${bash_cv_type_unsigned_long_long='unsigned long long'}
|
||||||
|
bash_cv_ulimit_maxfds=${bash_cv_ulimit_maxfds='no'}
|
||||||
|
bash_cv_under_sys_siglist=${bash_cv_under_sys_siglist='no'}
|
||||||
|
bash_cv_unusable_rtsigs=${bash_cv_unusable_rtsigs='no'}
|
||||||
|
bash_cv_void_sighandler=${bash_cv_void_sighandler='yes'}
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,7 @@ ac_cv_lib_dir_opendir=${ac_cv_lib_dir_opendir=no}
|
||||||
ac_cv_lib_dl_dlopen=${ac_cv_lib_dl_dlopen=no}
|
ac_cv_lib_dl_dlopen=${ac_cv_lib_dl_dlopen=no}
|
||||||
ac_cv_lib_intl_bindtextdomain=${ac_cv_lib_intl_bindtextdomain=no}
|
ac_cv_lib_intl_bindtextdomain=${ac_cv_lib_intl_bindtextdomain=no}
|
||||||
ac_cv_lib_termcap_tgetent=${ac_cv_lib_termcap_tgetent=yes}
|
ac_cv_lib_termcap_tgetent=${ac_cv_lib_termcap_tgetent=yes}
|
||||||
ac_cv_path_install=${ac_cv_path_install='//C/OpenNT21b3/bin/install -c'}
|
ac_cv_path_install=${ac_cv_path_install='$INTERIX_ROOT/bin/install -c'}
|
||||||
ac_cv_prog_AR=${ac_cv_prog_AR=ar}
|
ac_cv_prog_AR=${ac_cv_prog_AR=ar}
|
||||||
ac_cv_prog_CC=${ac_cv_prog_CC=gcc}
|
ac_cv_prog_CC=${ac_cv_prog_CC=gcc}
|
||||||
ac_cv_prog_CPP=${ac_cv_prog_CPP='cc -E'}
|
ac_cv_prog_CPP=${ac_cv_prog_CPP='cc -E'}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/* This file is used when cross-compiling for the CYGWIN32 environment on
|
/* This file is used when cross-compiling for the CYGWIN32 environment on
|
||||||
a Unix machine. */
|
a Unix machine. It gets copied to signames.h in the build directory. */
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
labelled initializers to set up the array. Note that some entries
|
labelled initializers to set up the array. Note that some entries
|
||||||
might wind up being NULL. */
|
might wind up being NULL. */
|
||||||
|
|
||||||
char *signal_names[NSIG + 2] = {
|
char *signal_names[NSIG + 3] = {
|
||||||
[0] "EXIT",
|
[0] "EXIT",
|
||||||
|
|
||||||
#ifdef SIGLOST
|
#ifdef SIGLOST
|
||||||
|
|
@ -250,5 +250,7 @@ char *signal_names[NSIG + 2] = {
|
||||||
|
|
||||||
[NSIG] "DEBUG",
|
[NSIG] "DEBUG",
|
||||||
|
|
||||||
[NSIG + 1] (char *)0x0
|
[NSIG + 1] "ERR",
|
||||||
|
|
||||||
|
[NSIG + 2] (char *)0x0
|
||||||
};
|
};
|
||||||
|
|
|
||||||
229
doc/FAQ
229
doc/FAQ
|
|
@ -1,4 +1,4 @@
|
||||||
This is the Bash FAQ, version 3.11, for Bash version 2.05.
|
This is the Bash FAQ, version 3.17, for Bash version 2.05a.
|
||||||
|
|
||||||
This document contains a set of frequently-asked questions concerning
|
This document contains a set of frequently-asked questions concerning
|
||||||
Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
|
Bash, the GNU Bourne-Again Shell. Bash is a freely-available command
|
||||||
|
|
@ -36,8 +36,8 @@ A10) What is the bash `posix mode'?
|
||||||
|
|
||||||
Section B: The latest version
|
Section B: The latest version
|
||||||
|
|
||||||
B1) What's new in version 2.05?
|
B1) What's new in version 2.05a?
|
||||||
B2) Are there any user-visible incompatibilities between bash-2.05 and
|
B2) Are there any user-visible incompatibilities between bash-2.05a and
|
||||||
bash-1.14.7?
|
bash-1.14.7?
|
||||||
|
|
||||||
Section C: Differences from other Unix shells
|
Section C: Differences from other Unix shells
|
||||||
|
|
@ -134,22 +134,23 @@ of Case Western Reserve University.
|
||||||
|
|
||||||
A2) What's the latest version?
|
A2) What's the latest version?
|
||||||
|
|
||||||
The latest version is 2.05, first made available on Monday, 9 April 2001.
|
The latest version is 2.05a, first made available on Thursday, 15
|
||||||
|
November, 2001.
|
||||||
|
|
||||||
A3) Where can I get it?
|
A3) Where can I get it?
|
||||||
|
|
||||||
Bash is the GNU project's shell, and so is available from the
|
Bash is the GNU project's shell, and so is available from the
|
||||||
master GNU archive site, ftp.gnu.org, and its mirrors. The
|
master GNU archive site, ftp.gnu.org, and its mirrors. The
|
||||||
latest version is also available for FTP from ftp.cwru.edu.
|
latest version is also available for FTP from ftp.cwru.edu.
|
||||||
The following URLs tell how to get version 2.05:
|
The following URLs tell how to get version 2.05a:
|
||||||
|
|
||||||
ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05.tar.gz
|
ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05a.tar.gz
|
||||||
ftp://ftp.cwru.edu/pub/bash/bash-2.05.tar.gz
|
ftp://ftp.cwru.edu/pub/bash/bash-2.05a.tar.gz
|
||||||
|
|
||||||
Formatted versions of the documentation are available with the URLs:
|
Formatted versions of the documentation are available with the URLs:
|
||||||
|
|
||||||
ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05.tar.gz
|
ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05a.tar.gz
|
||||||
ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05.tar.gz
|
ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05a.tar.gz
|
||||||
|
|
||||||
A4) On what machines will bash run?
|
A4) On what machines will bash run?
|
||||||
|
|
||||||
|
|
@ -161,13 +162,17 @@ itself accordingly, using a script created by GNU autoconf.
|
||||||
|
|
||||||
More information appears in the file `INSTALL' in the distribution.
|
More information appears in the file `INSTALL' in the distribution.
|
||||||
|
|
||||||
|
The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
|
||||||
|
explains how to obtain binary versions of bash for most of the major
|
||||||
|
commercial Unix systems.
|
||||||
|
|
||||||
A5) Will bash run on operating systems other than Unix?
|
A5) Will bash run on operating systems other than Unix?
|
||||||
|
|
||||||
Configuration specifics for Unix-like systems such as QNX and
|
Configuration specifics for Unix-like systems such as QNX and
|
||||||
LynxOS are included in the distribution. Bash-2.05 should
|
LynxOS are included in the distribution. Bash-2.05 and later
|
||||||
compile and run on Minix 2.0 (patches were contributed), but I
|
versions should compile and run on Minix 2.0 (patches were
|
||||||
don't believe anyone has built bash-2.x on earlier Minix versions
|
contributed), but I don't believe anyone has built bash-2.x on
|
||||||
yet.
|
earlier Minix versions yet.
|
||||||
|
|
||||||
Bash has been ported to versions of Windows implementing the Win32
|
Bash has been ported to versions of Windows implementing the Win32
|
||||||
programming interface. This includes Windows 95 and Windows NT.
|
programming interface. This includes Windows 95 and Windows NT.
|
||||||
|
|
@ -179,10 +184,10 @@ http://sourceware.cygnus.com/cygwin
|
||||||
|
|
||||||
Cygnus originally ported bash-1.14.7, and that port was part of their
|
Cygnus originally ported bash-1.14.7, and that port was part of their
|
||||||
early GNU-Win32 (the original name) releases. Cygnus has also done a
|
early GNU-Win32 (the original name) releases. Cygnus has also done a
|
||||||
port of bash-2.04 to the CYGWIN environment, and it is available as
|
port of bash-2.05 to the CYGWIN environment, and it is available as
|
||||||
part of their current release.
|
part of their current release.
|
||||||
|
|
||||||
Bash-2.05 should require no local Cygnus changes to build and run under
|
Bash-2.05a should require no local Cygnus changes to build and run under
|
||||||
CYGWIN.
|
CYGWIN.
|
||||||
|
|
||||||
The Cygnus port works only on Intel machines. There is a port of bash
|
The Cygnus port works only on Intel machines. There is a port of bash
|
||||||
|
|
@ -190,30 +195,21 @@ The Cygnus port works only on Intel machines. There is a port of bash
|
||||||
|
|
||||||
ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
|
ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
|
||||||
|
|
||||||
DJ Delorie has a port of bash-1.14.7 which runs under MS-DOS, as part
|
DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
|
||||||
of the DJGPP project. For more information on the project, see
|
of the DJGPP project. For more information on the project, see
|
||||||
|
|
||||||
http://www.delorie.com/djgpp/
|
http://www.delorie.com/djgpp/
|
||||||
|
|
||||||
I have been told that the original DJGPP port was done by Daisuke Aoyama.
|
I have been told that the original DJGPP port was done by Daisuke Aoyama.
|
||||||
|
|
||||||
I picked up a binary of bash-1.14.7 that is purported to work with
|
Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
|
||||||
the DJGPP V2 environment from
|
is available for DJGPP V2. The files are available as:
|
||||||
|
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh1147b.zip
|
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
|
||||||
|
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
|
||||||
|
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
|
||||||
|
|
||||||
The corresponding source is
|
Mark has begun to work with bash-2.05, but I don't know the status.
|
||||||
|
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh1147s.zip
|
|
||||||
|
|
||||||
Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.03
|
|
||||||
has become available for DJGPP V2. The files are available as:
|
|
||||||
|
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh203b.zip binary
|
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh203d.zip documentation
|
|
||||||
ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh203s.zip source
|
|
||||||
|
|
||||||
Mark has begun to work with bash-2.04.
|
|
||||||
|
|
||||||
Ports of bash-1.12 and bash-2.0 are available for OS/2 from
|
Ports of bash-1.12 and bash-2.0 are available for OS/2 from
|
||||||
|
|
||||||
|
|
@ -285,8 +281,9 @@ slightly different.
|
||||||
If you cannot change your login shell in the password file to bash, you
|
If you cannot change your login shell in the password file to bash, you
|
||||||
will have to (apparently) live with CDE using the shell in the password
|
will have to (apparently) live with CDE using the shell in the password
|
||||||
file to run its startup scripts. If you have changed your shell to bash,
|
file to run its startup scripts. If you have changed your shell to bash,
|
||||||
there is code in the CDE startup files (on Solaris, at least) to do the
|
there is code in the CDE startup files (on Solaris, at least) that attempts
|
||||||
right thing.
|
to do the right thing. It is, however, often broken, and may require that
|
||||||
|
you use the $BASH_ENV trick described below.
|
||||||
|
|
||||||
`dtterm' claims to use $SHELL as the default program to start, so if you
|
`dtterm' claims to use $SHELL as the default program to start, so if you
|
||||||
can change $SHELL in the CDE startup files, you should be able to use bash
|
can change $SHELL in the CDE startup files, you should be able to use bash
|
||||||
|
|
@ -304,6 +301,16 @@ CDE by testing the value of the DT variable:
|
||||||
[ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
|
[ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
If CDE starts its shells non-interactively during login, the login shell
|
||||||
|
startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
|
||||||
|
To get around this problem, append a line similar to the following to your
|
||||||
|
~/.dtprofile:
|
||||||
|
|
||||||
|
BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
|
||||||
|
|
||||||
|
and add the following line to the beginning of ~/.bash_profile:
|
||||||
|
|
||||||
|
unset BASH_ENV
|
||||||
|
|
||||||
A8) I just changed my login shell to bash, and now I can't FTP into my
|
A8) I just changed my login shell to bash, and now I can't FTP into my
|
||||||
machine. Why not?
|
machine. Why not?
|
||||||
|
|
@ -350,6 +357,12 @@ line editing. Only vi-style line editing commands have been
|
||||||
standardized; emacs editing commands were left out due to
|
standardized; emacs editing commands were left out due to
|
||||||
objections.
|
objections.
|
||||||
|
|
||||||
|
The Open Group has made an older version of its Single Unix
|
||||||
|
Specification (version 2), which is very similar to POSIX.2,
|
||||||
|
available on the web at
|
||||||
|
|
||||||
|
http://www.opengroup.org/onlinepubs/007908799/
|
||||||
|
|
||||||
A10) What is the bash `posix mode'?
|
A10) What is the bash `posix mode'?
|
||||||
|
|
||||||
Although bash is an implementation of the POSIX.2 shell
|
Although bash is an implementation of the POSIX.2 shell
|
||||||
|
|
@ -367,12 +380,48 @@ Reference Manual.
|
||||||
|
|
||||||
Section B: The latest version
|
Section B: The latest version
|
||||||
|
|
||||||
B1) What's new in version 2.05?
|
B1) What's new in version 2.05a?
|
||||||
|
|
||||||
Bash-2.05 contains the following new features (see the manual page for
|
The raison d'etre for bash-2.05a is to make an intermediate release
|
||||||
complete descriptions and the CHANGES and NEWS files in the bash-2.05
|
containing principally bug fixes (some very good work was done and
|
||||||
|
contributed after bash-2.05 was released) available before I start to
|
||||||
|
work on the major new features to be available in the next release
|
||||||
|
(bash-2.06 or bash-3.0 or whatever I tag it). As such, there are
|
||||||
|
only a few relatively minor new features.
|
||||||
|
|
||||||
|
Bash-2.05a contains the following new features (see the manual page for
|
||||||
|
complete descriptions and the CHANGES and NEWS files in the bash-2.05a
|
||||||
distribution):
|
distribution):
|
||||||
|
|
||||||
|
o The `printf' builtin has undergone major work
|
||||||
|
|
||||||
|
o There is a new read-only `shopt' option: login_shell, which is set by
|
||||||
|
login shells and unset otherwise
|
||||||
|
|
||||||
|
o New `\A' prompt string escape sequence; expanding to time in 24-hour
|
||||||
|
HH:MM format
|
||||||
|
|
||||||
|
o New `-A group/-g' option to complete and compgen; goes group name
|
||||||
|
completion
|
||||||
|
|
||||||
|
o New [+-]O invocation option to set and unset `shopt' options at startup
|
||||||
|
|
||||||
|
o ksh-like `ERR' trap
|
||||||
|
|
||||||
|
o `for' loops now allow empty word lists after the `in' reserved word
|
||||||
|
|
||||||
|
o new `hard' and `soft' arguments for the `ulimit' builtin
|
||||||
|
|
||||||
|
o Readline can be configured to place the user at the same point on the line
|
||||||
|
when retrieving commands from the history list
|
||||||
|
|
||||||
|
o Readline can be configured to skip `hidden' files (filenames with a leading
|
||||||
|
`.' on Unix) when performing completion
|
||||||
|
|
||||||
|
A short feature history dating from bash-2.0:
|
||||||
|
|
||||||
|
Bash-2.05 introduced the following new features:
|
||||||
|
|
||||||
o This version has once again reverted to using locales and strcoll(3) when
|
o This version has once again reverted to using locales and strcoll(3) when
|
||||||
processing pattern matching bracket expressions, as POSIX requires.
|
processing pattern matching bracket expressions, as POSIX requires.
|
||||||
o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
|
o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
|
||||||
|
|
@ -396,8 +445,6 @@ o When `set' is called without options, it prints function defintions in a
|
||||||
`declare -p' as well. This only happens when the shell is not in POSIX
|
`declare -p' as well. This only happens when the shell is not in POSIX
|
||||||
mode, since POSIX.2 forbids this behavior.
|
mode, since POSIX.2 forbids this behavior.
|
||||||
|
|
||||||
A short feature history dating from bash-2.0:
|
|
||||||
|
|
||||||
Bash-2.04 introduced the following new features:
|
Bash-2.04 introduced the following new features:
|
||||||
|
|
||||||
o Programmable word completion with the new `complete' and `compgen' builtins;
|
o Programmable word completion with the new `complete' and `compgen' builtins;
|
||||||
|
|
@ -523,11 +570,13 @@ grammar tighter and smaller (66 reduce-reduce conflicts gone)
|
||||||
lots of code now smaller and faster
|
lots of code now smaller and faster
|
||||||
test suite greatly expanded
|
test suite greatly expanded
|
||||||
|
|
||||||
B2) Are there any user-visible incompatibilities between bash-2.05 and
|
B2) Are there any user-visible incompatibilities between bash-2.05a and
|
||||||
bash-1.14.7?
|
bash-1.14.7?
|
||||||
|
|
||||||
There are a few incompatibilities between version 1.14.7 and version 2.05.
|
There are a few incompatibilities between version 1.14.7 and version 2.05a.
|
||||||
They are detailed in the file COMPAT in the bash-2.05 distribution.
|
They are detailed in the file COMPAT in the bash-2.05a distribution. That
|
||||||
|
file is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
|
||||||
|
if you find something that's not mentioned there.
|
||||||
|
|
||||||
Section C: Differences from other Unix shells
|
Section C: Differences from other Unix shells
|
||||||
|
|
||||||
|
|
@ -539,6 +588,7 @@ completely.
|
||||||
|
|
||||||
Things bash has that sh does not:
|
Things bash has that sh does not:
|
||||||
long invocation options
|
long invocation options
|
||||||
|
[+-]O invocation option
|
||||||
`!' reserved word to invert pipeline return value
|
`!' reserved word to invert pipeline return value
|
||||||
`time' reserved word to time pipelines and shell builtins
|
`time' reserved word to time pipelines and shell builtins
|
||||||
the `function' reserved word
|
the `function' reserved word
|
||||||
|
|
@ -564,13 +614,14 @@ Things bash has that sh does not:
|
||||||
SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
|
SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
|
||||||
auto_resume
|
auto_resume
|
||||||
DEBUG trap
|
DEBUG trap
|
||||||
|
ERR trap
|
||||||
variable arrays with new compound assignment syntax
|
variable arrays with new compound assignment syntax
|
||||||
redirections: <>, &>, >|
|
redirections: <>, &>, >|
|
||||||
prompt string special char translation and variable expansion
|
prompt string special char translation and variable expansion
|
||||||
auto-export of variables in initial environment
|
auto-export of variables in initial environment
|
||||||
command search finds functions before builtins
|
command search finds functions before builtins
|
||||||
bash return builtin will exit a file sourced with `.'
|
bash return builtin will exit a file sourced with `.'
|
||||||
builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -p.
|
builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -p/-t.
|
||||||
export -n/-f/-p/name=value, pwd -L/-P,
|
export -n/-f/-p/name=value, pwd -L/-P,
|
||||||
read -e/-p/-a/-t/-n/-d/-s,
|
read -e/-p/-a/-t/-n/-d/-s,
|
||||||
readonly -a/-f/name=value, trap -l, set +o,
|
readonly -a/-f/name=value, trap -l, set +o,
|
||||||
|
|
@ -638,6 +689,7 @@ C2) How does bash differ from the Korn shell, version ksh88?
|
||||||
|
|
||||||
Things bash has or uses that ksh88 does not:
|
Things bash has or uses that ksh88 does not:
|
||||||
long invocation options
|
long invocation options
|
||||||
|
[-+]O invocation option
|
||||||
`!' reserved word
|
`!' reserved word
|
||||||
arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
|
arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
|
||||||
posix mode and posix conformance
|
posix mode and posix conformance
|
||||||
|
|
@ -674,11 +726,11 @@ Things bash has or uses that ksh88 does not:
|
||||||
case-insensitive pattern matching and globbing
|
case-insensitive pattern matching and globbing
|
||||||
`**' arithmetic operator to do exponentiation
|
`**' arithmetic operator to do exponentiation
|
||||||
redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
|
redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
|
||||||
|
arrays of unlimited size
|
||||||
|
|
||||||
Things ksh88 has or uses that bash does not:
|
Things ksh88 has or uses that bash does not:
|
||||||
tracked aliases
|
tracked aliases (alias -t)
|
||||||
variables: ERRNO, FPATH, EDITOR, VISUAL
|
variables: ERRNO, FPATH, EDITOR, VISUAL
|
||||||
trap on ERR
|
|
||||||
co-processes (|&, >&p, <&p)
|
co-processes (|&, >&p, <&p)
|
||||||
weirdly-scoped functions
|
weirdly-scoped functions
|
||||||
typeset +f to list all function names without definitions
|
typeset +f to list all function names without definitions
|
||||||
|
|
@ -686,7 +738,10 @@ Things ksh88 has or uses that bash does not:
|
||||||
builtins: alias -x, cd old new, fc -e -, newgrp, print,
|
builtins: alias -x, cd old new, fc -e -, newgrp, print,
|
||||||
read -p/-s/-u/var?prompt, set -A/-o gmacs/
|
read -p/-s/-u/var?prompt, set -A/-o gmacs/
|
||||||
-o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
|
-o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
|
||||||
typeset -H/-L/-R/-A/-ft/-fu/-fx/-l/-u/-t, whence
|
typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
|
||||||
|
using environment to pass attributes of exported variables
|
||||||
|
arithmetic evaluation done on arguments to some builtins
|
||||||
|
reads .profile from $PWD when invoked as login shell
|
||||||
|
|
||||||
Implementation differences:
|
Implementation differences:
|
||||||
ksh runs last command of a pipeline in parent shell context
|
ksh runs last command of a pipeline in parent shell context
|
||||||
|
|
@ -694,12 +749,14 @@ Implementation differences:
|
||||||
bash has fixed startup file for all interactive shells; ksh reads $ENV
|
bash has fixed startup file for all interactive shells; ksh reads $ENV
|
||||||
bash has exported functions
|
bash has exported functions
|
||||||
bash command search finds functions before builtins
|
bash command search finds functions before builtins
|
||||||
|
bash waits for all commands in pipeline to exit before returning status
|
||||||
|
emacs-mode editing has some slightly different key bindings
|
||||||
|
|
||||||
C3) Which new features in ksh-93 are not in bash, and which are?
|
C3) Which new features in ksh-93 are not in bash, and which are?
|
||||||
|
|
||||||
New things in ksh-93 not in bash-2.05:
|
New things in ksh-93 not in bash-2.05a:
|
||||||
associative arrays
|
associative arrays
|
||||||
floating point arithmetic
|
floating point arithmetic and variables
|
||||||
math library functions
|
math library functions
|
||||||
${!name[sub]} name of subscript for associative array
|
${!name[sub]} name of subscript for associative array
|
||||||
`.' is allowed in variable names to create a hierarchical namespace
|
`.' is allowed in variable names to create a hierarchical namespace
|
||||||
|
|
@ -709,13 +766,24 @@ New things in ksh-93 not in bash-2.05:
|
||||||
typeset -n and `nameref' variables
|
typeset -n and `nameref' variables
|
||||||
KEYBD trap
|
KEYBD trap
|
||||||
variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
|
variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
|
||||||
.sh.name, .sh.subscript, .sh.value, HISTEDIT
|
.sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
|
||||||
backreferences in pattern matching
|
backreferences in pattern matching (\N)
|
||||||
|
`&' operator in pattern lists for matching
|
||||||
print -f (bash uses printf)
|
print -f (bash uses printf)
|
||||||
`fc' has been renamed to `hist'
|
`fc' has been renamed to `hist'
|
||||||
`.' can execute shell functions
|
`.' can execute shell functions
|
||||||
|
exit statuses between 0 and 255
|
||||||
|
set -o pipefail
|
||||||
|
`+=' variable assignment operator
|
||||||
|
TMOUT is default timeout for `read' and `select'
|
||||||
|
<&N- and >&N- redirections (combination dup and close)
|
||||||
|
FPATH and PATH mixing
|
||||||
|
getopts -a
|
||||||
|
-I invocation option
|
||||||
|
DEBUG trap now executed before each simple command, instead of after
|
||||||
|
printf %H, %P, %T, %Z modifiers, output base for %d
|
||||||
|
|
||||||
New things in ksh-93 present in bash-2.04:
|
New things in ksh-93 present in bash-2.05a:
|
||||||
for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
|
for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
|
||||||
?:, ++, --, `expr1 , expr2' arithmetic operators
|
?:, ++, --, `expr1 , expr2' arithmetic operators
|
||||||
expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
|
expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
|
||||||
|
|
@ -1041,6 +1109,16 @@ this.
|
||||||
This is the general approach -- in most cases you will not need to
|
This is the general approach -- in most cases you will not need to
|
||||||
set $IFS to a different value.
|
set $IFS to a different value.
|
||||||
|
|
||||||
|
Some other user-supplied alternatives include:
|
||||||
|
|
||||||
|
read A B C D << HERE
|
||||||
|
$(IFS=.; echo $(/usr/local/bin/ipaddr))
|
||||||
|
HERE
|
||||||
|
|
||||||
|
and, where process substitution is available,
|
||||||
|
|
||||||
|
read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
|
||||||
|
|
||||||
E5) I have a bunch of shell scripts that use backslash-escaped characters
|
E5) I have a bunch of shell scripts that use backslash-escaped characters
|
||||||
in arguments to `echo'. Bash doesn't interpret these characters. Why
|
in arguments to `echo'. Bash doesn't interpret these characters. Why
|
||||||
not, and how can I make it understand them?
|
not, and how can I make it understand them?
|
||||||
|
|
@ -1057,7 +1135,7 @@ them.
|
||||||
|
|
||||||
There is a configuration option that will make bash behave like
|
There is a configuration option that will make bash behave like
|
||||||
the System V echo and interpret things like `\t' by default. Run
|
the System V echo and interpret things like `\t' by default. Run
|
||||||
configure with the --enable-usg-echo-default option to turn this
|
configure with the --enable-xpg-echo-default option to turn this
|
||||||
on. Be aware that this will cause some of the tests run when you
|
on. Be aware that this will cause some of the tests run when you
|
||||||
type `make tests' to fail.
|
type `make tests' to fail.
|
||||||
|
|
||||||
|
|
@ -1101,11 +1179,12 @@ bash:
|
||||||
( cd $d && ${MAKE} ${MFLAGS} clean )
|
( cd $d && ${MAKE} ${MFLAGS} clean )
|
||||||
done
|
done
|
||||||
|
|
||||||
This is a syntax error. If the reserved word `in' is present, a word must
|
In versions of bash before bash-2.05a, this was a syntax error. If the
|
||||||
follow it before the semicolon or newline. The language in the manual page
|
reserved word `in' was present, a word must follow it before the semicolon
|
||||||
referring to the list of words being empty refers to the list after it is
|
or newline. The language in the manual page referring to the list of words
|
||||||
expanded. There must be at least one word following the `in' when the
|
being empty referred to the list after it is expanded. These versions of
|
||||||
construct is parsed.
|
bash required that there be at least one word following the `in' when the
|
||||||
|
construct was parsed.
|
||||||
|
|
||||||
The idiomatic Makefile solution is something like:
|
The idiomatic Makefile solution is something like:
|
||||||
|
|
||||||
|
|
@ -1116,11 +1195,9 @@ subdirs-clean:
|
||||||
( cd $$d && ${MAKE} ${MFLAGS} clean ) \
|
( cd $$d && ${MAKE} ${MFLAGS} clean ) \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
The latest drafts of the updated POSIX standard have changed this: the
|
||||||
The POSIX.2 interpretation committee has considered this issue and declared
|
word list is no longer required. Bash versions 2.05a and later accept
|
||||||
that the bash implemenation is correct, according to the standard:
|
the new syntax.
|
||||||
|
|
||||||
http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-169.html
|
|
||||||
|
|
||||||
E8) Why does the arithmetic evaluation code complain about `08'?
|
E8) Why does the arithmetic evaluation code complain about `08'?
|
||||||
|
|
||||||
|
|
@ -1143,11 +1220,12 @@ honoring the current locale setting when processing ranges within pattern
|
||||||
matching bracket expressions ([A-Z]). This is what POSIX.2 and SUSv2/XPG5
|
matching bracket expressions ([A-Z]). This is what POSIX.2 and SUSv2/XPG5
|
||||||
specify.
|
specify.
|
||||||
|
|
||||||
The behavior of the matcher in bash-2.05 depends on the current LC_COLLATE
|
The behavior of the matcher in bash-2.05 and later versions depends on the
|
||||||
setting. Setting this variable to `C' or `POSIX' will result in the
|
current LC_COLLATE setting. Setting this variable to `C' or `POSIX' will
|
||||||
traditional behavior ([A-Z] matches all uppercase ASCII characters).
|
result in the traditional behavior ([A-Z] matches all uppercase ASCII
|
||||||
Many other locales, including the en_US locale (the default on many US
|
characters). Many other locales, including the en_US locale (the default
|
||||||
versions of Linux) collate the upper and lower case letters like this:
|
on many US versions of Linux) collate the upper and lower case letters like
|
||||||
|
this:
|
||||||
|
|
||||||
AaBb...Zz
|
AaBb...Zz
|
||||||
|
|
||||||
|
|
@ -1279,7 +1357,7 @@ comp.unix.shell). While most commands of the form
|
||||||
can be converted to `< file command', shell control structures such as
|
can be converted to `< file command', shell control structures such as
|
||||||
loops and subshells require `command < file'.
|
loops and subshells require `command < file'.
|
||||||
|
|
||||||
The file CWRU/sh-redir-hack in the bash-2.05 distribution is an
|
The file CWRU/sh-redir-hack in the bash-2.05a distribution is an
|
||||||
(unofficial) patch to parse.y that will modify the grammar to
|
(unofficial) patch to parse.y that will modify the grammar to
|
||||||
support this construct. It will not apply with `patch'; you must
|
support this construct. It will not apply with `patch'; you must
|
||||||
modify parse.y by hand. Note that if you apply this, you must
|
modify parse.y by hand. Note that if you apply this, you must
|
||||||
|
|
@ -1396,6 +1474,9 @@ before `eval' is executed. In versions of bash later than bash-2.0,
|
||||||
|
|
||||||
does the same thing.
|
does the same thing.
|
||||||
|
|
||||||
|
This is not the same thing as ksh93 `nameref' variables, though the syntax
|
||||||
|
is similar. I may add namerefs in a future bash version.
|
||||||
|
|
||||||
G4) How can I make the bash `time' reserved word print timing output that
|
G4) How can I make the bash `time' reserved word print timing output that
|
||||||
looks like the output from my system's /usr/bin/time?
|
looks like the output from my system's /usr/bin/time?
|
||||||
|
|
||||||
|
|
@ -1524,14 +1605,14 @@ or on the web.
|
||||||
|
|
||||||
H3) What's coming in future versions?
|
H3) What's coming in future versions?
|
||||||
|
|
||||||
These are features I plan to include in a future version of bash.
|
These are features I hope to include in a future version of bash.
|
||||||
|
|
||||||
a bash debugger (a minimally-tested version is included with bash-2.05)
|
a better bash debugger (a minimally-tested version is included with bash-2.05a)
|
||||||
associative arrays
|
associative arrays
|
||||||
changes to the DEBUG trap to be compatible with ksh93 (which runs the
|
changes to the DEBUG trap to be compatible with ksh93 (which runs the
|
||||||
trap before each simple command, instead of after each one like previous
|
trap before each simple command, instead of after each one like previous
|
||||||
versions)
|
versions)
|
||||||
an implementation of the ksh-like ERR trap
|
co-processes, but with a new-style syntax that looks like function declaration
|
||||||
|
|
||||||
H4) What's on the bash `wish list' for future versions?
|
H4) What's on the bash `wish list' for future versions?
|
||||||
|
|
||||||
|
|
@ -1545,11 +1626,15 @@ date-stamped command history
|
||||||
a bash programmer's guide with a chapter on creating loadable builtins
|
a bash programmer's guide with a chapter on creating loadable builtins
|
||||||
a better loadable interface to perl with access to the shell builtins and
|
a better loadable interface to perl with access to the shell builtins and
|
||||||
variables (contributions gratefully accepted)
|
variables (contributions gratefully accepted)
|
||||||
|
ksh93-like `nameref' variables
|
||||||
|
ksh93-like `+=' variable assignment operator
|
||||||
|
ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
|
||||||
|
associated disipline functions
|
||||||
|
Some of the new ksh93 pattern matching operators, like backreferencing
|
||||||
|
|
||||||
H5) When will the next release appear?
|
H5) When will the next release appear?
|
||||||
|
|
||||||
The next version will appear sometime in 2001 or 2002. Never make
|
The next version will appear sometime in 2002. Never make predictions.
|
||||||
predictions.
|
|
||||||
|
|
||||||
|
|
||||||
This document is Copyright 1995-2001 by Chester Ramey.
|
This document is Copyright 1995-2001 by Chester Ramey.
|
||||||
|
|
|
||||||
101
doc/Makefile.in
101
doc/Makefile.in
|
|
@ -32,13 +32,16 @@ infodir = @infodir@
|
||||||
# set this to a directory name to have the HTML files installed
|
# set this to a directory name to have the HTML files installed
|
||||||
htmldir = @htmldir@
|
htmldir = @htmldir@
|
||||||
|
|
||||||
|
# Support an alternate destination root directory for package building
|
||||||
|
DESTDIR =
|
||||||
|
|
||||||
mandir = @mandir@
|
mandir = @mandir@
|
||||||
manpfx = man
|
manpfx = man
|
||||||
|
|
||||||
man1ext = 1
|
man1ext = .1
|
||||||
man1dir = $(mandir)/$(manpfx)$(man1ext)
|
man1dir = $(mandir)/$(manpfx)1
|
||||||
man3ext = 3
|
man3ext = .3
|
||||||
man3dir = $(mandir)/$(manpfx)$(man3ext)
|
man3dir = $(mandir)/$(manpfx)3
|
||||||
|
|
||||||
INSTALL = @INSTALL@
|
INSTALL = @INSTALL@
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
|
@ -167,6 +170,51 @@ article.ps: article.ms
|
||||||
$(MAN2HTML): ${topdir}/support/man2html.c
|
$(MAN2HTML): ${topdir}/support/man2html.c
|
||||||
-( cd ${BUILD_DIR}/support ; ${MAKE} ${MFLAGS} man2html)
|
-( cd ${BUILD_DIR}/support ; ${MAKE} ${MFLAGS} man2html)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \
|
||||||
|
*.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o
|
||||||
|
${RM} core *.core
|
||||||
|
|
||||||
|
distclean mostlyclean: clean
|
||||||
|
$(RM) Makefile
|
||||||
|
|
||||||
|
maintainer-clean: clean
|
||||||
|
${RM} ${PSFILES} ${DVIFILES} ${INFOFILES} ${MAN0FILES} ${HTMLFILES}
|
||||||
|
${RM} ${CREATED_FAQ}
|
||||||
|
$(RM) Makefile
|
||||||
|
|
||||||
|
installdirs:
|
||||||
|
-test -d $(man1dir) || $(SHELL) ${MKDIRS} $(DESTDIR)$(man1dir)
|
||||||
|
-test -d $(infodir) || $(SHELL) ${MKDIRS} $(DESTDIR)$(infodir)
|
||||||
|
-if test -n "$(htmldir)" ; then \
|
||||||
|
test -d $(htmldir) || $(SHELL) ${MKDIRS} $(DESTDIR)$(htmldir) ; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
install: info installdirs
|
||||||
|
-$(INSTALL_DATA) $(srcdir)/bash.1 $(DESTDIR)$(man1dir)/bash${man1ext}
|
||||||
|
-$(INSTALL_DATA) $(srcdir)/bashbug.1 $(DESTDIR)$(man1dir)/bashbug${man1ext}
|
||||||
|
# uncomment the next line to install the builtins man page
|
||||||
|
# -$(INSTALL_DATA) $(srcdir)/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
|
||||||
|
-$(INSTALL_DATA) $(srcdir)/bashref.info $(DESTDIR)$(infodir)/bash.info
|
||||||
|
# run install-info if it is present to update the info directory
|
||||||
|
if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
||||||
|
install-info --dir-file=$(DESTDIR)$(infodir)/dir $(DESTDIR)$(infodir)/bash.info; \
|
||||||
|
else true; fi
|
||||||
|
# if htmldir is set, install the html files into that directory
|
||||||
|
-if test -n "${htmldir}" ; then \
|
||||||
|
$(INSTALL_DATA) $(srcdir)/bash.html $(DESTDIR)$(htmldir) ; \
|
||||||
|
$(INSTALL_DATA) $(srcdir)/bashref.html $(DESTDIR)$(htmldir) ; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
uninstall:
|
||||||
|
-$(RM) $(DESTDIR)$(man1dir)/bash${man1ext} $(DESTDIR)$(man1dir)/bashbug${man1ext}
|
||||||
|
$(RM) $(DESTDIR)$(infodir)/bash.info
|
||||||
|
-if test -n "$(htmldir)" ; then \
|
||||||
|
$(RM) $(DESTDIR)$(htmldir)/bash.html ; \
|
||||||
|
$(RM) $(DESTDIR)$(htmldir)/bashref.html ; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# for use by chet
|
||||||
CREATED_FAQ = faq.news faq.news2 faq.mail faq.version
|
CREATED_FAQ = faq.news faq.news2 faq.mail faq.version
|
||||||
|
|
||||||
faq: ${CREATED_FAQ}
|
faq: ${CREATED_FAQ}
|
||||||
|
|
@ -195,51 +243,6 @@ faq.mail: FAQ faq.headers.mail faq.version
|
||||||
$(RM) $@
|
$(RM) $@
|
||||||
cat faq.headers.mail faq.version FAQ > $@
|
cat faq.headers.mail faq.version FAQ > $@
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \
|
|
||||||
*.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o
|
|
||||||
${RM} core *.core
|
|
||||||
|
|
||||||
distclean mostlyclean: clean
|
|
||||||
$(RM) Makefile
|
|
||||||
|
|
||||||
maintainer-clean: clean
|
|
||||||
${RM} ${PSFILES} ${DVIFILES} ${INFOFILES} ${MAN0FILES} ${HTMLFILES}
|
|
||||||
${RM} ${CREATED_FAQ}
|
|
||||||
$(RM) Makefile
|
|
||||||
|
|
||||||
installdirs:
|
|
||||||
-test -d $(man1dir) || $(SHELL) ${MKDIRS} $(man1dir)
|
|
||||||
-test -d $(infodir) || $(SHELL) ${MKDIRS} $(infodir)
|
|
||||||
-if [ -n "$(htmldir)" ]; then \
|
|
||||||
test -d $(htmldir) || $(SHELL) ${MKDIRS} $(htmldir) ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
install: info installdirs
|
|
||||||
-$(INSTALL_DATA) $(srcdir)/bash.1 $(man1dir)/bash.${man1ext}
|
|
||||||
-$(INSTALL_DATA) $(srcdir)/bashbug.1 $(man1dir)/bashbug.${man1ext}
|
|
||||||
# uncomment the next line to install the builtins man page
|
|
||||||
# $(INSTALL_DATA) $(srcdir)/builtins.1 $(man1dir)/bash_builtins.${man1ext}
|
|
||||||
-$(INSTALL_DATA) $(srcdir)/bashref.info $(infodir)/bash.info
|
|
||||||
# run install-info if it is present to update the info directory
|
|
||||||
if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
|
|
||||||
install-info --dir-file=$(infodir)/dir $(infodir)/bash.info; \
|
|
||||||
else true; fi
|
|
||||||
# if htmldir is set, install the html files into that directory
|
|
||||||
-if [ -n "${htmldir}" ]; then \
|
|
||||||
$(INSTALL_DATA) $(srcdir)/bash.html $(htmldir) ; \
|
|
||||||
$(INSTALL_DATA) $(srcdir)/bashref.html $(htmldir) ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
-$(RM) $(man1dir)/bash.${man1ext} $(man1dir)/bashbug.${man1ext}
|
|
||||||
$(RM) $(infodir)/bash.info
|
|
||||||
-if [ -n "$(htmldir)" ]; then \
|
|
||||||
$(RM) $(htmldir)/bash.html ; \
|
|
||||||
$(RM) $(htmldir)/bashref.html ; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
# for use by chet
|
|
||||||
inst: bashref.texi
|
inst: bashref.texi
|
||||||
$(SHELL) ./mkinstall
|
$(SHELL) ./mkinstall
|
||||||
cmp -s INSTALL ../INSTALL || mv INSTALL ../INSTALL
|
cmp -s INSTALL ../INSTALL || mv INSTALL ../INSTALL
|
||||||
|
|
|
||||||
1135
doc/bash.1
1135
doc/bash.1
File diff suppressed because it is too large
Load diff
622
doc/bashref.info
622
doc/bashref.info
File diff suppressed because it is too large
Load diff
295
doc/bashref.texi
295
doc/bashref.texi
|
|
@ -5,13 +5,13 @@
|
||||||
@c %**end of header
|
@c %**end of header
|
||||||
|
|
||||||
@ignore
|
@ignore
|
||||||
Last Change: Wed Mar 28 14:48:38 EST 2001
|
Last Change: Tue Nov 13 12:48:51 EST 2001
|
||||||
@end ignore
|
@end ignore
|
||||||
|
|
||||||
@set EDITION 2.5
|
@set EDITION 2.5a
|
||||||
@set VERSION 2.05
|
@set VERSION 2.05a
|
||||||
@set UPDATED 28 Mar 2001
|
@set UPDATED 13 November 2001
|
||||||
@set UPDATE-MONTH Mar 2001
|
@set UPDATE-MONTH November 2001
|
||||||
|
|
||||||
@iftex
|
@iftex
|
||||||
@finalout
|
@finalout
|
||||||
|
|
@ -36,7 +36,7 @@ This is Edition @value{EDITION}, last updated @value{UPDATED},
|
||||||
of @cite{The GNU Bash Reference Manual},
|
of @cite{The GNU Bash Reference Manual},
|
||||||
for @code{Bash}, Version @value{VERSION}.
|
for @code{Bash}, Version @value{VERSION}.
|
||||||
|
|
||||||
Copyright (C) 1991-1999 Free Software Foundation, Inc.
|
Copyright (C) 1991-2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of
|
Permission is granted to make and distribute verbatim copies of
|
||||||
this manual provided the copyright notice and this permission notice
|
this manual provided the copyright notice and this permission notice
|
||||||
|
|
@ -267,7 +267,8 @@ or one of the following:
|
||||||
|
|
||||||
@item exit status
|
@item exit status
|
||||||
@cindex exit status
|
@cindex exit status
|
||||||
The value returned by a command to its caller.
|
The value returned by a command to its caller. The value is restricted
|
||||||
|
to eight bits, so the maximum value is 255.
|
||||||
|
|
||||||
@item field
|
@item field
|
||||||
@cindex field
|
@cindex field
|
||||||
|
|
@ -542,11 +543,11 @@ backslash
|
||||||
@item \'
|
@item \'
|
||||||
single quote
|
single quote
|
||||||
@item \@var{nnn}
|
@item \@var{nnn}
|
||||||
the character whose @code{ASCII} code is the octal value @var{nnn}
|
the eight-bit character whose value is the octal value @var{nnn}
|
||||||
(one to three digits)
|
|
||||||
@item \x@var{nnn}
|
|
||||||
the character whose @code{ASCII} code is the hexadecimal value @var{nnn}
|
|
||||||
(one to three digits)
|
(one to three digits)
|
||||||
|
@item \x@var{HH}
|
||||||
|
the eight-bit character whose value is the hexadecimal value @var{HH}
|
||||||
|
(one or two hex digits)
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
|
|
@ -556,6 +557,9 @@ been present.
|
||||||
@node Locale Translation
|
@node Locale Translation
|
||||||
@subsubsection Locale-Specific Translation
|
@subsubsection Locale-Specific Translation
|
||||||
@cindex localization
|
@cindex localization
|
||||||
|
@cindex internationalization
|
||||||
|
@cindex native languages
|
||||||
|
@cindex translation, native languages
|
||||||
|
|
||||||
A double-quoted string preceded by a dollar sign (@samp{$}) will cause
|
A double-quoted string preceded by a dollar sign (@samp{$}) will cause
|
||||||
the string to be translated according to the current locale.
|
the string to be translated according to the current locale.
|
||||||
|
|
@ -564,12 +568,17 @@ is ignored.
|
||||||
If the string is translated and replaced, the replacement is
|
If the string is translated and replaced, the replacement is
|
||||||
double-quoted.
|
double-quoted.
|
||||||
|
|
||||||
|
@vindex LC_MESSAGES
|
||||||
|
@vindex TEXTDOMAIN
|
||||||
|
@vindex TEXTDOMAINDIR
|
||||||
Some systems use the message catalog selected by the @env{LC_MESSAGES}
|
Some systems use the message catalog selected by the @env{LC_MESSAGES}
|
||||||
shell variable. Others create the name of the message catalog from the
|
shell variable. Others create the name of the message catalog from the
|
||||||
value of the @env{TEXTDOMAIN} shell variable, possibly adding a
|
value of the @env{TEXTDOMAIN} shell variable, possibly adding a
|
||||||
suffix of @samp{.mo}. If you use the @env{TEXTDOMAIN} variable, you
|
suffix of @samp{.mo}. If you use the @env{TEXTDOMAIN} variable, you
|
||||||
may need to set the @env{TEXTDOMAINDIR} variable to the location of
|
may need to set the @env{TEXTDOMAINDIR} variable to the location of
|
||||||
the message catalog files.
|
the message catalog files. Still others use both variables in this
|
||||||
|
fashion:
|
||||||
|
@env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo.
|
||||||
|
|
||||||
@node Comments
|
@node Comments
|
||||||
@subsection Comments
|
@subsection Comments
|
||||||
|
|
@ -640,9 +649,9 @@ The format for a pipeline is
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
The output of each command in the pipeline is connected to the input of
|
The output of each command in the pipeline is connected via a pipe
|
||||||
the next command. That is, each command reads the previous command's
|
to the input of the next command.
|
||||||
output.
|
That is, each command reads the previous command's output.
|
||||||
|
|
||||||
The reserved word @code{time} causes timing statistics
|
The reserved word @code{time} causes timing statistics
|
||||||
to be printed for the pipeline once it finishes.
|
to be printed for the pipeline once it finishes.
|
||||||
|
|
@ -891,7 +900,7 @@ Any other value read causes @var{name} to be set to null.
|
||||||
The line read is saved in the variable @env{REPLY}.
|
The line read is saved in the variable @env{REPLY}.
|
||||||
|
|
||||||
The @var{commands} are executed after each selection until a
|
The @var{commands} are executed after each selection until a
|
||||||
@code{break} or @code{return} command is executed, at which
|
@code{break} command is executed, at which
|
||||||
point the @code{select} command completes.
|
point the @code{select} command completes.
|
||||||
|
|
||||||
Here is an example that allows the user to pick a filename from the
|
Here is an example that allows the user to pick a filename from the
|
||||||
|
|
@ -1063,7 +1072,7 @@ call. When a function completes, the values of the
|
||||||
positional parameters and the special parameter @samp{#}
|
positional parameters and the special parameter @samp{#}
|
||||||
are restored to the values they had prior to the function's
|
are restored to the values they had prior to the function's
|
||||||
execution. If a numeric argument is given to @code{return},
|
execution. If a numeric argument is given to @code{return},
|
||||||
that is the function's return status; otherwise the functions's
|
that is the function's return status; otherwise the function's
|
||||||
return status is the exit status of the last command executed
|
return status is the exit status of the last command executed
|
||||||
before the @code{return}.
|
before the @code{return}.
|
||||||
|
|
||||||
|
|
@ -1090,6 +1099,9 @@ It can be a @code{name}, a number, or one of the special characters
|
||||||
listed below.
|
listed below.
|
||||||
For the shell's purposes, a @var{variable} is a parameter denoted by a
|
For the shell's purposes, a @var{variable} is a parameter denoted by a
|
||||||
@code{name}.
|
@code{name}.
|
||||||
|
A variable has a @var{value} and zero or more @var{attributes}.
|
||||||
|
Attributes are assigned using the @code{declare} builtin command
|
||||||
|
(see the description of the @code{declare} builtin in @ref{Bash Builtins}).
|
||||||
|
|
||||||
A parameter is set if it has been assigned a value. The null string is
|
A parameter is set if it has been assigned a value. The null string is
|
||||||
a valid value. Once a variable is set, it may be unset only by using
|
a valid value. Once a variable is set, it may be unset only by using
|
||||||
|
|
@ -1105,13 +1117,15 @@ is not given, the variable is assigned the null string. All
|
||||||
@var{value}s undergo tilde expansion, parameter and variable expansion,
|
@var{value}s undergo tilde expansion, parameter and variable expansion,
|
||||||
command substitution, arithmetic expansion, and quote
|
command substitution, arithmetic expansion, and quote
|
||||||
removal (detailed below). If the variable has its @code{integer}
|
removal (detailed below). If the variable has its @code{integer}
|
||||||
attribute set (see the description of the @code{declare} builtin in
|
attribute set, then @var{value}
|
||||||
@ref{Bash Builtins}), then @var{value}
|
|
||||||
is subject to arithmetic expansion even if the @code{$((@dots{}))}
|
is subject to arithmetic expansion even if the @code{$((@dots{}))}
|
||||||
expansion is not used (@pxref{Arithmetic Expansion}).
|
expansion is not used (@pxref{Arithmetic Expansion}).
|
||||||
Word splitting is not performed, with the exception
|
Word splitting is not performed, with the exception
|
||||||
of @code{"$@@"} as explained below.
|
of @code{"$@@"} as explained below.
|
||||||
Filename expansion is not performed.
|
Filename expansion is not performed.
|
||||||
|
Assignment statements may also appear as arguments to the
|
||||||
|
@code{declare}, @code{typeset}, @code{export}, @code{readonly},
|
||||||
|
and @code{local} builtin commands.
|
||||||
|
|
||||||
@node Positional Parameters
|
@node Positional Parameters
|
||||||
@subsection Positional Parameters
|
@subsection Positional Parameters
|
||||||
|
|
@ -1870,13 +1884,13 @@ File descriptor 2 is duplicated.
|
||||||
|
|
||||||
@item /dev/tcp/@var{host}/@var{port}
|
@item /dev/tcp/@var{host}/@var{port}
|
||||||
If @var{host} is a valid hostname or Internet address, and @var{port}
|
If @var{host} is a valid hostname or Internet address, and @var{port}
|
||||||
is an integer port number, Bash attempts to open a TCP connection
|
is an integer port number or service name, Bash attempts to open a TCP
|
||||||
to the corresponding socket.
|
connection to the corresponding socket.
|
||||||
|
|
||||||
@item /dev/udp/@var{host}/@var{port}
|
@item /dev/udp/@var{host}/@var{port}
|
||||||
If @var{host} is a valid hostname or Internet address, and @var{port}
|
If @var{host} is a valid hostname or Internet address, and @var{port}
|
||||||
is an integer port number, Bash attempts to open a UDP connection
|
is an integer port number or service name, Bash attempts to open a UDP
|
||||||
to the corresponding socket.
|
connection to the corresponding socket.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
@ -2230,6 +2244,11 @@ commands that are invoked as part of a pipeline are also executed
|
||||||
in a subshell environment. Changes made to the subshell environment
|
in a subshell environment. Changes made to the subshell environment
|
||||||
cannot affect the shell's execution environment.
|
cannot affect the shell's execution environment.
|
||||||
|
|
||||||
|
If a command is followed by a @samp{&} and job control is not active, the
|
||||||
|
default standard input for the command is the empty file @file{/dev/null}.
|
||||||
|
Otherwise, the invoked command inherits the file descriptors of the calling
|
||||||
|
shell as modified by redirections.
|
||||||
|
|
||||||
@node Environment
|
@node Environment
|
||||||
@subsection Environment
|
@subsection Environment
|
||||||
@cindex environment
|
@cindex environment
|
||||||
|
|
@ -2319,8 +2338,8 @@ command substitution ignore the keyboard-generated job control signals
|
||||||
@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
|
@code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGTSTP}.
|
||||||
|
|
||||||
The shell exits by default upon receipt of a @code{SIGHUP}.
|
The shell exits by default upon receipt of a @code{SIGHUP}.
|
||||||
Before exiting, it resends the @code{SIGHUP} to all jobs, running
|
Before exiting, an interactive shell resends the @code{SIGHUP} to
|
||||||
or stopped.
|
all jobs, running or stopped.
|
||||||
Stopped jobs are sent @code{SIGCONT} to ensure that they receive
|
Stopped jobs are sent @code{SIGCONT} to ensure that they receive
|
||||||
the @code{SIGHUP}.
|
the @code{SIGHUP}.
|
||||||
To prevent the shell from sending the @code{SIGHUP} signal to a
|
To prevent the shell from sending the @code{SIGHUP} signal to a
|
||||||
|
|
@ -2351,7 +2370,11 @@ a file is used as the first non-option argument when invoking Bash,
|
||||||
and neither the @option{-c} nor @option{-s} option is supplied
|
and neither the @option{-c} nor @option{-s} option is supplied
|
||||||
(@pxref{Invoking Bash}),
|
(@pxref{Invoking Bash}),
|
||||||
Bash reads and executes commands from the file, then exits. This
|
Bash reads and executes commands from the file, then exits. This
|
||||||
mode of operation creates a non-interactive shell. When Bash runs
|
mode of operation creates a non-interactive shell. The shell first
|
||||||
|
searches for the file in the current directory, and looks in the
|
||||||
|
directories in @env{$PATH} if not found there.
|
||||||
|
|
||||||
|
When Bash runs
|
||||||
a shell script, it sets the special parameter @code{0} to the name
|
a shell script, it sets the special parameter @code{0} to the name
|
||||||
of the file, rather than the name of the shell, and the positional
|
of the file, rather than the name of the shell, and the positional
|
||||||
parameters are set to the remaining arguments, if any are given.
|
parameters are set to the remaining arguments, if any are given.
|
||||||
|
|
@ -2614,7 +2637,7 @@ If @code{getopts} is silent, then a colon (@samp{:}) is placed in
|
||||||
@item hash
|
@item hash
|
||||||
@btindex hash
|
@btindex hash
|
||||||
@example
|
@example
|
||||||
hash [-r] [-p @var{filename}] [@var{name}]
|
hash [-r] [-p @var{filename}] [-t] [@var{name}]
|
||||||
@end example
|
@end example
|
||||||
Remember the full pathnames of commands specified as @var{name} arguments,
|
Remember the full pathnames of commands specified as @var{name} arguments,
|
||||||
so they need not be searched for on subsequent invocations.
|
so they need not be searched for on subsequent invocations.
|
||||||
|
|
@ -2623,6 +2646,10 @@ The commands are found by searching through the directories listed in
|
||||||
The @option{-p} option inhibits the path search, and @var{filename} is
|
The @option{-p} option inhibits the path search, and @var{filename} is
|
||||||
used as the location of @var{name}.
|
used as the location of @var{name}.
|
||||||
The @option{-r} option causes the shell to forget all remembered locations.
|
The @option{-r} option causes the shell to forget all remembered locations.
|
||||||
|
If the @option{-t} option is supplied, the full pathname to which each
|
||||||
|
@var{name} corresponds is printed. If multiple @var{name} arguments are
|
||||||
|
supplied with @option{-t} the @var{name} is printed before the hashed
|
||||||
|
full pathname.
|
||||||
If no arguments are given, information about remembered commands is printed.
|
If no arguments are given, information about remembered commands is printed.
|
||||||
The return status is zero unless a @var{name} is not found or an invalid
|
The return status is zero unless a @var{name} is not found or an invalid
|
||||||
option is supplied.
|
option is supplied.
|
||||||
|
|
@ -2671,7 +2698,7 @@ This may also be used to terminate execution of a script being executed
|
||||||
with the @code{.} (or @code{source}) builtin, returning either @var{n} or
|
with the @code{.} (or @code{source}) builtin, returning either @var{n} or
|
||||||
the exit status of the last command executed within the script as the exit
|
the exit status of the last command executed within the script as the exit
|
||||||
status of the script.
|
status of the script.
|
||||||
The return status is false if @code{return} is used outside a function
|
The return status is non-zero if @code{return} is used outside a function
|
||||||
and not during the execution of a script by @code{.} or @code{source}.
|
and not during the execution of a script by @code{.} or @code{source}.
|
||||||
|
|
||||||
@item shift
|
@item shift
|
||||||
|
|
@ -2795,6 +2822,12 @@ If a @var{sigspec}
|
||||||
is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
|
is @code{0} or @code{EXIT}, @var{arg} is executed when the shell exits.
|
||||||
If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
|
If a @var{sigspec} is @code{DEBUG}, the command @var{arg} is executed
|
||||||
after every simple command.
|
after every simple command.
|
||||||
|
If a @var{sigspec} is @code{ERR}, the command @var{arg}
|
||||||
|
is executed whenever a simple command has a non-zero exit status.
|
||||||
|
The @code{ERR} trap is not executed if the failed command is part of an
|
||||||
|
@code{until} or @code{while} loop, part of an @code{if} statement,
|
||||||
|
part of a @code{&&} or @code{||} list, or if the command's return
|
||||||
|
status is being inverted using @code{!}.
|
||||||
The @option{-l} option causes the shell to print a list of signal names
|
The @option{-l} option causes the shell to print a list of signal names
|
||||||
and their corresponding numbers.
|
and their corresponding numbers.
|
||||||
|
|
||||||
|
|
@ -3074,11 +3107,11 @@ vertical tab
|
||||||
@item \\
|
@item \\
|
||||||
backslash
|
backslash
|
||||||
@item \@var{nnn}
|
@item \@var{nnn}
|
||||||
the character whose @code{ASCII} code is the octal value @var{nnn}
|
the eight-bit character whose value is the octal value @var{nnn}
|
||||||
(one to three digits)
|
|
||||||
@item \x@var{nnn}
|
|
||||||
the character whose @code{ASCII} code is the hexadecimal value @var{nnn}
|
|
||||||
(one to three digits)
|
(one to three digits)
|
||||||
|
@item \x@var{HH}
|
||||||
|
the eight-bit character whose value is the hexadecimal value @var{HH}
|
||||||
|
(one or two hex digits)
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@item enable
|
@item enable
|
||||||
|
|
@ -3377,6 +3410,11 @@ If enabled, and the @code{cmdhist}
|
||||||
option is enabled, multi-line commands are saved to the history with
|
option is enabled, multi-line commands are saved to the history with
|
||||||
embedded newlines rather than using semicolon separators where possible.
|
embedded newlines rather than using semicolon separators where possible.
|
||||||
|
|
||||||
|
@item login_shell
|
||||||
|
The shell sets this option if it is started as a login shell
|
||||||
|
(@pxref{Invoking Bash}).
|
||||||
|
The value may not be changed.
|
||||||
|
|
||||||
@item mailwarn
|
@item mailwarn
|
||||||
If set, and a file that Bash is checking for mail has been
|
If set, and a file that Bash is checking for mail has been
|
||||||
accessed since the last time it was checked, the message
|
accessed since the last time it was checked, the message
|
||||||
|
|
@ -3531,7 +3569,10 @@ The maximum amount of virtual memory available to the process.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
If @var{limit} is given, it is the new value of the specified resource.
|
If @var{limit} is given, it is the new value of the specified resource;
|
||||||
|
the special @var{limit} values @code{hard}, @code{soft}, and
|
||||||
|
@code{unlimited} stand for the current hard limit, the current soft limit,
|
||||||
|
and no limit, respectively.
|
||||||
Otherwise, the current value of the soft limit for the specified resource
|
Otherwise, the current value of the soft limit for the specified resource
|
||||||
is printed, unless the @option{-H} option is supplied.
|
is printed, unless the @option{-H} option is supplied.
|
||||||
When setting new limits, if neither @option{-H} nor @option{-S} is supplied,
|
When setting new limits, if neither @option{-H} nor @option{-S} is supplied,
|
||||||
|
|
@ -3541,9 +3582,8 @@ increments, except for @option{-t}, which is in seconds, @option{-p},
|
||||||
which is in units of 512-byte blocks, and @option{-n} and @option{-u}, which
|
which is in units of 512-byte blocks, and @option{-n} and @option{-u}, which
|
||||||
are unscaled values.
|
are unscaled values.
|
||||||
|
|
||||||
The return status is zero unless an invalid option is supplied, a
|
The return status is zero unless an invalid option or argument is supplied,
|
||||||
non-numeric argument other than @code{unlimited} is supplied as a
|
or an error occurs while setting a new limit.
|
||||||
@var{limit}, or an error occurs while setting a new limit.
|
|
||||||
|
|
||||||
@item unalias
|
@item unalias
|
||||||
@btindex unalias
|
@btindex unalias
|
||||||
|
|
@ -3591,6 +3631,7 @@ with a non-zero status, unless the command that fails is part of an
|
||||||
@code{until} or @code{while} loop, part of an @code{if} statement,
|
@code{until} or @code{while} loop, part of an @code{if} statement,
|
||||||
part of a @code{&&} or @code{||} list, or if the command's return
|
part of a @code{&&} or @code{||} list, or if the command's return
|
||||||
status is being inverted using @code{!}.
|
status is being inverted using @code{!}.
|
||||||
|
A trap on @code{ERR}, if set, is executed before the shell exits.
|
||||||
|
|
||||||
@item -f
|
@item -f
|
||||||
Disable file name generation (globbing).
|
Disable file name generation (globbing).
|
||||||
|
|
@ -3657,6 +3698,9 @@ Same as @code{-n}.
|
||||||
@item noglob
|
@item noglob
|
||||||
Same as @code{-f}.
|
Same as @code{-f}.
|
||||||
|
|
||||||
|
@item nolog
|
||||||
|
Currently ignored.
|
||||||
|
|
||||||
@item notify
|
@item notify
|
||||||
Same as @code{-b}.
|
Same as @code{-b}.
|
||||||
|
|
||||||
|
|
@ -3927,11 +3971,10 @@ The value of @env{MACHTYPE}.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@item COMP_WORDS
|
@item COLUMNS
|
||||||
An array variable consisting of the individual
|
Used by the @code{select} builtin command to determine the terminal width
|
||||||
words in the current command line.
|
when printing selection lists. Automatically set upon receipt of a
|
||||||
This variable is available only in shell functions invoked by the
|
@code{SIGWINCH}.
|
||||||
programmable completion facilities (@pxref{Programmable Completion}).
|
|
||||||
|
|
||||||
@item COMP_CWORD
|
@item COMP_CWORD
|
||||||
An index into @env{$@{COMP_WORDS@}} of the word containing the current
|
An index into @env{$@{COMP_WORDS@}} of the word containing the current
|
||||||
|
|
@ -3954,6 +3997,12 @@ This variable is available only in shell functions and external
|
||||||
commands invoked by the
|
commands invoked by the
|
||||||
programmable completion facilities (@pxref{Programmable Completion}).
|
programmable completion facilities (@pxref{Programmable Completion}).
|
||||||
|
|
||||||
|
@item COMP_WORDS
|
||||||
|
An array variable consisting of the individual
|
||||||
|
words in the current command line.
|
||||||
|
This variable is available only in shell functions invoked by the
|
||||||
|
programmable completion facilities (@pxref{Programmable Completion}).
|
||||||
|
|
||||||
@item COMPREPLY
|
@item COMPREPLY
|
||||||
An array variable from which Bash reads the possible completions
|
An array variable from which Bash reads the possible completions
|
||||||
generated by a shell function invoked by the programmable completion
|
generated by a shell function invoked by the programmable completion
|
||||||
|
|
@ -3986,6 +4035,13 @@ A file name whose suffix matches one of the entries in
|
||||||
is excluded from the list of matched file names. A sample
|
is excluded from the list of matched file names. A sample
|
||||||
value is @samp{.o:~}
|
value is @samp{.o:~}
|
||||||
|
|
||||||
|
@item FUNCNAME
|
||||||
|
The name of any currently-executing shell function.
|
||||||
|
This variable exists only when a shell function is executing.
|
||||||
|
Assignments to @env{FUNCNAME} have no effect and return an error status.
|
||||||
|
If @env{FUNCNAME} is unset, it loses its special properties, even if
|
||||||
|
it is subsequently reset.
|
||||||
|
|
||||||
@item GLOBIGNORE
|
@item GLOBIGNORE
|
||||||
A colon-separated list of patterns defining the set of filenames to
|
A colon-separated list of patterns defining the set of filenames to
|
||||||
be ignored by filename expansion.
|
be ignored by filename expansion.
|
||||||
|
|
@ -4019,13 +4075,6 @@ The history number, or index in the history list, of the current
|
||||||
command. If @env{HISTCMD} is unset, it loses its special properties,
|
command. If @env{HISTCMD} is unset, it loses its special properties,
|
||||||
even if it is subsequently reset.
|
even if it is subsequently reset.
|
||||||
|
|
||||||
@item FUNCNAME
|
|
||||||
The name of any currently-executing shell function.
|
|
||||||
This variable exists only when a shell function is executing.
|
|
||||||
Assignments to @env{FUNCNAME} have no effect and return an error status.
|
|
||||||
If @env{FUNCNAME} is unset, it loses its special properties, even if
|
|
||||||
it is subsequently reset.
|
|
||||||
|
|
||||||
@item HISTCONTROL
|
@item HISTCONTROL
|
||||||
A value of @samp{ignorespace} means to not enter lines which
|
A value of @samp{ignorespace} means to not enter lines which
|
||||||
begin with a space or tab into the history list.
|
begin with a space or tab into the history list.
|
||||||
|
|
@ -4038,6 +4087,18 @@ The second and subsequent lines of a multi-line compound command are
|
||||||
not tested, and are added to the history regardless of the value of
|
not tested, and are added to the history regardless of the value of
|
||||||
@env{HISTCONTROL}.
|
@env{HISTCONTROL}.
|
||||||
|
|
||||||
|
@item HISTFILE
|
||||||
|
The name of the file to which the command history is saved. The
|
||||||
|
default value is @file{~/.bash_history}.
|
||||||
|
|
||||||
|
@item HISTFILESIZE
|
||||||
|
The maximum number of lines contained in the history file. When this
|
||||||
|
variable is assigned a value, the history file is truncated, if
|
||||||
|
necessary, to contain no more than that number of lines.
|
||||||
|
The history file is also truncated to this size after
|
||||||
|
writing it when an interactive shell exits.
|
||||||
|
The default value is 500.
|
||||||
|
|
||||||
@item HISTIGNORE
|
@item HISTIGNORE
|
||||||
A colon-separated list of patterns used to decide which command
|
A colon-separated list of patterns used to decide which command
|
||||||
lines should be saved on the history list. Each pattern is
|
lines should be saved on the history list. Each pattern is
|
||||||
|
|
@ -4058,22 +4119,10 @@ pattern of @samp{[ ]*} is identical to @code{ignorespace}.
|
||||||
Combining these two patterns, separating them with a colon,
|
Combining these two patterns, separating them with a colon,
|
||||||
provides the functionality of @code{ignoreboth}.
|
provides the functionality of @code{ignoreboth}.
|
||||||
|
|
||||||
@item HISTFILE
|
|
||||||
The name of the file to which the command history is saved. The
|
|
||||||
default value is @file{~/.bash_history}.
|
|
||||||
|
|
||||||
@item HISTSIZE
|
@item HISTSIZE
|
||||||
The maximum number of commands to remember on the history list.
|
The maximum number of commands to remember on the history list.
|
||||||
The default value is 500.
|
The default value is 500.
|
||||||
|
|
||||||
@item HISTFILESIZE
|
|
||||||
The maximum number of lines contained in the history file. When this
|
|
||||||
variable is assigned a value, the history file is truncated, if
|
|
||||||
necessary, to contain no more than that number of lines.
|
|
||||||
The history file is also truncated to this size after
|
|
||||||
writing it when an interactive shell exits.
|
|
||||||
The default value is 500.
|
|
||||||
|
|
||||||
@item HOSTFILE
|
@item HOSTFILE
|
||||||
Contains the name of a file in the same format as @file{/etc/hosts} that
|
Contains the name of a file in the same format as @file{/etc/hosts} that
|
||||||
should be read when the shell needs to complete a hostname.
|
should be read when the shell needs to complete a hostname.
|
||||||
|
|
@ -4133,19 +4182,14 @@ strings preceded by a @samp{$} (@pxref{Locale Translation}).
|
||||||
@item LC_NUMERIC
|
@item LC_NUMERIC
|
||||||
This variable determines the locale category used for number formatting.
|
This variable determines the locale category used for number formatting.
|
||||||
|
|
||||||
|
@item LINENO
|
||||||
|
The line number in the script or shell function currently executing.
|
||||||
|
|
||||||
@item LINES
|
@item LINES
|
||||||
Used by the @code{select} builtin command to determine the column length
|
Used by the @code{select} builtin command to determine the column length
|
||||||
for printing selection lists. Automatically set upon receipt of a
|
for printing selection lists. Automatically set upon receipt of a
|
||||||
@code{SIGWINCH}.
|
@code{SIGWINCH}.
|
||||||
|
|
||||||
@item COLUMNS
|
|
||||||
Used by the @code{select} builtin command to determine the terminal width
|
|
||||||
when printing selection lists. Automatically set upon receipt of a
|
|
||||||
@code{SIGWINCH}.
|
|
||||||
|
|
||||||
@item LINENO
|
|
||||||
The line number in the script or shell function currently executing.
|
|
||||||
|
|
||||||
@item MACHTYPE
|
@item MACHTYPE
|
||||||
A string that fully describes the system type on which Bash
|
A string that fully describes the system type on which Bash
|
||||||
is executing, in the standard @sc{gnu} @var{cpu-company-system} format.
|
is executing, in the standard @sc{gnu} @var{cpu-company-system} format.
|
||||||
|
|
@ -4174,6 +4218,18 @@ containing a list of exit status values from the processes
|
||||||
in the most-recently-executed foreground pipeline (which may
|
in the most-recently-executed foreground pipeline (which may
|
||||||
contain only a single command).
|
contain only a single command).
|
||||||
|
|
||||||
|
@item POSIXLY_CORRECT
|
||||||
|
If this variable is in the environment when @code{bash} starts, the shell
|
||||||
|
enters @sc{posix} mode (@pxref{Bash POSIX Mode}) before reading the
|
||||||
|
startup files, as if the @option{--posix} invocation option had been supplied.
|
||||||
|
If it is set while the shell is running, @code{bash} enables @sc{posix} mode,
|
||||||
|
as if the command
|
||||||
|
@example
|
||||||
|
@code{set -o posix}
|
||||||
|
@end example
|
||||||
|
@noindent
|
||||||
|
had been executed.
|
||||||
|
|
||||||
@item PPID
|
@item PPID
|
||||||
The process @sc{id} of the shell's parent process. This variable
|
The process @sc{id} of the shell's parent process. This variable
|
||||||
is readonly.
|
is readonly.
|
||||||
|
|
@ -4310,9 +4366,9 @@ This section describes features unique to Bash.
|
||||||
@section Invoking Bash
|
@section Invoking Bash
|
||||||
|
|
||||||
@example
|
@example
|
||||||
bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [@var{argument} @dots{}]
|
bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
|
||||||
bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] -c @var{string} [@var{argument} @dots{}]
|
bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] -c @var{string} [@var{argument} @dots{}]
|
||||||
bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] [@var{argument} @dots{}]
|
bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o @var{option}] [-O @var{shopt_option}] [@var{argument} @dots{}]
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
In addition to the single-character shell command-line options
|
In addition to the single-character shell command-line options
|
||||||
|
|
@ -4414,6 +4470,16 @@ are subject to language translation when the current locale
|
||||||
is not @code{C} or @code{POSIX} (@pxref{Locale Translation}).
|
is not @code{C} or @code{POSIX} (@pxref{Locale Translation}).
|
||||||
This implies the @option{-n} option; no commands will be executed.
|
This implies the @option{-n} option; no commands will be executed.
|
||||||
|
|
||||||
|
@item [-+]O [@var{shopt_option}]
|
||||||
|
@var{shopt_option} is one of the shell options accepted by the
|
||||||
|
@code{shopt} builtin (@pxref{Shell Builtin Commands}).
|
||||||
|
If @var{shopt_option} is present, @option{-O} sets the value of that option;
|
||||||
|
@option{+O} unsets it.
|
||||||
|
If @var{shopt_option} is not supplied, the names and values of the shell
|
||||||
|
options accepted by @code{shopt} are printed on the standard output.
|
||||||
|
If the invocation option is @option{+O}, the output is displayed in a format
|
||||||
|
that may be reused as input.
|
||||||
|
|
||||||
@item --
|
@item --
|
||||||
A @code{--} signals the end of options and disables further option
|
A @code{--} signals the end of options and disables further option
|
||||||
processing.
|
processing.
|
||||||
|
|
@ -4421,6 +4487,10 @@ Any arguments after the @code{--} are treated as filenames and arguments.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
@cindex login shell
|
||||||
|
A @emph{login} shell is one whose first character of argument zero is
|
||||||
|
@samp{-}, or one invoked with the @option{--login} option.
|
||||||
|
|
||||||
@cindex interactive shell
|
@cindex interactive shell
|
||||||
An @emph{interactive} shell is one started without non-option arguments,
|
An @emph{interactive} shell is one started without non-option arguments,
|
||||||
unless @option{-s} is specified,
|
unless @option{-s} is specified,
|
||||||
|
|
@ -4930,7 +5000,7 @@ is a decimal number between 2 and 64 representing the arithmetic
|
||||||
base, and @var{n} is a number in that base. If @var{base}@code{#} is
|
base, and @var{n} is a number in that base. If @var{base}@code{#} is
|
||||||
omitted, then base 10 is used.
|
omitted, then base 10 is used.
|
||||||
The digits greater than 9 are represented by the lowercase letters,
|
The digits greater than 9 are represented by the lowercase letters,
|
||||||
the uppercase letters, @samp{_}, and @samp{@@}, in that order.
|
the uppercase letters, @samp{@@}, and @samp{_}, in that order.
|
||||||
If @var{base} is less than or equal to 36, lowercase and uppercase
|
If @var{base} is less than or equal to 36, lowercase and uppercase
|
||||||
letters may be used interchangably to represent numbers between 10
|
letters may be used interchangably to represent numbers between 10
|
||||||
and 35.
|
and 35.
|
||||||
|
|
@ -5065,7 +5135,7 @@ Referencing an array variable without a subscript is equivalent to
|
||||||
referencing element zero.
|
referencing element zero.
|
||||||
|
|
||||||
The @code{unset} builtin is used to destroy arrays.
|
The @code{unset} builtin is used to destroy arrays.
|
||||||
@code{unset} @var{name[subscript]}
|
@code{unset} @var{name}[@var{subscript}]
|
||||||
destroys the array element at index @var{subscript}.
|
destroys the array element at index @var{subscript}.
|
||||||
@code{unset} @var{name}, where @var{name} is an array, removes the
|
@code{unset} @var{name}, where @var{name} is an array, removes the
|
||||||
entire array. A subscript of @samp{*} or @samp{@@} also removes the
|
entire array. A subscript of @samp{*} or @samp{@@} also removes the
|
||||||
|
|
@ -5230,6 +5300,8 @@ The time, in 24-hour HH:MM:SS format.
|
||||||
The time, in 12-hour HH:MM:SS format.
|
The time, in 12-hour HH:MM:SS format.
|
||||||
@item \@@
|
@item \@@
|
||||||
The time, in 12-hour am/pm format.
|
The time, in 12-hour am/pm format.
|
||||||
|
@item \A
|
||||||
|
The time, in 24-hour HH:MM format.
|
||||||
@item \u
|
@item \u
|
||||||
The username of the current user.
|
The username of the current user.
|
||||||
@item \v
|
@item \v
|
||||||
|
|
@ -5462,6 +5534,10 @@ Alias expansion is always enabled, even in non-interactive shells.
|
||||||
When the @code{set} builtin is invoked without options, it does not display
|
When the @code{set} builtin is invoked without options, it does not display
|
||||||
shell function names and definitions.
|
shell function names and definitions.
|
||||||
|
|
||||||
|
@item
|
||||||
|
When the @code{set} builtin is invoked without options, it displays
|
||||||
|
variable values without quotes, unless they contain shell metacharacters,
|
||||||
|
even if the result contains nonprinting characters.
|
||||||
@end enumerate
|
@end enumerate
|
||||||
|
|
||||||
There is other @sc{posix} 1003.2 behavior that Bash does not implement.
|
There is other @sc{posix} 1003.2 behavior that Bash does not implement.
|
||||||
|
|
@ -5585,9 +5661,11 @@ job 1 in the background, equivalent to @samp{bg %1}
|
||||||
The shell learns immediately whenever a job changes state.
|
The shell learns immediately whenever a job changes state.
|
||||||
Normally, Bash waits until it is about to print a prompt
|
Normally, Bash waits until it is about to print a prompt
|
||||||
before reporting changes in a job's status so as to not interrupt
|
before reporting changes in a job's status so as to not interrupt
|
||||||
any other output. If the
|
any other output.
|
||||||
the @option{-b} option to the @code{set} builtin is enabled,
|
If the @option{-b} option to the @code{set} builtin is enabled,
|
||||||
Bash reports such changes immediately (@pxref{The Set Builtin}).
|
Bash reports such changes immediately (@pxref{The Set Builtin}).
|
||||||
|
Any trap on @code{SIGCHLD} is executed for each child process
|
||||||
|
that exits.
|
||||||
|
|
||||||
If an attempt to exit Bash is while jobs are stopped, the
|
If an attempt to exit Bash is while jobs are stopped, the
|
||||||
shell prints a message warning that there are stopped jobs.
|
shell prints a message warning that there are stopped jobs.
|
||||||
|
|
@ -5867,18 +5945,9 @@ The file @file{configure.in} is used to create @code{configure}
|
||||||
by a program called Autoconf. You only need
|
by a program called Autoconf. You only need
|
||||||
@file{configure.in} if you want to change it or regenerate
|
@file{configure.in} if you want to change it or regenerate
|
||||||
@code{configure} using a newer version of Autoconf. If
|
@code{configure} using a newer version of Autoconf. If
|
||||||
you do this, make sure you are using Autoconf version 2.10 or
|
you do this, make sure you are using Autoconf version 2.50 or
|
||||||
newer.
|
newer.
|
||||||
|
|
||||||
If you need to change @file{configure.in} or regenerate
|
|
||||||
@code{configure}, you will need to create two files:
|
|
||||||
@file{_distribution} and @file{_patchlevel}. @file{_distribution}
|
|
||||||
should contain the major and minor version numbers of the Bash
|
|
||||||
distribution, for example @samp{2.01}. @file{_patchlevel} should
|
|
||||||
contain the patch level of the Bash distribution, @samp{0} for
|
|
||||||
example. The script @file{support/mkconffiles} has been provided
|
|
||||||
to automate the creation of these files.
|
|
||||||
|
|
||||||
You can remove the program binaries and object files from the
|
You can remove the program binaries and object files from the
|
||||||
source code directory by typing @samp{make clean}. To also remove the
|
source code directory by typing @samp{make clean}. To also remove the
|
||||||
files that @code{configure} created (so you can compile Bash for
|
files that @code{configure} created (so you can compile Bash for
|
||||||
|
|
@ -5947,7 +6016,9 @@ directories for other architectures.
|
||||||
By default, @samp{make install} will install into
|
By default, @samp{make install} will install into
|
||||||
@file{/usr/local/bin}, @file{/usr/local/man}, etc. You can
|
@file{/usr/local/bin}, @file{/usr/local/man}, etc. You can
|
||||||
specify an installation prefix other than @file{/usr/local} by
|
specify an installation prefix other than @file{/usr/local} by
|
||||||
giving @code{configure} the option @option{--prefix=@var{PATH}}.
|
giving @code{configure} the option @option{--prefix=@var{PATH}},
|
||||||
|
or by specifying a value for the @code{DESTDIR} @samp{make}
|
||||||
|
variable when running @samp{make install}.
|
||||||
|
|
||||||
You can specify separate installation prefixes for
|
You can specify separate installation prefixes for
|
||||||
architecture-specific files and architecture-independent files.
|
architecture-specific files and architecture-independent files.
|
||||||
|
|
@ -5960,13 +6031,13 @@ Documentation and other data files will still use the regular prefix.
|
||||||
@section Specifying the System Type
|
@section Specifying the System Type
|
||||||
|
|
||||||
There may be some features @code{configure} can not figure out
|
There may be some features @code{configure} can not figure out
|
||||||
automatically, but needs to determine by the type of host Bash
|
automatically, but need to determine by the type of host Bash
|
||||||
will run on. Usually @code{configure} can figure that
|
will run on. Usually @code{configure} can figure that
|
||||||
out, but if it prints a message saying it can not guess the host
|
out, but if it prints a message saying it can not guess the host
|
||||||
type, give it the @option{--host=TYPE} option. @samp{TYPE} can
|
type, give it the @option{--host=TYPE} option. @samp{TYPE} can
|
||||||
either be a short name for the system type, such as @samp{sun4},
|
either be a short name for the system type, such as @samp{sun4},
|
||||||
or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM}
|
or a canonical name with three fields: @samp{CPU-COMPANY-SYSTEM}
|
||||||
(e.g., @samp{sparc-sun-sunos4.1.2}).
|
(e.g., @samp{i386-unknown-freebsd4.2}).
|
||||||
|
|
||||||
See the file @file{support/config.sub} for the possible
|
See the file @file{support/config.sub} for the possible
|
||||||
values of each field.
|
values of each field.
|
||||||
|
|
@ -6052,22 +6123,24 @@ Use the curses library instead of the termcap library. This should
|
||||||
be supplied if your system has an inadequate or incomplete termcap
|
be supplied if your system has an inadequate or incomplete termcap
|
||||||
database.
|
database.
|
||||||
|
|
||||||
@item --with-glibc-malloc
|
|
||||||
Use the @sc{gnu} libc version of @code{malloc} in
|
|
||||||
@file{lib/malloc/gmalloc.c}. This is not the version of @code{malloc}
|
|
||||||
that appears in glibc version 2, but a modified version of the
|
|
||||||
@code{malloc} from glibc version 1. This is somewhat slower than the
|
|
||||||
default @code{malloc}, but wastes less space on a per-allocation
|
|
||||||
basis, and will return memory to the operating system under
|
|
||||||
certain circumstances.
|
|
||||||
|
|
||||||
@item --with-gnu-malloc
|
@item --with-gnu-malloc
|
||||||
A synonym for @code{--with-bash-malloc}.
|
A synonym for @code{--with-bash-malloc}.
|
||||||
|
|
||||||
@item --with-installed-readline
|
@item --with-installed-readline[=@var{PREFIX}]
|
||||||
Define this to make Bash link with a locally-installed version of Readline
|
Define this to make Bash link with a locally-installed version of Readline
|
||||||
rather than the version in @file{lib/readline}. This works only with
|
rather than the version in @file{lib/readline}. This works only with
|
||||||
Readline 4.1 and later versions.
|
Readline 4.2 and later versions. If @var{PREFIX} is @code{yes} or not
|
||||||
|
supplied, @code{configure} uses the values of the make variables
|
||||||
|
@code{includedir} and @code{libdir}, which are subdirectories of @code{prefix}
|
||||||
|
by default, to find the installed version of Readline if it is not in
|
||||||
|
the standard system include and library directories.
|
||||||
|
If @var{PREFIX} is @code{no}, Bash links with the version in
|
||||||
|
@file{lib/readline}.
|
||||||
|
If @var{PREFIX} is set to any other value, @code{configure} treats it as
|
||||||
|
a directory pathname and looks for
|
||||||
|
the installed version of Readline in subdirectories of that directory
|
||||||
|
(include files in @var{PREFIX}/@code{include} and the library in
|
||||||
|
@var{PREFIX}/@code{lib}).
|
||||||
|
|
||||||
@item --with-purify
|
@item --with-purify
|
||||||
Define this to use the Purify memory allocation checker from Rational
|
Define this to use the Purify memory allocation checker from Rational
|
||||||
|
|
@ -6082,6 +6155,11 @@ There are several @option{--enable-} options that alter how Bash is
|
||||||
compiled and linked, rather than changing run-time features.
|
compiled and linked, rather than changing run-time features.
|
||||||
|
|
||||||
@table @code
|
@table @code
|
||||||
|
@item --enable-largefile
|
||||||
|
Enable support for @uref{http://www.sas.com/standards/large_file/x_open.20Mar96.html,
|
||||||
|
large files} if the operating system requires special compiler options
|
||||||
|
to build programs which can access large files.
|
||||||
|
|
||||||
@item --enable-profiling
|
@item --enable-profiling
|
||||||
This builds a Bash binary that produces profiling information to be
|
This builds a Bash binary that produces profiling information to be
|
||||||
processed by @code{gprof} each time it is executed.
|
processed by @code{gprof} each time it is executed.
|
||||||
|
|
@ -6533,7 +6611,8 @@ executed with the @code{.} or @code{source} builtins
|
||||||
|
|
||||||
@item
|
@item
|
||||||
Bash includes the @code{shopt} builtin, for finer control of shell
|
Bash includes the @code{shopt} builtin, for finer control of shell
|
||||||
optional capabilities (@pxref{Bash Builtins}).
|
optional capabilities (@pxref{Bash Builtins}), and allows these options
|
||||||
|
to be set and unset at shell invocation (@pxref{Invoking Bash}).
|
||||||
|
|
||||||
@item
|
@item
|
||||||
Bash has much more optional behavior controllable with the @code{set}
|
Bash has much more optional behavior controllable with the @code{set}
|
||||||
|
|
@ -6545,11 +6624,17 @@ is slightly different, as it implements the @sc{posix} algorithm,
|
||||||
which specifies the behavior based on the number of arguments.
|
which specifies the behavior based on the number of arguments.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
The @code{trap} builtin (@pxref{Bourne Shell Builtins})
|
The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
|
||||||
allows a @code{DEBUG} pseudo-signal specification,
|
@code{DEBUG} pseudo-signal specification, similar to @code{EXIT}.
|
||||||
similar to @code{EXIT}. Commands specified with a @code{DEBUG} trap are
|
Commands specified with a @code{DEBUG} trap are executed after every
|
||||||
executed after every simple command. The @code{DEBUG} trap is not
|
simple command.
|
||||||
inherited by shell functions.
|
The @code{DEBUG} trap is not inherited by shell functions.
|
||||||
|
|
||||||
|
The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows an
|
||||||
|
@code{ERR} pseudo-signal specification, similar to @code{EXIT} and @code{DEBUG}.
|
||||||
|
Commands specified with an @code{ERR} trap are executed after a simple
|
||||||
|
command fails, with a few exceptions.
|
||||||
|
The @code{ERR} trap is not inherited by shell functions.
|
||||||
|
|
||||||
@item
|
@item
|
||||||
The Bash @code{type} builtin is more extensive and gives more information
|
The Bash @code{type} builtin is more extensive and gives more information
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
.\" This is a hack to force bash builtins into the whatis database
|
.\" This is a hack to force bash builtins into the whatis database
|
||||||
.\" and to get the list of builtins to come up with the man command.
|
.\" and to get the list of builtins to come up with the man command.
|
||||||
.TH BASH_BUILTINS 1 "1996 Mar 20" GNU
|
.TH BASH_BUILTINS 1 "2001 October 29" "GNU Bash-2.05a"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
bash, :, ., alias, bg, bind, break, builtin, case, cd, command,
|
bash, :, ., [, alias, bg, bind, break, builtin, case, cd, command, compgen,
|
||||||
|
complete,
|
||||||
continue, declare, dirs, disown, echo, enable, eval, exec, exit,
|
continue, declare, dirs, disown, echo, enable, eval, exec, exit,
|
||||||
export, fc, fg, for, getopts, hash, help, history, if, jobs, kill,
|
export, fc, fg, for, getopts, hash, help, history, if, jobs, kill,
|
||||||
let, local, logout, popd, pushd, pwd, read, readonly, return, set,
|
let, local, logout, popd, printf, pushd, pwd, read, readonly, return, set,
|
||||||
shift, shopt, source, suspend, test, times, trap, type, typeset,
|
shift, shopt, source, suspend, test, times, trap, type, typeset,
|
||||||
ulimit, umask, unalias, unset, until, wait, while \- bash built-in commands, see \fBbash\fR(1)
|
ulimit, umask, unalias, unset, until, wait, while \- bash built-in commands, see \fBbash\fR(1)
|
||||||
.SH BASH BUILTIN COMMANDS
|
.SH BASH BUILTIN COMMANDS
|
||||||
|
|
|
||||||
10
error.c
10
error.c
|
|
@ -58,7 +58,7 @@ extern char *dollar_vars[];
|
||||||
extern char *shell_name;
|
extern char *shell_name;
|
||||||
#if defined (JOB_CONTROL)
|
#if defined (JOB_CONTROL)
|
||||||
extern pid_t shell_pgrp;
|
extern pid_t shell_pgrp;
|
||||||
extern int give_terminal_to ();
|
extern int give_terminal_to __P((pid_t, int));
|
||||||
#endif /* JOB_CONTROL */
|
#endif /* JOB_CONTROL */
|
||||||
|
|
||||||
/* The current maintainer of the shell. You change this in the
|
/* The current maintainer of the shell. You change this in the
|
||||||
|
|
@ -95,7 +95,7 @@ get_name_for_error ()
|
||||||
format string. */
|
format string. */
|
||||||
void
|
void
|
||||||
file_error (filename)
|
file_error (filename)
|
||||||
char *filename;
|
const char *filename;
|
||||||
{
|
{
|
||||||
report_error ("%s: %s", filename, strerror (errno));
|
report_error ("%s: %s", filename, strerror (errno));
|
||||||
}
|
}
|
||||||
|
|
@ -227,7 +227,7 @@ programming_error (format, va_alist)
|
||||||
char *h;
|
char *h;
|
||||||
|
|
||||||
#if defined (JOB_CONTROL)
|
#if defined (JOB_CONTROL)
|
||||||
give_terminal_to (shell_pgrp);
|
give_terminal_to (shell_pgrp, 0);
|
||||||
#endif /* JOB_CONTROL */
|
#endif /* JOB_CONTROL */
|
||||||
|
|
||||||
#if defined (PREFER_STDARG)
|
#if defined (PREFER_STDARG)
|
||||||
|
|
@ -446,7 +446,7 @@ itrace (format, va_alist)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
fprintf(stderr, "TRACE: pid %d: ", (int)getpid());
|
fprintf(stderr, "TRACE: pid %ld: ", (long)getpid());
|
||||||
|
|
||||||
#if defined (PREFER_STDARG)
|
#if defined (PREFER_STDARG)
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
|
|
@ -484,7 +484,7 @@ trace (format, va_alist)
|
||||||
else
|
else
|
||||||
fcntl (fileno (tracefp), F_SETFD, 1); /* close-on-exec */
|
fcntl (fileno (tracefp), F_SETFD, 1); /* close-on-exec */
|
||||||
|
|
||||||
fprintf(tracefp, "TRACE: pid %d: ", getpid());
|
fprintf(tracefp, "TRACE: pid %ld: ", (long)getpid());
|
||||||
|
|
||||||
#if defined (PREFER_STDARG)
|
#if defined (PREFER_STDARG)
|
||||||
va_start (args, format);
|
va_start (args, format);
|
||||||
|
|
|
||||||
21
error.h
21
error.h
|
|
@ -24,35 +24,38 @@
|
||||||
#include "stdc.h"
|
#include "stdc.h"
|
||||||
|
|
||||||
/* Get the name of the shell or shell script for an error message. */
|
/* Get the name of the shell or shell script for an error message. */
|
||||||
extern char *get_name_for_error ();
|
extern char *get_name_for_error __P((void));
|
||||||
|
|
||||||
/* Report an error having to do with FILENAME. */
|
/* Report an error having to do with FILENAME. */
|
||||||
extern void file_error __P((char *));
|
extern void file_error __P((const char *));
|
||||||
|
|
||||||
/* Report a programmer's error, and abort. Pass REASON, and ARG1 ... ARG5. */
|
/* Report a programmer's error, and abort. Pass REASON, and ARG1 ... ARG5. */
|
||||||
extern void programming_error __P((const char *, ...));
|
extern void programming_error __P((const char *, ...)) __attribute__((__format__ (printf, 1, 2)));
|
||||||
|
|
||||||
/* General error reporting. Pass FORMAT and ARG1 ... ARG5. */
|
/* General error reporting. Pass FORMAT and ARG1 ... ARG5. */
|
||||||
extern void report_error __P((const char *, ...));
|
extern void report_error __P((const char *, ...)) __attribute__((__format__ (printf, 1, 2)));
|
||||||
|
|
||||||
/* Error messages for parts of the parser that don't call report_syntax_error */
|
/* Error messages for parts of the parser that don't call report_syntax_error */
|
||||||
extern void parser_error __P((int, const char *, ...));
|
extern void parser_error __P((int, const char *, ...)) __attribute__((__format__ (printf, 2, 3)));
|
||||||
|
|
||||||
/* Report an unrecoverable error and exit. Pass FORMAT and ARG1 ... ARG5. */
|
/* Report an unrecoverable error and exit. Pass FORMAT and ARG1 ... ARG5. */
|
||||||
extern void fatal_error __P((const char *, ...));
|
extern void fatal_error __P((const char *, ...)) __attribute__((__format__ (printf, 1, 2)));
|
||||||
|
|
||||||
/* Report a system error, like BSD warn(3). */
|
/* Report a system error, like BSD warn(3). */
|
||||||
extern void sys_error __P((const char *, ...));
|
extern void sys_error __P((const char *, ...)) __attribute__((__format__ (printf, 1, 2)));
|
||||||
|
|
||||||
/* Report an internal error. */
|
/* Report an internal error. */
|
||||||
extern void internal_error __P((const char *, ...));
|
extern void internal_error __P((const char *, ...)) __attribute__((__format__ (printf, 1, 2)));
|
||||||
|
|
||||||
/* Report an internal warning. */
|
/* Report an internal warning. */
|
||||||
extern void internal_warning __P((const char *, ...));
|
extern void internal_warning __P((const char *, ...)) __attribute__((__format__ (printf, 1, 2)));
|
||||||
|
|
||||||
/* Report an error having to do with command parsing or execution. */
|
/* Report an error having to do with command parsing or execution. */
|
||||||
extern void command_error __P((const char *, int, int, int));
|
extern void command_error __P((const char *, int, int, int));
|
||||||
|
|
||||||
extern char *command_errstr __P((int));
|
extern char *command_errstr __P((int));
|
||||||
|
|
||||||
|
/* Debugging function, not enabled in released version. */
|
||||||
|
extern void itrace __P((const char *, ...)) __attribute__ ((__format__ (printf, 1, 2)));
|
||||||
|
|
||||||
#endif /* !_ERROR_H_ */
|
#endif /* !_ERROR_H_ */
|
||||||
|
|
|
||||||
8
eval.c
8
eval.c
|
|
@ -43,10 +43,8 @@
|
||||||
# include "bashhist.h"
|
# include "bashhist.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int yyparse ();
|
|
||||||
|
|
||||||
extern int EOF_reached;
|
extern int EOF_reached;
|
||||||
extern int indirection_level, interactive, interactive_shell;
|
extern int indirection_level;
|
||||||
extern int posixly_correct;
|
extern int posixly_correct;
|
||||||
extern int subshell_environment, running_under_emacs;
|
extern int subshell_environment, running_under_emacs;
|
||||||
extern int last_command_exit_value, stdin_redir;
|
extern int last_command_exit_value, stdin_redir;
|
||||||
|
|
@ -62,6 +60,8 @@ reader_loop ()
|
||||||
int our_indirection_level;
|
int our_indirection_level;
|
||||||
COMMAND *current_command = (COMMAND *)NULL;
|
COMMAND *current_command = (COMMAND *)NULL;
|
||||||
|
|
||||||
|
USE_VAR(current_command);
|
||||||
|
|
||||||
our_indirection_level = ++indirection_level;
|
our_indirection_level = ++indirection_level;
|
||||||
|
|
||||||
while (EOF_Reached == 0)
|
while (EOF_Reached == 0)
|
||||||
|
|
@ -234,11 +234,11 @@ read_command ()
|
||||||
/* Only do timeouts if interactive. */
|
/* Only do timeouts if interactive. */
|
||||||
tmout_var = (SHELL_VAR *)NULL;
|
tmout_var = (SHELL_VAR *)NULL;
|
||||||
tmout_len = 0;
|
tmout_len = 0;
|
||||||
|
old_alrm = (SigHandler *)NULL;
|
||||||
|
|
||||||
if (interactive)
|
if (interactive)
|
||||||
{
|
{
|
||||||
tmout_var = find_variable ("TMOUT");
|
tmout_var = find_variable ("TMOUT");
|
||||||
old_alrm = (SigHandler *)NULL;
|
|
||||||
|
|
||||||
if (tmout_var && tmout_var->value)
|
if (tmout_var && tmout_var->value)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -476,6 +476,7 @@ complete -A hostname rsh telnet rlogin ftp ping xping host traceroute nslookup
|
||||||
complete -A hostname rxterm rxterm3 rxvt2
|
complete -A hostname rxterm rxterm3 rxvt2
|
||||||
|
|
||||||
complete -u su
|
complete -u su
|
||||||
|
complete -g newgrp groupdel groupmod
|
||||||
|
|
||||||
complete -f -X '!*.+(ps|PS)' gs gv ghostview psselect pswrap
|
complete -f -X '!*.+(ps|PS)' gs gv ghostview psselect pswrap
|
||||||
complete -f -X '!*.+(dvi|DVI)' dvips xdvi dviselect dvitype catdvi
|
complete -f -X '!*.+(dvi|DVI)' dvips xdvi dviselect dvitype catdvi
|
||||||
|
|
|
||||||
43
examples/complete/complete.gnu-longopt
Normal file
43
examples/complete/complete.gnu-longopt
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
#
|
||||||
|
# Originally from:
|
||||||
|
#
|
||||||
|
#Message-ID: <3B13EC65.179451AE@wanadoo.fr>
|
||||||
|
#Date: Tue, 29 May 2001 20:37:25 +0200
|
||||||
|
#From: Manu Rouat <emmanuel.rouat@wanadoo.fr>
|
||||||
|
#Subject: [bash] Universal command options completion?
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#In the recent versions of bash (after 2.04) programmable
|
||||||
|
#completion is available. A useful completion function
|
||||||
|
#is , for a particular command, to enumerate all flags
|
||||||
|
#that can be used in the command. Now, most GNU unix
|
||||||
|
#commands have so-called 'long options' for example:
|
||||||
|
#
|
||||||
|
#ls --color=always --no-group --size
|
||||||
|
#
|
||||||
|
#and these are all listed when you issue a '--help' flag.
|
||||||
|
#So the idea is to use that, then parse the output of the
|
||||||
|
#'--help' and reinject this to compgen. The basis of the
|
||||||
|
#following 'universal' completion funtion was the _configure_func'
|
||||||
|
#written by Ian McDonnald (or is it Chet Ramey ?)
|
||||||
|
#A dedicated function will always be better, but this is quite
|
||||||
|
#convenient. I chose to use 'long options' because they are
|
||||||
|
#easy to parse and explicit too (it's the point I guess...)
|
||||||
|
#Lots of room for improvement !
|
||||||
|
|
||||||
|
_longopt_func ()
|
||||||
|
{
|
||||||
|
case "$2" in
|
||||||
|
-*) ;;
|
||||||
|
*) return ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
\~*) eval cmd=$1 ;;
|
||||||
|
*) cmd="$1" ;;
|
||||||
|
esac
|
||||||
|
COMPREPLY=( $("$cmd" --help | sed -e '/--/!d' -e 's/.*--\([^ ]*\).*/--\1/'| \
|
||||||
|
grep ^"$2" |sort -u) )
|
||||||
|
}
|
||||||
|
|
||||||
|
complete -o default -F _longopt_func ldd wget bash id info # some examples that work
|
||||||
|
|
@ -51,7 +51,7 @@ autoload()
|
||||||
# yet defined, but we don't have enough information to do that here.
|
# yet defined, but we don't have enough information to do that here.
|
||||||
#
|
#
|
||||||
if [ $# -eq 0 ] ; then
|
if [ $# -eq 0 ] ; then
|
||||||
echo "usage: autoload function [function...]"
|
echo "usage: autoload function [function...]" >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -60,7 +60,7 @@ autoload()
|
||||||
#
|
#
|
||||||
|
|
||||||
if [ -z "$FPATH" ] ; then
|
if [ -z "$FPATH" ] ; then
|
||||||
echo autoload: FPATH not set
|
echo autoload: FPATH not set or null >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -71,17 +71,25 @@ autoload()
|
||||||
# The path splitting command is taken from Kernighan and Pike
|
# The path splitting command is taken from Kernighan and Pike
|
||||||
#
|
#
|
||||||
|
|
||||||
fp=$(echo $FPATH | sed 's/^:/.:/
|
# fp=$(echo $FPATH | sed 's/^:/.:/
|
||||||
s/::/:.:/g
|
# s/::/:.:/g
|
||||||
s/:$/:./
|
# s/:$/:./
|
||||||
s/:/ /g')
|
# s/:/ /g')
|
||||||
|
|
||||||
|
# replaced with builtin mechanisms 2001 Oct 10
|
||||||
|
|
||||||
|
fp=${FPATH/#:/.:}
|
||||||
|
fp=${fp//::/:.:}
|
||||||
|
fp=${fp/%:/:.}
|
||||||
|
fp=${fp//:/ }
|
||||||
|
|
||||||
for FUNC in $args ; do
|
for FUNC in $args ; do
|
||||||
#
|
#
|
||||||
# We're blowing away the arguments to autoload here...
|
# We're blowing away the arguments to autoload here...
|
||||||
# We have to; there are no arrays.
|
# We have to; there are no arrays (well, there are, but
|
||||||
|
# this doesn't use them yet).
|
||||||
#
|
#
|
||||||
set $fp
|
set -- $fp
|
||||||
|
|
||||||
while [ $# -ne 0 ] ; do
|
while [ $# -ne 0 ] ; do
|
||||||
if [ -f $1/$FUNC ] ; then
|
if [ -f $1/$FUNC ] ; then
|
||||||
|
|
@ -91,7 +99,7 @@ autoload()
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ $# -eq 0 ] ; then
|
if [ $# -eq 0 ] ; then
|
||||||
echo "$FUNC: autoload function not found"
|
echo "$FUNC: autoload function not found" >&2
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
# -p print in a format that can be reused as input
|
# -p print in a format that can be reused as input
|
||||||
# -u unset each function and remove it from the autoload list
|
# -u unset each function and remove it from the autoload list
|
||||||
#
|
#
|
||||||
# The first cut of this was by Bill Trost, trost@reed.bitnet
|
# The first cut of this was by Bill Trost, trost@reed.edu
|
||||||
#
|
#
|
||||||
# Chet Ramey
|
# Chet Ramey
|
||||||
# chet@ins.CWRU.Edu
|
# chet@ins.CWRU.Edu
|
||||||
|
|
|
||||||
109
examples/functions/coproc.bash
Normal file
109
examples/functions/coproc.bash
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
# coprocess.bash
|
||||||
|
#
|
||||||
|
# vi:set sts=2 sw=2 ai:
|
||||||
|
#
|
||||||
|
|
||||||
|
coprocess_pid=
|
||||||
|
|
||||||
|
#
|
||||||
|
# coprocess - Start, control, and end coprocesses.
|
||||||
|
#
|
||||||
|
function coprocess ()
|
||||||
|
{
|
||||||
|
while (( $# > 0 )) ; do
|
||||||
|
case "$1" in
|
||||||
|
#
|
||||||
|
# coprocess close
|
||||||
|
#
|
||||||
|
c|cl|clo|clos|close)
|
||||||
|
shift
|
||||||
|
exec 61>&- 62<&-
|
||||||
|
coprocess_pid=
|
||||||
|
if [ "$1" = "-SIGPIPE" ] ; then
|
||||||
|
# Only print message in an interactive shell
|
||||||
|
case "$-" in
|
||||||
|
*i*)
|
||||||
|
echo 'SIGPIPE' >&2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
#
|
||||||
|
# coprocess open
|
||||||
|
#
|
||||||
|
o|op|ope|open)
|
||||||
|
shift
|
||||||
|
local fifo="/var/tmp/coprocess.$$.$RANDOM"
|
||||||
|
|
||||||
|
local cmd="/bin/bash"
|
||||||
|
if (( $# > 0 )) ; then
|
||||||
|
cmd="$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkfifo "$fifo.in" || return $?
|
||||||
|
mkfifo "$fifo.out" || {
|
||||||
|
ret=$?
|
||||||
|
rm -f "$fifo.in"
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
( "$@" <$fifo.in >$fifo.out ; rm -f "$fifo.in" "$fifo.out" ) &
|
||||||
|
coprocess_pid=$!
|
||||||
|
exec 61>$fifo.in 62<$fifo.out
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
|
||||||
|
#
|
||||||
|
# coprocess print - write to the coprocess
|
||||||
|
#
|
||||||
|
p|pr|pri|prin|print)
|
||||||
|
shift
|
||||||
|
local old_trap=$(trap -p SIGPIPE)
|
||||||
|
trap 'coprocess close -SIGPIPE' SIGPIPE
|
||||||
|
if [ $# -eq 1 -a "$1" = "--stdin" ] ; then
|
||||||
|
cat >&61
|
||||||
|
else
|
||||||
|
echo "$@" >&61
|
||||||
|
fi
|
||||||
|
local ret=$?
|
||||||
|
eval "$old_trap"
|
||||||
|
return $ret
|
||||||
|
;;
|
||||||
|
|
||||||
|
#
|
||||||
|
# coprocess read - read from the coprocess
|
||||||
|
#
|
||||||
|
r|re|rea|read)
|
||||||
|
shift
|
||||||
|
local old_trap=$(trap -p SIGPIPE)
|
||||||
|
trap '_coprocess_close -SIGPIPE' SIGPIPE
|
||||||
|
builtin read "$@" <&62
|
||||||
|
local ret=$?
|
||||||
|
eval "$old_trap"
|
||||||
|
return $ret
|
||||||
|
;;
|
||||||
|
|
||||||
|
s|st|sta|stat|statu|status)
|
||||||
|
if [ -z "$coprocess_pid" ] ; then
|
||||||
|
echo 'no active coprocess'
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
echo " coprocess is active [$coprocess_pid]"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
coprocess print "$@"
|
||||||
|
return $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
coprocess status
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
53
examples/functions/coshell.README
Normal file
53
examples/functions/coshell.README
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
Date: Fri, 21 Sep 2001 14:50:29 -0400
|
||||||
|
From: "Jason M. Felice" <jfelice@cronosys.com>
|
||||||
|
To: bash-maintainers@gnu.org, chet@po.cwru.edu
|
||||||
|
Subject: Bash co-processes functions
|
||||||
|
Message-ID: <20010921145029.A6093@argo.eraserhead.net>
|
||||||
|
Mime-Version: 1.0
|
||||||
|
|
||||||
|
Attached to this message you will find coprocess.bash and coshell.bash.
|
||||||
|
Here's a brief synopsis of use:
|
||||||
|
|
||||||
|
coprocess open telnet localhost
|
||||||
|
while coprocess read il ; do
|
||||||
|
echo "$il"
|
||||||
|
case "$il" in
|
||||||
|
*ogin:*)
|
||||||
|
coprocess print 'user'
|
||||||
|
;;
|
||||||
|
*ord:*)
|
||||||
|
echo 'pass' |coprocess print --stdin
|
||||||
|
;;
|
||||||
|
*$ *)
|
||||||
|
coprocess print 'exit'
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
coprocess close
|
||||||
|
|
||||||
|
And here's an example of the coshell function:
|
||||||
|
|
||||||
|
coshell open ssh -l root otherbox
|
||||||
|
coshell eval hostname
|
||||||
|
coshell ls -l
|
||||||
|
if coshell test -d /tmp ; then echo 'otherbox has a /tmp!' ; fi
|
||||||
|
|
||||||
|
coshell sendfile /var/lib/upgrade.rpm /tmp/test.rpm || exit $?
|
||||||
|
coshell eval rpm -ivh /tmp/test.rpm || exit $?
|
||||||
|
coshell eval rm -f /tmp/test.rpm || exit $?
|
||||||
|
coshell close
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
There are a few minor issues that I'd like to work out, but it works well
|
||||||
|
enough for me ;-) The issues are:
|
||||||
|
|
||||||
|
- Shell quoting issue with 'coshell eval' commands - need to somehow
|
||||||
|
re-quote words.
|
||||||
|
- Interactive commands hang 'coshell eval', tried redirecting in </dev/null
|
||||||
|
to executed command, but it caused strange shell exit problems.
|
||||||
|
- Some way to copy stdin from local coshell eval to remote shell. Probably
|
||||||
|
logically impossible, but would be wonderfully useful.
|
||||||
|
|
||||||
|
I'm using it for writing scripts to publish websites and other scripts to
|
||||||
|
co-located servers.
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue