Initial revision
[official-gcc.git] / gcc / config / winnt / spawnv.c
blob49096af998fd68d513751ab30ee9f828227c8090
1 /* This is a kludge to get around the Microsoft C spawn functions' propensity
2 to remove the outermost set of double quotes from all arguments. */
4 #define index(s,c) strchr((s),(c))
6 extern char *malloc ();
8 const char * const *
9 fix_argv (argv)
10 char **argv;
12 static char sh_chars[] = "\"";
14 int i, len;
15 char *new_argv;
16 char *p, *ap;
18 for (i=1; argv[i]; i++)
21 len = strlen (argv[i]);
22 new_argv = malloc (2*len+3);
23 ap = new_argv;
25 for (p = argv[i]; *p != '\0'; ++p)
27 if (index (sh_chars, *p) != 0)
28 *ap++ = '\\';
29 *ap++ = *p;
31 *ap = '\0';
32 argv[i] = new_argv;
35 return (const char * const *) argv;
38 int __spawnv (mode, cmdname, argv)
39 int mode;
40 const char *cmdname;
41 char **argv;
43 _spawnv (mode, cmdname, fix_argv (argv));
46 int __spawnvp (mode, cmdname, argv)
47 int mode;
48 const char *cmdname;
49 char **argv;
51 _spawnvp (mode, cmdname, fix_argv (argv));
54 int spawnve (mode, cmdname, argv, envp)
55 int mode;
56 const char *cmdname;
57 char **argv;
58 const char *const *envp;
60 _spawnve (mode, cmdname, fix_argv (argv), envp);
63 int __spawnvpe (mode, cmdname, argv, envp)
64 int mode;
65 const char *cmdname;
66 char **argv;
67 const char *const *envp;
69 _spawnvpe (mode, cmdname, fix_argv (argv), envp);