commit bash-20101022 snapshot

This commit is contained in:
Chet Ramey
2011-12-12 22:08:43 -05:00
parent 048b249ea3
commit bf19c529dd
12 changed files with 62 additions and 117 deletions
-42
View File
@@ -10474,45 +10474,3 @@ execute_cmd.c
saved_redirects is non-null in the `command exec' case. Fixes
sh -c 'command exec; exit 1' hanging bug uncovered by FreeBSD
sh test cases
10/18
-----
subst.c
- when in posix mode, shell should not exit if a variable assignment
error (e.g., assigning to readonly variable) occurs preceding a
command that is not a special builtin. Fixes bug uncovered by
FreeBSD sh test cases
- when in posix mode, the ${!?} and ${!#} expansions are not indirect
expansions, but posix word expansions involving the `!' variable
parse.y
- fix parse_comsub so that it does not skip backslash-newline when
parsing a comment
10/19
-----
subst.c
- fix parameter_brace_expand so that an attempt to use the % or #
expansions on an unset variable with -u set will cause a non-
interactive shell to abort. Posix change
- fix parameter_brace_expand so that an attempt to use pattern
substitution or case modification expansions on an unset variable
with -u set will cause and unbound variable error and make a
non-interactive shell abort
- change parameter_brace_expand_length to return INTMAX_MIN if a
positional parameter is unset and -u is set
- if parameter_brace_expand_length returns INTMAX_MIN when -u is set,
treat it as an unbound variable error and make a non-interactive
shell abort. Posix change
- change parameter_brace_expand_length to return INTMAX_MIN if an
implicit reference to array[0] is made ${#array} and array[0] is
not set when -u is set
10/20
-----
builtins/cd.def
- Posix 2008 says that if no matching directories are found in $CDPATH,
use the directory name passed as an operand and go on. Posix change
doc/bashref.texi
- change Posix mode section with latest additions and removals
-2
View File
@@ -283,7 +283,6 @@ cd_builtin (list)
free (temp);
}
#if 0 /* changed for bash-4.2 Posix cd description steps 5-6 */
/* POSIX.2 says that if `.' does not appear in $CDPATH, we don't
try the current directory, so we just punt now with an error
message if POSIXLY_CORRECT is non-zero. The check for cdpath[0]
@@ -294,7 +293,6 @@ cd_builtin (list)
builtin_error ("%s: %s", dirname, strerror (ENOENT));
return (EXECUTION_FAILURE);
}
#endif
}
else
dirname = list->word->word;
+1 -5
View File
@@ -35,11 +35,7 @@ value. If ARG is the null string each SIGNAL_SPEC is ignored by the
shell and by the commands it invokes.
If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell. If
a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command. If
a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a
script run by the . or source builtins finishes executing. A SIGNAL_SPEC
of ERR means to execute ARG each time a command's failure would cause the
shell to exit when the -e option is enabled.
a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.
If no arguments are supplied, trap prints the list of commands associated
with each signal.
+2 -2
View File
@@ -9366,8 +9366,8 @@ is
.BR RETURN ,
the command
.I arg
is executed each time a shell function or a script executed with
the \fB.\fP or \fBsource\fP builtins finishes executing.
is executed each time a shell function or a script executed with the
\fB.\fP or \fBsource\fP builtins finishes executing.
.if t .sp 0.5
.if n .sp 1
If a
+12 -5
View File
@@ -6694,6 +6694,14 @@ the @sc{posix} standard, and include things like passing incorrect options,
redirection errors, variable assignment errors for assignments preceding
the command name, and so on.
@item
If @env{CDPATH} is set, the @code{cd} builtin will not implicitly
append the current directory to it. This means that @code{cd} will
fail if no valid directory name can be constructed from
any of the entries in @env{$CDPATH}, even if the a directory with
the same name as the name given as an argument to @code{cd} exists
in the current directory.
@item
A non-interactive shell exits with an error status if a variable
assignment error occurs when no command name follows the assignment
@@ -6701,11 +6709,6 @@ statements.
A variable assignment error occurs, for example, when trying to assign
a value to a readonly variable.
@item
A non-interactive shell exists with an error status if a variable
assignment error occurs in an assignment statement preceding a special
builtin, but not with any other simple command.
@item
A non-interactive shell exits with an error status if the iteration
variable in a @code{for} statement or the selection variable in a
@@ -6771,6 +6774,10 @@ constructed from @code{$PWD} and the directory name supplied as an argument
does not refer to an existing directory, @code{cd} will fail instead of
falling back to @var{physical} mode.
@item
When the @code{pwd} builtin is supplied the @option{-P} option, it resets
@code{$PWD} to a pathname containing no symlinks.
@item
The @code{pwd} builtin verifies that the value it prints is the same as the
current directory, even if it is not asked to check the file system with the
+3 -3
View File
@@ -2,9 +2,9 @@
Copyright (C) 1988-2010 Free Software Foundation, Inc.
@end ignore
@set LASTCHANGE Wed Oct 20 21:37:22 EDT 2010
@set LASTCHANGE Mon Sep 6 22:08:10 EDT 2010
@set EDITION 4.2
@set VERSION 4.2
@set UPDATED 20 October 2010
@set UPDATED-MONTH October 2010
@set UPDATED 6 September 2010
@set UPDATED-MONTH September 2010
+1
View File
@@ -103,6 +103,7 @@
#ifndef TOCTRL
/* letter to control char -- ASCII. The TOUPPER is in there so \ce and
\cE will map to the same character in $'...' expansions. */
/* XXX - should this be TOUPPER(x) ^ x040 ? */
# define TOCTRL(x) (TOUPPER(x) & 037)
#endif
#ifndef UNCTRL
+2 -2
View File
@@ -3165,7 +3165,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
start_lineno = line_number;
while (count)
{
ch = shell_getc (qc != '\'' && (tflags & (LEX_PASSNEXT)) == 0);
ch = shell_getc (qc != '\'' && (tflags & LEX_PASSNEXT) == 0);
if (ch == EOF)
{
@@ -3434,7 +3434,7 @@ parse_comsub (qc, open, close, lenp, flags)
while (count)
{
comsub_readchar:
ch = shell_getc (qc != '\'' && (tflags & (LEX_INCOMMENT|LEX_PASSNEXT)) == 0);
ch = shell_getc (qc != '\'' && (tflags & LEX_PASSNEXT) == 0);
if (ch == EOF)
{
+2 -2
View File
@@ -14,7 +14,7 @@ msgstr ""
"Project-Id-Version: bash 4.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-12-30 08:25-0500\n"
"PO-Revision-Date: 2010-01-03 22:30+0100\n"
"PO-Revision-Date: 2010-10-18 22:31+0200\n"
"Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -411,7 +411,7 @@ msgstr "toto není login shell: použijte „exit“"
#: builtins/exit.def:120
#, c-format
msgid "There are stopped jobs.\n"
msgstr "Jsou zde pozastavení úlohy.\n"
msgstr "Jsou zde pozastavené úlohy.\n"
#: builtins/exit.def:122
#, c-format
+17 -17
View File
@@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: GNU bash 4.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-12-30 08:25-0500\n"
"PO-Revision-Date: 2010-08-19 15:21+0900\n"
"PO-Revision-Date: 2010-10-17 19:38+0900\n"
"Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
"Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
"MIME-Version: 1.0\n"
@@ -67,7 +67,7 @@ msgstr "%s: 区切り文字コロン(:)がありません"
#: builtins/alias.def:132
#, c-format
msgid "`%s': invalid alias name"
msgstr "%s: 無効なエイリアス名です"
msgstr "`%s': 無効なエイリアス名です"
#: builtins/bind.def:120 builtins/bind.def:123
msgid "line editing not enabled"
@@ -362,7 +362,7 @@ msgstr "%s: 動的にロードされていません"
#: builtins/enable.def:474
#, c-format
msgid "%s: cannot delete: %s"
msgstr "%s: %s を削除できません"
msgstr "%s: 削除できません: %s"
#: builtins/evalfile.c:134 builtins/hash.def:169 execute_cmd.c:4794
#: shell.c:1452
@@ -389,7 +389,7 @@ msgstr "%s: バイナリファイルを実行できません"
#: builtins/exec.def:212
#, c-format
msgid "%s: cannot execute: %s"
msgstr "%s: %s を実行できません"
msgstr "%s: 実行できません: %s"
#: builtins/exit.def:65
#, c-format
@@ -421,7 +421,7 @@ msgstr "ヒストリ指定"
#: builtins/fc.def:370
#, c-format
msgid "%s: cannot open temp file: %s"
msgstr "%s: 一時ファイル %s を開くことができません"
msgstr "%s: 一時ファイルを開くことができません: %s"
#: builtins/fg_bg.def:149 builtins/jobs.def:282
msgid "current"
@@ -470,7 +470,7 @@ msgstr "`%s' に一致するヘルプ項目がありません。`help help'、`m
#: builtins/help.def:185
#, c-format
msgid "%s: cannot open: %s"
msgstr "%s: %s を開くことができません"
msgstr "%s: 開くことができません: %s"
#: builtins/help.def:337
#, c-format
@@ -534,7 +534,7 @@ msgstr "%s: インデックス配列ではありません"
#: builtins/mapfile.def:249 builtins/read.def:279
#, c-format
msgid "%s: invalid file descriptor specification"
msgstr "%s: 指定したファイル記述子は無効です"
msgstr "%s: 無効なファイル記述子指定です"
#: builtins/mapfile.def:257 builtins/read.def:286
#, c-format
@@ -817,7 +817,7 @@ msgstr "%s は %s です\n"
#: builtins/type.def:337
#, c-format
msgid "%s is hashed (%s)\n"
msgstr "%s はハッシュされてい (%s)\n"
msgstr "%s はハッシュされています (%s)\n"
#: builtins/ulimit.def:372
#, c-format
@@ -827,7 +827,7 @@ msgstr "%s: limit の無効な引数です"
#: builtins/ulimit.def:398
#, c-format
msgid "`%c': bad command"
msgstr "`%c': 誤った指定です"
msgstr "`%c': 誤ったコマンドです"
#: builtins/ulimit.def:427
#, c-format
@@ -900,7 +900,7 @@ msgstr "\a入力待ちがタイムアウトしました: 自動ログアウト\n
#: execute_cmd.c:497
#, c-format
msgid "cannot redirect standard input from /dev/null: %s"
msgstr "/dev/null を入力にリダイレクトできません: %s"
msgstr "/dev/null から標準入力に対してリダイレクトできません: %s"
#: execute_cmd.c:1162
#, c-format
@@ -914,7 +914,7 @@ msgstr "パイプエラー"
#: execute_cmd.c:4481
#, c-format
msgid "%s: restricted: cannot specify `/' in command names"
msgstr "%s: 制限されています: `/' をコマンド名に指定できません"
msgstr "%s: 制限されています: `/' をコマンド名の中に指定できません"
#: execute_cmd.c:4572
#, c-format
@@ -953,7 +953,7 @@ msgstr "0 による除算です"
#: expr.c:471
msgid "bug: bad expassign token"
msgstr "bug: 誤った式のトークンです"
msgstr "バグ: 誤った式のトークンです"
#: expr.c:513
msgid "`:' expected for conditional expression"
@@ -1038,7 +1038,7 @@ msgstr "add_process: プロセス %5ld (%s) が the_pipeline にあります"
#: jobs.c:1113
#, c-format
msgid "add_process: pid %5ld (%s) marked as still alive"
msgstr "add_process: pid %5ld (%s) はまだ存在しています"
msgstr "add_process: pid %5ld (%s) はまだ存在しているとマークされています"
#: jobs.c:1401
#, c-format
@@ -1159,7 +1159,7 @@ msgstr "端末プロセスグループを設定できません (%d)"
#: jobs.c:3682
msgid "no job control in this shell"
msgstr "このシェルはジョブ制御がありません"
msgstr "このシェルはジョブ制御が無効になっています"
#: lib/malloc/malloc.c:296
#, c-format
@@ -1172,8 +1172,8 @@ msgid ""
"\r\n"
"malloc: %s:%d: assertion botched\r\n"
msgstr ""
"\\r\n"
"malloc: %s:%d: アサーション失敗\\r\n"
"\r\n"
"malloc: %s:%d: アサーション失敗\r\n"
#: lib/malloc/malloc.c:313
msgid "unknown"
@@ -1181,7 +1181,7 @@ msgstr "不明"
#: lib/malloc/malloc.c:797
msgid "malloc: block on free list clobbered"
msgstr "malloc: block on free リストにあるブロックが壊れています"
msgstr "malloc: free ブロックリストが壊れています"
#: lib/malloc/malloc.c:874
msgid "free: called with already freed block argument"
+21 -36
View File
@@ -108,7 +108,7 @@ extern int errno;
/* Evaluates to 1 if C is one of the shell's special parameters for which an
indirect variable reference may be made. */
#define VALID_INDIR_PARAM(c) \
((posixly_correct == 0 && (c) == '#') || (posixly_correct == 0 && (c) == '?') || (c) == '@' || (c) == '*')
((c) == '#' || (c) == '?' || (c) == '@' || (c) == '*')
/* Evaluates to 1 if C is one of the OP characters that follows the parameter
in ${parameter[:]OPword}. */
@@ -5907,7 +5907,7 @@ parameter_brace_expand_length (name)
break;
case '!':
if (last_asynchronous_pid == NO_PID)
t = (char *)NULL; /* XXX - error if set -u set? */
t = (char *)NULL;
else
t = itos (last_asynchronous_pid);
break;
@@ -5929,8 +5929,6 @@ parameter_brace_expand_length (name)
if (legal_number (name + 1, &arg_index)) /* ${#1} */
{
t = get_dollar_var_value (arg_index);
if (t == 0 && unbound_vars_is_error)
return INTMAX_MIN;
number = MB_STRLEN (t);
FREE (t);
}
@@ -5941,8 +5939,6 @@ parameter_brace_expand_length (name)
t = assoc_reference (assoc_cell (var), "0");
else
t = array_reference (array_cell (var), 0);
if (t == 0 && unbound_vars_is_error)
return INTMAX_MIN;
number = MB_STRLEN (t);
}
#endif
@@ -6944,8 +6940,15 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
/* If the name really consists of a special variable, then make sure
that we have the entire name. We don't allow indirect references
to special variables except `#', `?', `@' and `*'. */
if ((sindex == t_index && VALID_SPECIAL_LENGTH_PARAM (string[t_index])) ||
(sindex == t_index - 1 && string[sindex] == '!' && VALID_INDIR_PARAM (string[t_index])))
if ((sindex == t_index &&
(string[t_index] == '-' ||
string[t_index] == '?' ||
string[t_index] == '#')) ||
(sindex == t_index - 1 && string[sindex] == '!' &&
(string[t_index] == '#' ||
string[t_index] == '?' ||
string[t_index] == '@' ||
string[t_index] == '*')))
{
t_index++;
free (name);
@@ -7040,13 +7043,6 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
}
number = parameter_brace_expand_length (name);
if (number == INTMAX_MIN && unbound_vars_is_error)
{
last_command_exit_value = EXECUTION_FAILURE;
err_unboundvar (name+1);
free (name);
return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
}
free (name);
*indexp = sindex;
@@ -7182,21 +7178,6 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
*indexp = sindex;
/* All the cases where an expansion can possibly generate an unbound
variable error. */
if (want_substring || want_patsub || want_casemod || c == '#' || c == '%' || c == RBRACE)
{
if (var_is_set == 0 && unbound_vars_is_error && ((name[0] != '@' && name[0] != '*') || name[1]))
{
last_command_exit_value = EXECUTION_FAILURE;
err_unboundvar (name);
FREE (value);
FREE (temp);
free (name);
return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
}
}
/* If this is a substring spec, process it and add the result. */
if (want_substring)
{
@@ -7270,6 +7251,15 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
return &expand_wdesc_error;
case RBRACE:
if (var_is_set == 0 && unbound_vars_is_error && ((name[0] != '@' && name[0] != '*') || name[1]))
{
last_command_exit_value = EXECUTION_FAILURE;
err_unboundvar (name);
FREE (value);
FREE (temp);
free (name);
return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
}
break;
case '#': /* ${param#[#]pattern} */
@@ -9334,7 +9324,6 @@ expand_word_list_internal (list, eflags)
if ((eflags & WEXP_VARASSIGN) && subst_assign_varlist)
{
sh_wassign_func_t *assign_func;
int is_special_builtin;
/* If the remainder of the words expand to nothing, Posix.2 requires
that the variable and environment assignments affect the shell's
@@ -9342,10 +9331,6 @@ expand_word_list_internal (list, eflags)
assign_func = new_list ? assign_in_env : do_word_assignment;
tempenv_assign_error = 0;
/* Posix says that special builtins exit if a variable assignment error
occurs in an assignment preceding it. */
is_special_builtin = (posixly_correct && new_list && find_special_builtin (new_list->word->word));
for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next)
{
this_command_name = (char *)NULL;
@@ -9359,7 +9344,7 @@ expand_word_list_internal (list, eflags)
if (assign_func == do_word_assignment)
{
last_command_exit_value = EXECUTION_FAILURE;
if (interactive_shell == 0 && posixly_correct && is_special_builtin)
if (interactive_shell == 0 && posixly_correct)
exp_jump_to_top_level (FORCE_EOF);
else
exp_jump_to_top_level (DISCARD);
+1 -1
View File
@@ -1,4 +1,4 @@
BUILD_DIR=/usr/local/build/bash/bash-current
BUILD_DIR=/usr/local/build/chet/bash/bash-current
THIS_SH=$BUILD_DIR/bash
PATH=$PATH:$BUILD_DIR