summary refs log tree commit diff
path: root/src/expand.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-10-06 00:45:52 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2007-10-06 00:45:52 +0800
commit8e633ab936625fa1e897c5c062f70705996e7b85 (patch)
tree3e2bcf12e7584983749e6616123f8e36096b8e86 /src/expand.c
parent[MEMALLOC] Made grabstackblock an inline wrapper for stalloc (diff)
downloaddash-8e633ab936625fa1e897c5c062f70705996e7b85.tar.gz
dash-8e633ab936625fa1e897c5c062f70705996e7b85.zip
[MEMALLOC] Add pushstackmark
This patch gets rid of the stack mark tracking hack by allocating a little
bit of stack memory if we're at risk of planting a stack mark which may be
grown later.  To do this a new function pushstackmark is added which lets
the user pick a bigger amount to allocate since some users do that anyway
after setting a stack mark.
Diffstat (limited to 'src/expand.c')
-rw-r--r--src/expand.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/src/expand.c b/src/expand.c
index 98ad718..e3e5d8f 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -546,10 +546,8 @@ expbackq(union node *cmd, int flag)
 	struct stackmark smark;
 
 	INTOFF;
-	setstackmark(&smark);
-	dest = expdest;
-	startloc = dest - (char *)stackblock();
-	grabstackstr(dest);
+	startloc = expdest - (char *)stackblock();
+	pushstackmark(&smark, startloc);
 	evalbackcmd(cmd, (struct backcmd *) &in);
 	popstackmark(&smark);