Commit b662a90d by Richard Kenner

(fix_argv): New function.

(pexecute): Win32 but not Cygwin32 needs its arguments fixed.
Add underscore to cwait function call.

From-SVN: r14338
parent 84d02eb4
...@@ -217,12 +217,49 @@ pwait (pid, status, flags) ...@@ -217,12 +217,49 @@ pwait (pid, status, flags)
#endif /* MSDOS */ #endif /* MSDOS */
#if defined (_WIN32) #if defined (_WIN32) && !defined (__CYGWIN32__)
#include <process.h> #include <process.h>
extern int _spawnv (); extern int _spawnv ();
extern int _spawnvp (); extern int _spawnvp ();
/* This is a kludge to get around the Microsoft C spawn functions' propensity
to remove the outermost set of double quotes from all arguments. */
const char * const *
fix_argv (argvec)
char **argvec;
{
int i;
for (i = 1; argvec[i] != 0; i++)
{
int len, j;
char *temp, *newtemp;
temp = argvec[i];
len = strlen (temp);
for (j = 0; j < len; j++)
{
if (temp[j] == '"')
{
newtemp = xmalloc (len + 2);
strncpy (newtemp, temp, j);
newtemp [j] = '\\';
strncpy (&newtemp [j+1], &temp [j], len-j);
newtemp [len+1] = 0;
temp = newtemp;
len++;
j++;
}
}
argvec[i] = temp;
}
return (const char * const *) argvec;
}
int int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags) pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program; const char *program;
...@@ -236,7 +273,8 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags) ...@@ -236,7 +273,8 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE) if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
abort (); abort ();
pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv) (_P_NOWAIT, program, argv); pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv)
(_P_NOWAIT, program, fix_argv(argv));
if (pid == -1) if (pid == -1)
{ {
*errmsg_fmt = install_error_msg; *errmsg_fmt = install_error_msg;
...@@ -254,7 +292,7 @@ pwait (pid, status, flags) ...@@ -254,7 +292,7 @@ pwait (pid, status, flags)
{ {
/* ??? Here's an opportunity to canonicalize the values in STATUS. /* ??? Here's an opportunity to canonicalize the values in STATUS.
Needed? */ Needed? */
return cwait (status, pid, WAIT_CHILD); return _cwait (status, pid, WAIT_CHILD);
} }
#endif /* _WIN32 */ #endif /* _WIN32 */
...@@ -440,7 +478,7 @@ pfinish () ...@@ -440,7 +478,7 @@ pfinish ()
/* include for Unix-like environments but not for Dos-like environments */ /* include for Unix-like environments but not for Dos-like environments */
#if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \ #if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \
&& ! defined (_WIN32) && (defined (__CYGWIN32__) || ! defined (_WIN32))
#ifdef VMS #ifdef VMS
#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \ #define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment