diff options
author | obrien <obrien@FreeBSD.org> | 1999-11-04 10:20:05 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 1999-11-04 10:20:05 +0000 |
commit | a2002c935cbd0f080eb39fb15453135ae4221dfb (patch) | |
tree | 15498f011f0f4e69f3f7f4fd727d619a1fa87d2e /contrib/gcc/pexecute.c | |
parent | 4b66dfb9030fa6d9912fcf3dfbe3fa8a4fa0a3fc (diff) | |
download | FreeBSD-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.c | 109 |
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) */ |