diff options
| author | svn2git <svn2git@FreeBSD.org> | 1994-05-01 08:00:00 +0000 | 
|---|---|---|
| committer | svn2git <svn2git@FreeBSD.org> | 1994-05-01 08:00:00 +0000 | 
| commit | a16f65c7d117419bd266c28a1901ef129a337569 (patch) | |
| tree | 2626602f66dc3551e7a7c7bc9ad763c3bc7ab40a /gnu/uucp/libunix/detach.c | |
| parent | 8503f4f13f77abf7adc8f7e329c6f9c1d52b6a20 (diff) | |
Diffstat (limited to 'gnu/uucp/libunix/detach.c')
| -rw-r--r-- | gnu/uucp/libunix/detach.c | 186 | 
1 files changed, 0 insertions, 186 deletions
| diff --git a/gnu/uucp/libunix/detach.c b/gnu/uucp/libunix/detach.c deleted file mode 100644 index 41e1969b5efc..000000000000 --- a/gnu/uucp/libunix/detach.c +++ /dev/null @@ -1,186 +0,0 @@ -/* detach.c -   Detach from the controlling terminal. - -   Copyright (C) 1992 Ian Lance Taylor - -   This file is part of the Taylor UUCP package. - -   This program 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 2 of the -   License, or (at your option) any later version. - -   This program 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 this program; if not, write to the Free Software -   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -   The author of the program may be contacted at ian@airs.com or -   c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254. -   */ - -#include "uucp.h" - -#include "uudefs.h" -#include "system.h" -#include "sysdep.h" - -#include <errno.h> - -#if HAVE_SYS_IOCTL_H -#include <sys/ioctl.h> -#endif - -#ifdef TIOCNOTTY -#define HAVE_TIOCNOTTY 1 -#else -#define HAVE_TIOCNOTTY 0  -#endif - -#if HAVE_FCNTL_H -#include <fcntl.h> -#else -#if HAVE_SYS_FILE_H -#include <sys/file.h> -#endif -#endif - -#ifndef O_RDONLY -#define O_RDONLY 0 -#define O_WRONLY 1 -#define O_RDWR 2 -#endif - -/* Detach from the controlling terminal.  This is called by uucico if -   it is calling out to another system, so that it can receive SIGHUP -   signals from the port it calls out on.  It is also called by uucico -   just before it starts uuxqt, so that uuxqt is completely -   independent of the terminal.  */ - -void -usysdep_detach () -{ -#if ! HAVE_BSD_PGRP || ! HAVE_TIOCNOTTY - -  pid_t igrp; - -  /* First make sure we are not a process group leader.  If we have -     TIOCNOTTY, this doesn't matter, since TIOCNOTTY sets our process -     group to 0 anyhow.  */ - -#if HAVE_BSD_PGRP -  igrp = getpgrp (0); -#else -  igrp = getpgrp (); -#endif - -  if (igrp == getpid ()) -    { -      boolean fignored; -      pid_t ipid; - -      /* Ignore SIGHUP, since our process group leader is about to -	 die.  */ -      usset_signal (SIGHUP, SIG_IGN, FALSE, &fignored); - -      ipid = ixsfork (); -      if (ipid < 0) -	ulog (LOG_FATAL, "fork: %s", strerror (errno)); - -      if (ipid != 0) -	_exit (EXIT_SUCCESS); - -      /* We'll always wind up as a child of process number 1, right? -	 Right?  We have to wait for our parent to die before -	 reenabling SIGHUP.  */ -      while (getppid () != 1) -	sleep (1); - -      ulog_id (getpid ()); - -      /* Restore SIGHUP catcher if it wasn't being ignored.  */ -      if (! fignored) -	usset_signal (SIGHUP, ussignal, TRUE, (boolean *) NULL); -    } - -#endif /* ! HAVE_BSD_PGRP || ! HAVE_TIOCNOTTY */ - -#if HAVE_TIOCNOTTY -  /* Lose the original controlling terminal.  If standard input has -     been reopened to /dev/null, this will do no harm.  If another -     port has been opened to become the controlling terminal, it -     should have been detached when it was closed.  */ -  (void) ioctl (0, TIOCNOTTY, (char *) NULL); -#endif - -  /* Close stdin, stdout and stderr and reopen them on /dev/null, to -     make sure we have no connection at all to the terminal.  */ -  (void) close (0); -  (void) close (1); -  (void) close (2); -  if (open ((char *) "/dev/null", O_RDONLY) != 0 -      || open ((char *) "/dev/null", O_WRONLY) != 1 -      || open ((char *) "/dev/null", O_WRONLY) != 2) -    ulog (LOG_FATAL, "open (/dev/null): %s", strerror (errno)); - -#if HAVE_BSD_PGRP - -  /* Make sure our process group ID is set to 0.  On BSD TIOCNOTTY -     should already have set it 0, so this will do no harm.  On System -     V we presumably did not execute the TIOCNOTTY call, but the -     System V setpgrp will detach the controlling terminal anyhow. -     This lets us use the same code on both BSD and System V, provided -     it compiles correctly, which life easier for the configure -     script.  We don't output an error if we got EPERM because some -     BSD variants don't permit this usage of setpgrp (which means they -     don't provide any way to pick up a new controlling terminal).  */ - -  if (setpgrp (0, 0) < 0) -    { -      if (errno != EPERM) -	ulog (LOG_ERROR, "setpgrp: %s", strerror (errno)); -    } - -#else /* ! HAVE_BSD_PGRP */ - -#if HAVE_SETSID - -  /* Under POSIX the setsid call creates a new session for which we -     are the process group leader.  It also detaches us from our -     controlling terminal.  I'm using the BSD setpgrp call first -     because they should be equivalent for my purposes, but it turns -     out that on Ultrix 4.0 setsid prevents us from ever acquiring -     another controlling terminal (it does not change our process -     group, and Ultrix 4.0 prevents us from setting our process group -     to 0).  */ -  (void) setsid (); - -#else /* ! HAVE_SETSID */ - -#if HAVE_SETPGRP - -  /* Now we assume we have the System V setpgrp, which takes no -     arguments, and we couldn't compile the HAVE_BSD_PGRP code above -     because there was a prototype somewhere in scope.  On System V -     setpgrp makes us the leader of a new process group and also -     detaches the controlling terminal.  */ - -  if (setpgrp () < 0) -    ulog (LOG_ERROR, "setpgrp: %s", strerror (errno)); - -#else /* ! HAVE_SETPGRP */ - - #error Must detach from controlling terminal - -#endif /* HAVE_SETPGRP */ -#endif /* ! HAVE_SETSID */ -#endif /* ! HAVE_BSD_PGRP */ - -  /* At this point we have completely detached from our controlling -     terminal.  The next terminal device we open will probably become -     our controlling terminal.  */ -} | 
