[2.5.2p1] openbsd-compat/glob.c: ARG_MAX not defined, alternative

Damien Miller djm at mindrot.org
Tue Mar 20 18:18:41 EST 2001


On Tue, 20 Mar 2001, Charles Levert wrote:

> Hi.
>
> On sparc-sun-sunos4.1.4 (i.e., -DSUNOS4), ARG_MAX is not defined
> anywhere, although <sys/limits.h> has the following line:
>
> 	#define _POSIX_ARG_MAX          4096
>
> This is more a minimum imposed by POSIX than anything else.  The
> proper solution revolves around this:

This is a known problem which will be fixed in a p2 release very soon.

Until then:

Index: openbsd-compat/glob.c
===================================================================
RCS file: /var/cvs/openssh/openbsd-compat/glob.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- openbsd-compat/glob.c	2001/03/19 19:00:10	1.4
+++ openbsd-compat/glob.c	2001/03/20 04:46:51	1.5
@@ -37,6 +37,18 @@
 #include "includes.h"
 #include <ctype.h>

+long
+get_arg_max()
+{
+#ifdef ARG_MAX
+	return(ARG_MAX);
+#elif defined(HAVE_SYSCONF) && defined(_SC_ARG_MAX)
+	return(sysconf(_SC_ARG_MAX));
+#else
+	return(256); /* XXX: arbitrary */
+#endif
+}
+
 #if !defined(HAVE_GLOB) || !defined(GLOB_HAS_ALTDIRFUNC) || \
     !defined(GLOB_HAS_GL_MATCHC)

@@ -689,7 +701,7 @@
 	pathv[pglob->gl_offs + pglob->gl_pathc] = NULL;

 	if ((pglob->gl_flags & GLOB_LIMIT) &&
-	    newsize + *limitp >= ARG_MAX) {
+	    newsize + *limitp >= (u_int) get_arg_max()) {
 		errno = 0;
 		return(GLOB_NOSPACE);
 	}


-- 
| Damien Miller <djm at mindrot.org> \ ``E-mail attachments are the poor man's
| http://www.mindrot.org          /   distributed filesystem'' - Dan Geer






More information about the openssh-unix-dev mailing list