home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gcc-2.7.2.1-base.tgz / gcc-2.7.2.1-base.tar / fsf / gcc / config / winnt / spawnv.c < prev    next >
C/C++ Source or Header  |  1995-09-12  |  1KB  |  72 lines

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