|
|
1.1 root 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. */
3:
4: #define index(s,c) strchr((s),(c))
5:
6: extern char *malloc ();
7:
8: const char * const *
9: fix_argv (argv)
10: char **argv;
11: {
12: static char sh_chars[] = "\"";
13:
14: int i, len;
15: char *new_argv;
16: char *p, *ap;
17:
18: for (i=1; argv[i]; i++)
19: {
20:
21: len = strlen (argv[i]);
22: new_argv = malloc (2*len+3);
23: ap = new_argv;
24:
25: for (p = argv[i]; *p != '\0'; ++p)
26: {
27: if (index (sh_chars, *p) != 0)
28: *ap++ = '\\';
29: *ap++ = *p;
30: }
31: *ap = '\0';
32: argv[i] = new_argv;
33: }
34:
35: return (const char * const *) argv;
36: }
37:
38: int __spawnv (mode, cmdname, argv)
39: int mode;
40: const char *cmdname;
41: char **argv;
42: {
43: _spawnv (mode, cmdname, fix_argv (argv));
44: }
45:
46: int __spawnvp (mode, cmdname, argv)
47: int mode;
48: const char *cmdname;
49: char **argv;
50: {
51: _spawnvp (mode, cmdname, fix_argv (argv));
52: }
53:
54: int spawnve (mode, cmdname, argv, envp)
55: int mode;
56: const char *cmdname;
57: char **argv;
58: const char *const *envp;
59: {
60: _spawnve (mode, cmdname, fix_argv (argv), envp);
61: }
62:
63: int __spawnvpe (mode, cmdname, argv, envp)
64: int mode;
65: const char *cmdname;
66: char **argv;
67: const char *const *envp;
68: {
69: _spawnvpe (mode, cmdname, fix_argv (argv), envp);
70: }
71:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.