summaryrefslogtreecommitdiff
path: root/copy_cmd.c
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2010-10-11 14:49:26 -0700
committerStephen Hemminger <stephen.hemminger@vyatta.com>2010-10-11 15:19:40 -0700
commit011c1d1c0766c65517ebd495465c99e86edb63ec (patch)
tree30d8f6a13235af90897c3223554871ef52225462 /copy_cmd.c
parent40cfaccf7b178b6239b5cd0013ef80b7ff8e503e (diff)
downloadvyatta-bash-011c1d1c0766c65517ebd495465c99e86edb63ec.tar.gz
vyatta-bash-011c1d1c0766c65517ebd495465c99e86edb63ec.zip
Update to bash-4.1
Diffstat (limited to 'copy_cmd.c')
-rw-r--r--copy_cmd.c50
1 files changed, 39 insertions, 11 deletions
diff --git a/copy_cmd.c b/copy_cmd.c
index d36436c..911d34f 100644
--- a/copy_cmd.c
+++ b/copy_cmd.c
@@ -2,23 +2,23 @@
primarily for making function definitions, but I'm not sure
that anyone else will need it. */
-/* Copyright (C) 1987,1991 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2009 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 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 3 of the License, 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.
+ 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. */
+ along with Bash. If not, see <http://www.gnu.org/licenses/>.
+*/
#include "config.h"
@@ -40,6 +40,7 @@ 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 COPROC_COM *copy_coproc_command __P((COPROC_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 *));
@@ -85,6 +86,7 @@ copy_case_clause (clause)
new_clause = (PATTERN_LIST *)xmalloc (sizeof (PATTERN_LIST));
new_clause->patterns = copy_word_list (clause->patterns);
new_clause->action = copy_command (clause->action);
+ new_clause->flags = clause->flags;
return (new_clause);
}
@@ -111,7 +113,15 @@ copy_redirect (redirect)
REDIRECT *new_redirect;
new_redirect = (REDIRECT *)xmalloc (sizeof (REDIRECT));
+#if 0
FASTCOPY ((char *)redirect, (char *)new_redirect, (sizeof (REDIRECT)));
+#else
+ *new_redirect = *redirect; /* let the compiler do the fast structure copy */
+#endif
+
+ if (redirect->rflags & REDIR_VARASSIGN)
+ new_redirect->redirector.filename = copy_word (redirect->redirector.filename);
+
switch (redirect->instruction)
{
case r_reading_until:
@@ -124,6 +134,7 @@ copy_redirect (redirect)
case r_input_direction:
case r_inputa_direction:
case r_err_and_out:
+ case r_append_err_and_out:
case r_input_output:
case r_output_force:
case r_duplicating_input_word:
@@ -213,6 +224,19 @@ copy_subshell_command (com)
return (new_subshell);
}
+static COPROC_COM *
+copy_coproc_command (com)
+ COPROC_COM *com;
+{
+ COPROC_COM *new_coproc;
+
+ new_coproc = (COPROC_COM *)xmalloc (sizeof (COPROC_COM));
+ new_coproc->name = savestring (com->name);
+ new_coproc->command = copy_command (com->command);
+ new_coproc->flags = com->flags;
+ return (new_coproc);
+}
+
static CASE_COM *
copy_case_command (com)
CASE_COM *com;
@@ -373,6 +397,10 @@ copy_command (command)
new_command->value.Subshell = copy_subshell_command (command->value.Subshell);
break;
+ case cm_coproc:
+ new_command->value.Coproc = copy_coproc_command (command->value.Coproc);
+ break;
+
case cm_case:
new_command->value.Case = copy_case_command (command->value.Case);
break;