summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/pexecute.c
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>1999-11-04 10:20:05 +0000
committerobrien <obrien@FreeBSD.org>1999-11-04 10:20:05 +0000
commita2002c935cbd0f080eb39fb15453135ae4221dfb (patch)
tree15498f011f0f4e69f3f7f4fd727d619a1fa87d2e /contrib/gcc/pexecute.c
parent4b66dfb9030fa6d9912fcf3dfbe3fa8a4fa0a3fc (diff)
downloadFreeBSD-src-a2002c935cbd0f080eb39fb15453135ae4221dfb.zip
FreeBSD-src-a2002c935cbd0f080eb39fb15453135ae4221dfb.tar.gz
Virgin import from GCC 2.95.1.
As of GCC 2.95 these files: choose-temp.c demangle.h getopt.h obstack.c pexecute.c cplus-dem.c getopt.c getopt1.c obstack.h were removed from the GCC compilers proper to libiberty. To continue our revision history, and to keep from having to import all of libiberty, they are imported here as if they were never moved.
Diffstat (limited to 'contrib/gcc/pexecute.c')
-rw-r--r--contrib/gcc/pexecute.c109
1 files changed, 34 insertions, 75 deletions
diff --git a/contrib/gcc/pexecute.c b/contrib/gcc/pexecute.c
index 804f314..6f6a044 100644
--- a/contrib/gcc/pexecute.c
+++ b/contrib/gcc/pexecute.c
@@ -23,23 +23,34 @@ Boston, MA 02111-1307, USA. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
-#ifdef IN_GCC
+#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include "system.h"
+#include <stdio.h>
+#include <errno.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#define ISSPACE (x) isspace(x)
+#ifdef HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
-#ifdef IN_GCC
-#include "gansidecl.h"
-/* ??? Need to find a suitable header file. */
-#define PEXECUTE_FIRST 1
-#define PEXECUTE_LAST 2
-#define PEXECUTE_ONE (PEXECUTE_FIRST + PEXECUTE_LAST)
-#define PEXECUTE_SEARCH 4
-#define PEXECUTE_VERBOSE 8
+#ifdef vfork /* Autoconf may define this to fork for us. */
+# define VFORK_STRING "fork"
#else
-#include "libiberty.h"
+# define VFORK_STRING "vfork"
+#endif
+#ifdef HAVE_VFORK_H
+#include <vfork.h>
#endif
+#ifdef VMS
+#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
+ lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
+#endif /* VMS */
+
+#include "libiberty.h"
/* stdin file number. */
#define STDIN_FILE_NO 0
@@ -219,53 +230,18 @@ pwait (pid, status, flags)
#endif /* MSDOS */
-#if defined (_WIN32)
+#if defined (_WIN32) && ! defined (_UWIN)
#include <process.h>
-#ifdef __CYGWIN32__
+#ifdef __CYGWIN__
#define fix_argv(argvec) (argvec)
extern int _spawnv ();
extern int _spawnvp ();
-int
-pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
- const char *program;
- char * const *argv;
- const char *this_pname;
- const char *temp_base;
- char **errmsg_fmt, **errmsg_arg;
- int flags;
-{
- int pid;
-
- if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
- abort ();
- pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv)
- (_P_NOWAIT, program, fix_argv(argv));
- if (pid == -1)
- {
- *errmsg_fmt = install_error_msg;
- *errmsg_arg = program;
- return -1;
- }
- return pid;
-}
-
-int
-pwait (pid, status, flags)
- int pid;
- int *status;
- int flags;
-{
- /* ??? Here's an opportunity to canonicalize the values in STATUS.
- Needed? */
- return cwait (status, pid, WAIT_CHILD);
-}
-
-#else /* ! __CYGWIN32__ */
+#else /* ! __CYGWIN__ */
/* This is a kludge to get around the Microsoft C spawn functions' propensity
to remove the outermost set of double quotes from all arguments. */
@@ -303,6 +279,7 @@ fix_argv (argvec)
return (const char * const *) argvec;
}
+#endif /* __CYGWIN__ */
#include <io.h>
#include <fcntl.h>
@@ -419,6 +396,9 @@ pwait (pid, status, flags)
int *status;
int flags;
{
+#ifdef __CYGWIN__
+ return wait (status);
+#else
int termstat;
pid = _cwait (&termstat, pid, WAIT_CHILD);
@@ -436,11 +416,10 @@ pwait (pid, status, flags)
*status = (((termstat) & 0xff) << 8);
return pid;
+#endif /* __CYGWIN__ */
}
-#endif /* ! defined (__CYGWIN32__) */
-
-#endif /* _WIN32 */
+#endif /* _WIN32 && ! _UWIN */
#ifdef OS2
@@ -623,22 +602,10 @@ pfinish ()
/* include for Unix-like environments but not for Dos-like environments */
#if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \
- && ! defined (_WIN32)
-
-#ifdef VMS
-#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
- lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
-#else
-#ifdef USG
-#define vfork fork
-#endif
-#endif
+ && ! (defined (_WIN32) && ! defined (_UWIN))
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)
@@ -700,11 +667,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
{
case -1:
{
-#ifdef vfork
- *errmsg_fmt = "fork";
-#else
- *errmsg_fmt = "vfork";
-#endif
+ *errmsg_fmt = VFORK_STRING;
*errmsg_arg = NULL;
return -1;
}
@@ -734,11 +697,7 @@ pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
/* Note: Calling fprintf and exit here doesn't seem right for vfork. */
fprintf (stderr, "%s: ", this_pname);
fprintf (stderr, install_error_msg, program);
-#ifdef IN_GCC
- fprintf (stderr, ": %s\n", my_strerror (errno));
-#else
fprintf (stderr, ": %s\n", xstrerror (errno));
-#endif
exit (-1);
/* NOTREACHED */
return 0;
@@ -772,4 +731,4 @@ pwait (pid, status, flags)
return pid;
}
-#endif /* ! __MSDOS__ && ! OS2 && ! MPW && ! _WIN32 */
+#endif /* ! __MSDOS__ && ! OS2 && ! MPW && ! (_WIN32 && ! _UWIN) */
OpenPOWER on IntegriCloud