From owner-svn-src-all@FreeBSD.ORG Sun Dec 12 00:07:27 2010 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B45A5106564A; Sun, 12 Dec 2010 00:07:27 +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 A29D48FC14; Sun, 12 Dec 2010 00:07:27 +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 oBC07R6t021966; Sun, 12 Dec 2010 00:07:27 GMT (envelope-from jilles@svn.freebsd.org) Received: (from jilles@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oBC07R7L021962; Sun, 12 Dec 2010 00:07:27 GMT (envelope-from jilles@svn.freebsd.org) Message-Id: <201012120007.oBC07R7L021962@svn.freebsd.org> From: Jilles Tjoelker Date: Sun, 12 Dec 2010 00:07:27 +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: r216387 - head/bin/sh X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 12 Dec 2010 00:07:27 -0000 Author: jilles Date: Sun Dec 12 00:07:27 2010 New Revision: 216387 URL: http://svn.freebsd.org/changeset/base/216387 Log: sh: Remove the herefd hack. The herefd hack wrote out partial here documents while expanding them. It seems unnecessary complication given that other expansions just allocate memory. It causes bugs because the stack is also used for intermediate results such as arithmetic expressions. Such places should disable herefd for the duration but not all of them do, and I prefer removing the need for disabling herefd to disabling it everywhere needed. Here documents larger than 1024 bytes will use a bit more CPU time and memory. Additionally this allows a later change to expand here documents in the current shell environment. (This is faster for small here documents but also changes behaviour.) Obtained from: dash Modified: head/bin/sh/expand.c head/bin/sh/memalloc.c head/bin/sh/memalloc.h Modified: head/bin/sh/expand.c ============================================================================== --- head/bin/sh/expand.c Sat Dec 11 23:48:10 2010 (r216386) +++ head/bin/sh/expand.c Sun Dec 12 00:07:27 2010 (r216387) @@ -132,7 +132,6 @@ collate_range_cmp(int c1, int c2) void expandhere(union node *arg, int fd) { - herefd = fd; expandarg(arg, (struct arglist *)NULL, 0); xwrite(fd, stackblock(), expdest - stackblock()); } @@ -469,7 +468,6 @@ expbackq(union node *cmd, int quoted, in char lastc; int startloc = dest - stackblock(); char const *syntax = quoted? DQSYNTAX : BASESYNTAX; - int saveherefd; int quotes = flag & (EXP_FULL | EXP_CASE | EXP_REDIR); int nnl; @@ -477,15 +475,12 @@ expbackq(union node *cmd, int quoted, in saveifs = ifsfirst; savelastp = ifslastp; saveargbackq = argbackq; - saveherefd = herefd; - herefd = -1; p = grabstackstr(dest); evalbackcmd(cmd, &in); ungrabstackstr(p, dest); ifsfirst = saveifs; ifslastp = savelastp; argbackq = saveargbackq; - herefd = saveherefd; p = in.buf; lastc = '\0'; @@ -544,16 +539,13 @@ subevalvar(char *p, char *str, int strlo char *loc = NULL; char *q; int c = 0; - int saveherefd = herefd; struct nodelist *saveargbackq = argbackq; int amount; - herefd = -1; argstr(p, (subtype == VSTRIMLEFT || subtype == VSTRIMLEFTMAX || subtype == VSTRIMRIGHT || subtype == VSTRIMRIGHTMAX ? EXP_CASE : 0) | EXP_TILDE); STACKSTRNUL(expdest); - herefd = saveherefd; argbackq = saveargbackq; startp = stackblock() + startloc; if (str == NULL) Modified: head/bin/sh/memalloc.c ============================================================================== --- head/bin/sh/memalloc.c Sat Dec 11 23:48:10 2010 (r216386) +++ head/bin/sh/memalloc.c Sun Dec 12 00:07:27 2010 (r216387) @@ -128,7 +128,6 @@ static struct stackmark *markp; char *stacknxt; int stacknleft; int sstrnleft; -int herefd = -1; static void @@ -309,11 +308,6 @@ growstackstr(void) int len; len = stackblocksize(); - if (herefd >= 0 && len >= 1024) { - xwrite(herefd, stackblock(), len); - sstrnleft = len; - return stackblock(); - } return growstrstackblock(len); } Modified: head/bin/sh/memalloc.h ============================================================================== --- head/bin/sh/memalloc.h Sat Dec 11 23:48:10 2010 (r216386) +++ head/bin/sh/memalloc.h Sun Dec 12 00:07:27 2010 (r216387) @@ -46,7 +46,6 @@ struct stackmark { extern char *stacknxt; extern int stacknleft; extern int sstrnleft; -extern int herefd; pointer ckmalloc(size_t); pointer ckrealloc(pointer, int);