|
|
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.