Annotation of gcc/config/winnt/spawnv.c, revision 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.