svn commit: r216387 - head/bin/sh

Jilles Tjoelker jilles at FreeBSD.org
Sun Dec 12 00:07:27 UTC 2010


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);


More information about the svn-src-head mailing list