/* Utilities to execute a program in a subprocess (possibly linked by pipes
with other subprocesses), and wait for it.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
This file is part of the libiberty library.
Libiberty is free software; you can redistribute it and/or
#ifdef IN_GCC
#include "config.h"
-#endif
-
+#include "system.h"
+#else
#include <stdio.h>
#include <errno.h>
+#define ISSPACE (x) isspace(x)
+#endif
#ifdef IN_GCC
#include "gansidecl.h"
char *cp;
for (cp = argv[i]; *cp; cp++)
{
- if (*cp == '"' || *cp == '\'' || *cp == '\\' || isspace (*cp))
+ if (*cp == '"' || *cp == '\'' || *cp == '\\' || ISSPACE (*cp))
fputc ('\\', argfile);
fputc (*cp, argfile);
}
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
- char **argv;
+ char * const *argv;
const char *this_pname;
const char *temp_base;
char **errmsg_fmt, **errmsg_arg;
fputc (' ', stdout);
for (i=1; argv[i]; i++)
{
- /* We have to quote every arg, so that when the echo is
- executed, the quotes are stripped and the original arg
- is left. */
fputc ('\'', stdout);
+ /* See if we have an argument that needs fixing. */
+ if (strchr(argv[i], '/'))
+ {
+ tmpname = (char *) xmalloc (256);
+ mpwify_filename (argv[i], tmpname);
+ argv[i] = tmpname;
+ }
for (cp = argv[i]; *cp; cp++)
{
- /* Write an Option-d esc char in front of special chars. */
- if (strchr ("\"'+", *cp))
+ /* Write an Option-d escape char in front of special chars. */
+ if (strchr("'+", *cp))
fputc ('\266', stdout);
fputc (*cp, stdout);
}
for (i=1; argv[i]; i++)
{
+ /* See if we have an argument that needs fixing. */
+ if (strchr(argv[i], '/'))
+ {
+ tmpname = (char *) xmalloc (256);
+ mpwify_filename (argv[i], tmpname);
+ argv[i] = tmpname;
+ }
if (strchr (argv[i], ' '))
fputc ('\'', stdout);
for (cp = argv[i]; *cp; cp++)
{
- /* Write an Option-d esc char in front of special chars. */
- if (strchr ("\"'+", *cp))
- {
- fputc ('\266', stdout);
- }
+ /* Write an Option-d escape char in front of special chars. */
+ if (strchr("'+", *cp))
+ fputc ('\266', stdout);
fputc (*cp, stdout);
}
if (strchr (argv[i], ' '))
extern int execv ();
extern int execvp ();
+#ifdef IN_GCC
+extern char * my_strerror PROTO ((int));
+#endif
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)