/* Synched up with: FSF 19.28. */

/* s/ file for System V release 4.2.  */

#include "usg5-4.h"

/* pcg@aber.ac.uk says this is useless since fork does copy-on-write
   #define HAVE_VFORK */
/* fnf@cygnus.com says these exist.  */
#define HAVE_TCATTR
#if 0 /* autoconf should take care of this.  */
#define HAVE_GETHOSTNAME
#define HAVE_RANDOM
#endif
/* XEmacs change (since getwd is auto-determined) */
#undef HAVE_GETWD  /* (appears to be buggy on SVR4.2) */

/* Info from fnf@cygnus.com suggests this is appropriate.  */
#define POSIX_SIGNALS

/* We don't need the definition from usg5-3.h with POSIX_SIGNALS.  */
#undef sigsetmask
#undef HAVE_SYSV_SIGPAUSE

/* This is the same definition as in usg5-4.h, but with sigblock/sigunblock
   rather than sighold/sigrelse, which appear to be BSD4.1 specific and won't
   work if POSIX_SIGNALS is defined.  It may also be appropriate for SVR4.x
   (x<2) but I'm not sure.   fnf@cygnus.com */
/* This sets the name of the slave side of the PTY.  On SysVr4,
   grantpt(3) forks a subprocess, so keep sigchld_handler() from
   intercepting that death.  If any child but grantpt's should die
   within, it should be caught after sigrelse(2). */

/* XEmacs: upgraded for changes to usg5-4.h */
#undef PTY_TTY_NAME_SPRINTF
#define PTY_TTY_NAME_SPRINTF				\
  {							\
    char *ptyname;					\
    sigset_t newmask, oldmask;                          \
                                                        \
    sigemptyset( &newmask );                            \
    sigaddset( &newmask, SIGCLD );                      \
    sigprocmask( SIG_BLOCK, &newmask, &oldmask );       \
    if (grantpt (fd) == -1)				\
      { close (fd); return -1; }			\
    sigprocmask( SIG_SETMASK, &oldmask, NULL );         \
    if (unlockpt (fd) == -1)				\
      { close (fd); return -1; }			\
    if (!(ptyname = ptsname (fd)))			\
      { close (fd); return -1; }			\
    strncpy (pty_name, ptyname, sizeof (pty_name));	\
    pty_name[sizeof (pty_name) - 1] = 0;		\
  }
