File:  [GCC 2.x] / gcc / config / winnt / spawnv.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 18:27:54 2018 UTC (8 years, 2 months ago) by root
Branches: fsf, MAIN
CVS tags: gcc-2723, gcc-2722, gcc-2721, gcc-272, HEAD
gcc-2.7.2

/* This is a kludge to get around the Microsoft C spawn functions' propensity
   to remove the outermost set of double quotes from all arguments.  */

#define index(s,c) strchr((s),(c))

extern char *malloc ();

const char * const *
fix_argv (argv)
  char **argv;
{
  static char sh_chars[] = "\"";

  int i, len;
  char *new_argv;
  char *p, *ap;

  for (i=1; argv[i]; i++)
    {

      len = strlen (argv[i]);
      new_argv = malloc (2*len+3);
      ap = new_argv;

      for (p = argv[i]; *p != '\0'; ++p)
        {
          if (index (sh_chars, *p) != 0)
            *ap++ = '\\';
          *ap++ = *p;
        }
      *ap = '\0';
      argv[i] = new_argv;
    }

  return (const char * const *) argv;
}

int __spawnv (mode, cmdname, argv)
  int mode;
  const char *cmdname;
  char **argv;
{
  _spawnv (mode, cmdname, fix_argv (argv));
}

int __spawnvp (mode, cmdname, argv)
  int mode;
  const char *cmdname;
  char **argv;
{
  _spawnvp (mode, cmdname, fix_argv (argv));
}

int spawnve (mode, cmdname, argv, envp)
  int mode;
  const char *cmdname;
  char **argv;
  const char *const *envp;
{
  _spawnve (mode, cmdname, fix_argv (argv), envp);
}

int __spawnvpe (mode, cmdname, argv, envp)
  int mode;
  const char *cmdname;
  char **argv;
  const char *const *envp;
{
  _spawnvpe (mode, cmdname, fix_argv (argv), envp);
}


unix.superglobalmegacorp.com

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