aboutsummaryrefslogtreecommitdiff
path: root/libiberty/pexecute.c
diff options
context:
space:
mode:
authorJeffrey A Law <law@cygnus.com>1998-09-05 02:26:35 +0000
committerJeff Law <law@gcc.gnu.org>1998-09-04 20:26:35 -0600
commit3f3726a3fe90bd192322424ff057a481dc4a3b76 (patch)
tree568edbc03b8692416db25447c648b1c2d930d52c /libiberty/pexecute.c
parent2a63377ccf4c57b6fabc042164ea129258d0ea30 (diff)
downloadgcc-3f3726a3fe90bd192322424ff057a481dc4a3b76.zip
gcc-3f3726a3fe90bd192322424ff057a481dc4a3b76.tar.gz
gcc-3f3726a3fe90bd192322424ff057a481dc4a3b76.tar.bz2
pexecute.c: Updates from gcc.
* pexecute.c: Updates from gcc. Copy in gcc has been removed. This is the canonical copy. Define ISSPACE if !IN_GCC. From-SVN: r22243
Diffstat (limited to 'libiberty/pexecute.c')
-rw-r--r--libiberty/pexecute.c44
1 files changed, 29 insertions, 15 deletions
diff --git a/libiberty/pexecute.c b/libiberty/pexecute.c
index fbbea40..1b0a374 100644
--- a/libiberty/pexecute.c
+++ b/libiberty/pexecute.c
@@ -1,6 +1,6 @@
/* 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
@@ -25,10 +25,12 @@ Boston, MA 02111-1307, USA. */
#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"
@@ -166,7 +168,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
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);
}
@@ -509,7 +511,7 @@ static int first_time = 1;
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;
@@ -538,14 +540,18 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
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);
}
@@ -560,15 +566,20 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
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], ' '))
@@ -628,6 +639,9 @@ pfinish ()
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)