summary refs log tree commit diff
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2015-12-10 18:14:16 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2015-12-10 18:14:16 +0100
commitb43f0e6ee8d97b6490a1c0c9666b23133300677b (patch)
treed04051aace0ca491feab861318cc708cf6d99bfe
parenta6b3434895a3f95a089b500070a6dbdaa22a7155 (diff)
downloadxe-b43f0e6ee8d97b6490a1c0c9666b23133300677b.tar.gz
xe-b43f0e6ee8d97b6490a1c0c9666b23133300677b.tar.xz
xe-b43f0e6ee8d97b6490a1c0c9666b23133300677b.zip
bump max arguments to 8192 and don't reallocate
-rw-r--r--xe.c12
1 files changed, 2 insertions, 10 deletions
diff --git a/xe.c b/xe.c
index 05eed2a..652d22e 100644
--- a/xe.c
+++ b/xe.c
@@ -143,14 +143,6 @@ scanargs()
 	char *s = buf;
 	size_t i;
 
-	if (argslen + 1 >= argscap) {
-		while (argslen + 1 >= argscap)
-			argscap *= 2;
-		args = realloc(args, sizeof args[0] * argscap);
-		if (!args)
-			exit(1);
-	}
-
 	for (i = 0; i < argslen; i++) {
 		args[i] = s;
 		s += strlen(s) + 1;
@@ -163,7 +155,7 @@ pusharg(const char *a)
 {
 	size_t l = strlen(a) + 1;   // including nul
 
-	if (buflen >= argmax - l) {
+	if (buflen >= argmax - l || argslen + 1 >= argscap) {
 		push_overflowed = 1;
 		return 0;
 	}
@@ -235,7 +227,7 @@ main(int argc, char *argv[])
 	bufcap = 4096;
 	buf = malloc(bufcap);
 
-	argscap = 4096;
+	argscap = 8192;
 	args = malloc(sizeof args[0] * argscap);
 
 	if (!buf || !args)