diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1995-06-19 16:52:51 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1995-06-19 16:52:51 -0400 |
commit | a72e508d5303111a124a33b158f789c9fed76d19 (patch) | |
tree | 3dabbc83b3c220d83b0fb012167bfda4119eefde /gcc | |
parent | 0887bd4b9a63058079f577fa0471a78fbc971fd2 (diff) | |
download | gcc-a72e508d5303111a124a33b158f789c9fed76d19.zip gcc-a72e508d5303111a124a33b158f789c9fed76d19.tar.gz gcc-a72e508d5303111a124a33b158f789c9fed76d19.tar.bz2 |
Initial revision
From-SVN: r10011
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/winnt/spawnv.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/gcc/config/winnt/spawnv.c b/gcc/config/winnt/spawnv.c new file mode 100644 index 0000000..1b5ace1 --- /dev/null +++ b/gcc/config/winnt/spawnv.c @@ -0,0 +1,73 @@ +/* This is a kludge to get around the Microsoft C spawn functions' propensity + to remove the outermost set of double quotes from all arguements. */ + + +#define index(s,c) strchr((s),(c)) + +extern char *xmalloc (); + +const char * const * +fix_argv (argv) + char **argv; +{ + static char sh_chars[] = "\""; + + int i, len; + char *new_argv; + char *p, *ap; + + for (i=1; argv[i]; i++) + { + + len = strlen (argv[i]); + new_argv = xmalloc (2*len+3); + ap = new_argv; + *ap++ = '"'; + + for (p = argv[i]; *p != '\0'; ++p) + { + if (index (sh_chars, *p) != 0) + *ap++ = '\\'; + *ap++ = *p; + } + *ap++ = '"'; + *ap = '\0'; + argv[i] = new_argv; + } + + return (const char * const *) argv; +} + +int spawnv (mode, cmdname, argv) + int mode; + const char *cmdname; + char **argv; +{ + _spawnv (mode, cmdname, fix_argv (argv)); +} + +int spawnvp (mode, cmdname, argv) + int mode; + const char *cmdname; + char **argv; +{ + _spawnvp (mode, cmdname, fix_argv (argv)); +} + +int spawnve (mode, cmdname, argv, envp) + int mode; + const char *cmdname; + char **argv; + const char *const *envp; +{ + _spawnve (mode, cmdname, fix_argv (argv), envp); +} + +int spawnvpe (mode, cmdname, argv, envp) + int mode; + const char *cmdname; + char **argv; + const char *const *envp; +{ + _spawnvpe (mode, cmdname, fix_argv (argv), envp); +} |