Annotation of gcc/config/winnt/spawnv.c, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.