X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Fbash.git;a=blobdiff_plain;f=copy_cmd.c;h=826e0c3a4650b1833888176d50c93d62a2ce9d4e;hp=d36436c9c8437550b0c3bcd665849746dbcb1e1d;hb=HEAD;hpb=b80f6443b6b7b620c7272664c66ecb0b120a0998 diff --git a/copy_cmd.c b/copy_cmd.c index d36436c..826e0c3 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 . +*/ #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,12 +113,20 @@ 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: case r_deblank_reading_until: - new_redirect->here_doc_eof = savestring (redirect->here_doc_eof); + new_redirect->here_doc_eof = redirect->here_doc_eof ? savestring (redirect->here_doc_eof) : 0; /*FALLTHROUGH*/ case r_reading_string: case r_appending_to: @@ -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;