* spawn.cc (spawn_guts): Revert patch which treated derived cygwin programs

differently from those which are mounted with -X.  Pass extra argument to
linebuf::fromargv.
* winf.h (MAXCYGWINCMDLEN): New define.
(linebuf::finish): Add a new argument denoting when command line overflow is
ok.
(linebuf::fromargv): Ditto.
* winf.cc (linebuf::finish): Implement above change.
(linebuf::fromargv): Ditto.
This commit is contained in:
Christopher Faylor
2006-04-13 01:37:00 +00:00
parent a5eaf56817
commit 2e9d484382
4 changed files with 35 additions and 9 deletions

View File

@@ -9,6 +9,14 @@ details. */
#ifndef _WINF_H
#define _WINF_H
/* Hack for Cygwin processes. If the Windows command line length gets slightly
bigger than this value, the stack position is suddenly moved up by 64K for
no apparent reason, which results in subsequent forks failing. Since Cygwin
processes get the full command line as argv array anyway, this only affects
the maximum command line length of Cygwin applications which non-sensically
have a WinMain instead of a main entry point. */
#define MAXCYGWINCMDLEN 31767
#define MAXWINCMDLEN 32767
#define LINE_BUF_CHUNK (CYG_MAX_PATH * 2)
@@ -74,8 +82,8 @@ class linebuf
void add (const char *what, int len) __attribute__ ((regparm (3)));
void add (const char *what) {add (what, strlen (what));}
void prepend (const char *what, int len);
void finish () __attribute__ ((regparm (1)));
bool fromargv(av&, char *);
void finish (bool) __attribute__ ((regparm (2)));
bool fromargv(av&, char *, bool) __attribute__ ((regparm (3)));;
operator char *() {return buf;}
};