/*
Copyright (C) 1995 Free Software Foundation, Inc.
Copyright (C) 2000, 2002 Ben Wing.
This file is part of XEmacs.
XEmacs is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
XEmacs is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with XEmacs. If not, see . */
/* Synched up with: Not really in FSF. */
#ifndef INCLUDED_sysproc_h_
#define INCLUDED_sysproc_h_
#include "systime.h" /* necessary for sys/resource.h; also gets the
FD_* defines on some systems. */
#ifndef WIN32_NATIVE
#include
#endif
#ifdef MINGW
#include <../mingw/process.h>
#elif defined (WIN32_NATIVE)
/* should not conflict with "process.h", as per ANSI definition.
This is not true with visual c though. The trick below works with
VC4.2b, 5.0 and 6.0. It assumes that VC is installed in a kind of
standard way, so include path ends with /include.
*/
#include <../include/process.h>
#endif
#ifdef HAVE_SOCKETS /* TCP connection support, if kernel can do it */
# include /* AJK */
# ifndef WIN32_NATIVE
# include
# include
# include
# include
# endif
#endif /* HAVE_SOCKETS */
#ifdef WIN32_NATIVE
/* Note: winsock.h already included in systime.h above */
/* map winsock error codes to standard names */
#define EWOULDBLOCK WSAEWOULDBLOCK
#define EINPROGRESS WSAEINPROGRESS
#define EALREADY WSAEALREADY
#define ENOTSOCK WSAENOTSOCK
#define EDESTADDRREQ WSAEDESTADDRREQ
#define EMSGSIZE WSAEMSGSIZE
#define EPROTOTYPE WSAEPROTOTYPE
#define ENOPROTOOPT WSAENOPROTOOPT
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
#define EOPNOTSUPP WSAEOPNOTSUPP
#define EPFNOSUPPORT WSAEPFNOSUPPORT
#define EAFNOSUPPORT WSAEAFNOSUPPORT
#define EADDRINUSE WSAEADDRINUSE
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
#define ENETDOWN WSAENETDOWN
#define ENETUNREACH WSAENETUNREACH
#define ENETRESET WSAENETRESET
#define ECONNABORTED WSAECONNABORTED
#define ECONNRESET WSAECONNRESET
#define ENOBUFS WSAENOBUFS
#define EISCONN WSAEISCONN
#define ENOTCONN WSAENOTCONN
#define ESHUTDOWN WSAESHUTDOWN
#define ETOOMANYREFS WSAETOOMANYREFS
#define ETIMEDOUT WSAETIMEDOUT
#define ECONNREFUSED WSAECONNREFUSED
#define ELOOP WSAELOOP
/* #define ENAMETOOLONG WSAENAMETOOLONG */
#define EHOSTDOWN WSAEHOSTDOWN
#define EHOSTUNREACH WSAEHOSTUNREACH
/* #define ENOTEMPTY WSAENOTEMPTY */
#define EPROCLIM WSAEPROCLIM
#define EUSERS WSAEUSERS
#define EDQUOT WSAEDQUOT
#define ESTALE WSAESTALE
#define EREMOTE WSAEREMOTE
#endif /* WIN32_NATIVE */
/* On some systems, e.g. DGUX, inet_addr returns a `struct in_addr'. */
#ifdef HAVE_BROKEN_INET_ADDR
# define IN_ADDR struct in_addr
# define NUMERIC_ADDR_ERROR (numeric_addr.s_addr == -1)
#else
# if (LONGBITS > 32)
# define IN_ADDR unsigned int
# else
# define IN_ADDR unsigned long
# endif
# define NUMERIC_ADDR_ERROR (numeric_addr == (IN_ADDR) -1)
#endif
/* Define first descriptor number available for subprocesses. */
#define FIRST_PROC_DESC 3
#ifdef AIX
#include
#endif
#ifdef HAVE_STROPTS_H
#include /* isastream(), I_PUSH */
#endif
#ifdef HAVE_STRTIO_H
#include /* TIOCSIGNAL */
#endif
#ifdef HAVE_PTY_H
#include /* openpty() on Tru64, Linux */
#endif
#ifdef HAVE_LIBUTIL_H
#include /* openpty() on FreeBSD */
#endif
#ifdef HAVE_UTIL_H
#include /* openpty() on NetBSD */
#endif
/* The FD_* macros expand to __extension__ forms on glibc-based systems. Uno
does not understand such forms, so let's help it out. */
#ifdef UNO
#undef FD_SET
#undef FD_CLR
#undef FD_ISSET
#undef FD_ZERO
#undef MAXDESC
#undef SELECT_TYPE
#endif /* UNO */
#ifdef FD_SET
/* We could get this from param.h, but better not to depend on finding that.
And better not to risk that it might define other symbols used in this
file. */
# ifdef FD_SETSIZE
# define MAXDESC FD_SETSIZE
# else
# define MAXDESC 64
# endif /* FD_SETSIZE */
# define SELECT_TYPE fd_set
#else /* no FD_SET */
# define MAXDESC 32
# define SELECT_TYPE int
/* Define the macros to access a single-int bitmap of descriptors. */
# define FD_SET(n, p) (*(p) |= (1 << (n)))
# define FD_CLR(n, p) (*(p) &= ~(1 << (n)))
# define FD_ISSET(n, p) (*(p) & (1 << (n)))
# define FD_ZERO(p) (*(p) = 0)
#endif /* no FD_SET */
int poll_fds_for_input (SELECT_TYPE mask);
int qxe_execve (const Ibyte *filename, Ibyte * const argv[],
Ibyte * const envp[]);
pid_t qxe_getpid (void);
/* #### I would really like to delete the remaining synchronous code entirely.
We are now using it only for *REALLY* old systems -- how many systems
nowadays
(a) lack job control, or
(b) lack mkdir() or rmdir()
?????
--ben
*/
#include "syssignal.h" /* needed for SIGTSTP */
#if !defined (WIN32_NATIVE) && (!defined (SIGTSTP) || !defined (HAVE_MKDIR) || !defined (HAVE_RMDIR))
#define NEED_SYNC_PROCESS_CODE
/* True iff we are about to fork off a synchronous process or if we
are waiting for it. */
extern volatile int synch_process_alive;
/* Nonzero => this is a string explaining death of synchronous subprocess. */
extern const char *synch_process_death;
/* If synch_process_death is zero,
this is exit code of synchronous subprocess. */
extern int synch_process_retcode;
#endif
#endif /* INCLUDED_sysproc_h_ */