summary refs log tree commit diff
path: root/src/memalloc.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2018-05-19 02:39:46 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2018-05-28 17:12:23 +0800
commita9c4e4c9fc11cf1bd17d08e166405f7ab355a9f3 (patch)
tree32908ba144ab91e89b3d483b3a25c659ddad2a78 /src/memalloc.c
parentjobs: Replace some uses of fmtstr with stpcpy/stpncpy (diff)
downloaddash-a9c4e4c9fc11cf1bd17d08e166405f7ab355a9f3.tar.gz
dash-a9c4e4c9fc11cf1bd17d08e166405f7ab355a9f3.zip
memalloc: Add growstackto helper
This patch adds the growstackto helper which repeatedly calls
growstackblock until the requested size is reached.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src/memalloc.c')
-rw-r--r--src/memalloc.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/memalloc.c b/src/memalloc.c
index d8e4413..9d1de74 100644
--- a/src/memalloc.c
+++ b/src/memalloc.c
@@ -265,6 +265,14 @@ growstackstr(void)
 	return stackblock() + len;
 }
 
+char *growstackto(size_t len)
+{
+	while (stackblocksize() < len)
+		growstackblock();
+
+	return stackblock();
+}
+
 /*
  * Called from CHECKSTRSPACE.
  */
@@ -273,18 +281,8 @@ char *
 makestrspace(size_t newlen, char *p)
 {
 	size_t len = p - stacknxt;
-	size_t size;
 
-	for (;;) {
-		size_t nleft;
-
-		size = stackblocksize();
-		nleft = size - len;
-		if (nleft >= newlen)
-			break;
-		growstackblock();
-	}
-	return stackblock() + len;
+	return growstackto(len + newlen) + len;
 }
 
 char *