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
This commit is contained in:
Jilles Tjoelker 2010-12-12 00:07:27 +00:00
parent 20d1a304b3
commit 9f5a68a002
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=216387
3 changed files with 0 additions and 15 deletions

View File

@ -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, int flag)
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, int flag)
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 strloc, int subtype, int startloc,
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)

View File

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

View File

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