784a3d3
diff -up netkit-ftp-0.17/ftp/glob.c.arg_max netkit-ftp-0.17/ftp/glob.c
784a3d3
--- netkit-ftp-0.17/ftp/glob.c.arg_max	2008-04-07 11:41:14.000000000 +0200
784a3d3
+++ netkit-ftp-0.17/ftp/glob.c	2008-04-07 12:01:53.000000000 +0200
784a3d3
@@ -50,6 +50,7 @@ char glob_rcsid[] = 
784a3d3
 #include <stdio.h>
784a3d3
 #include <stdlib.h>
784a3d3
 #include <string.h>
784a3d3
+#include <unistd.h>
784a3d3
 
784a3d3
 #include "ftp_var.h"  /* for protos only */
784a3d3
 #include "glob.h"
784a3d3
@@ -57,7 +58,7 @@ char glob_rcsid[] = 
784a3d3
 #define	QUOTE 0200
784a3d3
 #define	TRIM 0177
784a3d3
 #define	eq(a,b)		(strcmp(a, b)==0)
784a3d3
-#define	GAVSIZ		(ARG_MAX/6)
784a3d3
+#define	GAVSIZ		(sysconf(_SC_ARG_MAX)/6)
784a3d3
 #define	isdir(d)	((d.st_mode & S_IFMT) == S_IFDIR)
784a3d3
 
784a3d3
 const char *globerr;
784a3d3
@@ -115,7 +116,7 @@ char **
784a3d3
 ftpglob(const char *v)
784a3d3
 {
784a3d3
 	char agpath[BUFSIZ];
784a3d3
-	entry agargv[GAVSIZ];
784a3d3
+	entry *agargv;
784a3d3
 	centry vv[2];
784a3d3
 	vv[0].text = v;
784a3d3
 	vv[1].text = NULL;
784a3d3
@@ -133,6 +134,8 @@ ftpglob(const char *v)
784a3d3
 	/* added ()'s to sizeof, (ambigious math for the compiler) */
784a3d3
 	lastgpathp = agpath + (sizeof(agpath)- 2);
784a3d3
 
784a3d3
+	agargv = (entry *)malloc(sizeof (entry) * GAVSIZ);
784a3d3
+	if (agargv == NULL) fatal("Out of memory");
784a3d3
 	ginit(agargv); 
784a3d3
 	globcnt = 0;
784a3d3
 	collect(v);
784a3d3
@@ -156,7 +159,7 @@ ginit(entry *agargv)
784a3d3
 	gargv = agargv; 
784a3d3
 	sortbas = agargv; 
784a3d3
 	gargc = 0;
784a3d3
-	gnleft = ARG_MAX - 4;
784a3d3
+	gnleft = sysconf(_SC_ARG_MAX) - 4;
784a3d3
 }
784a3d3
 
784a3d3
 static 
784a3d3
@@ -674,6 +677,7 @@ efree(entry *av) 
784a3d3
 {
784a3d3
     int i;
784a3d3
     for (i=0; av[i].text; i++) free(av[i].text);
784a3d3
+    free((void *)av);
784a3d3
 }
784a3d3
 
784a3d3
 static