From owner-svn-src-head@FreeBSD.ORG Wed Jan 5 23:17:29 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7B0161065674; Wed, 5 Jan 2011 23:17:29 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4F64C8FC15; Wed, 5 Jan 2011 23:17:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p05NHTT7094330; Wed, 5 Jan 2011 23:17:29 GMT (envelope-from jilles@svn.freebsd.org) Received: (from jilles@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p05NHTL1094327; Wed, 5 Jan 2011 23:17:29 GMT (envelope-from jilles@svn.freebsd.org) Message-Id: <201101052317.p05NHTL1094327@svn.freebsd.org> From: Jilles Tjoelker Date: Wed, 5 Jan 2011 23:17:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217035 - in head: bin/sh tools/regression/bin/sh/builtins X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 05 Jan 2011 23:17:29 -0000 Author: jilles Date: Wed Jan 5 23:17:29 2011 New Revision: 217035 URL: http://svn.freebsd.org/changeset/base/217035 Log: sh: Do not call exitshell() from evalcommand() unless evalcommand() forked itself. This ensures that certain traps caused by builtins are executed. Added: head/tools/regression/bin/sh/builtins/trap4.0 (contents, props changed) Modified: head/bin/sh/eval.c Modified: head/bin/sh/eval.c ============================================================================== --- head/bin/sh/eval.c Wed Jan 5 23:15:22 2011 (r217034) +++ head/bin/sh/eval.c Wed Jan 5 23:17:29 2011 (r217035) @@ -671,6 +671,7 @@ safe_builtin(int idx, int argc, char **a /* * Execute a simple command. + * Note: This may or may not return if (flags & EV_EXIT). */ static void @@ -707,6 +708,7 @@ evalcommand(union node *cmd, int flags, arglist.lastp = &arglist.list; varlist.lastp = &varlist.list; varflag = 1; + jp = NULL; do_clearcmdentry = 0; oexitstatus = exitstatus; exitstatus = 0; @@ -965,7 +967,7 @@ evalcommand(union node *cmd, int flags, evalskip = 0; skipcount = 0; } - if (flags & EV_EXIT) + if (jp) exitshell(exitstatus); } else if (cmdentry.cmdtype == CMDBUILTIN) { #ifdef DEBUG @@ -1013,13 +1015,12 @@ cmddone: out1 = &output; out2 = &errout; freestdout(); + handler = savehandler; if (e != EXSHELLPROC) { commandname = savecmdname; - if (flags & EV_EXIT) { + if (jp) exitshell(exitstatus); - } } - handler = savehandler; if (flags == EV_BACKCMD) { backcmd->buf = memout.buf; backcmd->nleft = memout.nextc - memout.buf; Added: head/tools/regression/bin/sh/builtins/trap4.0 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tools/regression/bin/sh/builtins/trap4.0 Wed Jan 5 23:17:29 2011 (r217035) @@ -0,0 +1,17 @@ +# $FreeBSD$ + +T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) +trap 'rm -rf $T' 0 +cd $T || exit 3 +mkfifo fifo1 + +v=$( + exec 3>&1 + : &3 2>/dev/null' PIPE + echo x 2>/dev/null + } >fifo1 +) +test "$v" = trapped