[Xorg-commit] xc/programs/xfs/os daemon.c,1.1,1.1.4.1 error.c,1.1.4.1,1.1.4.2 utils.c,1.1.4.1,1.1.4.2

Kaleb Keithley xorg-commit at pdx.freedesktop.org
Wed May 9 17:30:30 EEST 2007


Committed by: kaleb

Update of /cvs/xorg/xc/programs/xfs/os
In directory pdx:/home/kaleb/xorg/xc.XORG-CURRENT/programs/xfs/os

Modified Files:
      Tag: XORG-CURRENT
	daemon.c error.c utils.c 
Log Message:
merge most of XFree86 RC3 (4.3.99.903) from vendor branch.
bug #214


Index: daemon.c
===================================================================
RCS file: /cvs/xorg/xc/programs/xfs/os/daemon.c,v
retrieving revision 1.1
retrieving revision 1.1.4.1
diff -u -d -r1.1 -r1.1.4.1
--- a/daemon.c	14 Nov 2003 16:49:22 -0000	1.1
+++ b/daemon.c	23 Feb 2004 21:37:54 -0000	1.1.4.1
@@ -27,23 +27,14 @@
 from the X Consortium.
 
 */
-/* $XFree86: xc/programs/xfs/os/daemon.c,v 1.12 2002/10/20 21:42:50 tsi Exp $ */
+/* $XFree86: xc/programs/xfs/os/daemon.c,v 1.13 2004/01/07 03:47:36 dawes Exp $ */
 
 #include <X11/Xos.h>
 #include <sys/types.h>
 #include <errno.h>
 #include <stdlib.h>
 
-#ifndef __GLIBC__
-# if defined(__osf__) || \
-     defined(__GNU__) || \
-     defined(__CYGWIN__) || \
-     defined(linux)
-#  define setpgrp setpgid
-# endif
-#endif
-
-#if defined(SVR4) || defined(USG) || defined(__GLIBC__)
+#if defined(USG)
 # include <termios.h>
 #else
 # include <sys/ioctl.h>
@@ -60,108 +51,88 @@
 
 #include "os.h"
 
-void
-BecomeOrphan ()
-{
-    Pid_t child_id;
+#if defined(__GLIBC__) || defined(CSRG_BASED)
+#define HAS_DAEMON
+#endif
 
-    chdir("/");
-    /*
-     * fork so that the process goes into the background automatically. Also
-     * has a nice side effect of having the child process get inherited by
-     * init (pid 1).
-     * Separate the child into its own process group before the parent
-     * exits.  This eliminates the possibility that the child might get
-     * killed when the init script that's running xfs exits.
-     */
+#ifndef X_NOT_POSIX
+#define HAS_SETSID
+#endif
 
-    child_id = fork();
-    switch (child_id) {
-    case 0:
-	/* child */
-	break;
-    case -1:
-	/* error */
-	FatalError("daemon fork failed, %s\n", strerror(errno));
-	break;
+#ifndef HAS_SETSID
 
-    default:
-	/* parent */
+#define setsid() MySetsid()
 
-#if defined(CSRG_BASED) || \
-    defined(SYSV) || \
-    defined(SVR4) || \
-    defined(__QNXNTO__) || \
-    defined(__GLIBC__) || \
-    defined(linux)
-	{
-	    int stat;
-# if defined(SVR4) || defined(__QNXNTO__)
-	    /* This gets error EPERM.  Why? */
-	    stat = setpgid (child_id, child_id);
-# elif defined(SYSV)
-	    stat = 0;	/* don't know how to set child's process group */
-# elif defined(__GLIBC__)
-	    stat = setpgrp ();
-# else
-	    stat = setpgrp (child_id, child_id);
-# endif
-	    if (stat != 0)
-		FatalError("setting process group for daemon failed: %s\n",
-			   strerror(errno));
-	}
-#endif /* ! (CSRG_BASED || SYSV || SVR4 || __QNXNTO__ || __GLIBC__) */
-	exit (0);
+static Pid_t
+MySetsid(void)
+{
+#if defined(TIOCNOTTY) || defined(TCCLRCTTY) || defined(TIOCTTY)
+    int fd;
+#endif
+    int stat;
+
+    fd = open("/dev/tty", O_RDWR);
+    if (fd >= 0) {
+#if defined(USG) && defined(TCCLRCTTY)
+	int zero = 0;
+	(void) ioctl (fd, TCCLRCTTY, &zero);
+#elif (defined(SYSV) || defined(SVR4)) && defined(TIOCTTY)
+	int zero = 0;
+	(void) ioctl (i, TIOCTTY, &zero);
+#elif defined(TIOCNOTTY)
+	(void) ioctl (i, TIOCNOTTY, (char *) 0);    /* detach, BSD style */
+#endif
+        close(fd);
     }
+
+#if defined(SYSV) || defined(__QNXNTO__)
+    return setpgrp();
+#else
+    return setpgid(0, getpid());
+#endif
 }
 
+#endif /* !HAS_SETSID */
+
+
+/* detach */
 void
 BecomeDaemon ()
 {
-    /*
-     * Close standard file descriptors and get rid of controlling tty.
-     */
-
     /* If our C library has the daemon() function, just use it. */
-#if defined(__GLIBC__) || defined(CSRG_BASED)
+#ifdef HAS_DAEMON
     daemon (0, 0);
 #else
-    register int i;
 
-# if defined(SYSV) || defined(SVR4) || defined(__QNXNTO__)
-    setpgrp ();
-# else
-    setpgrp (0, getpid());
-# endif
+    switch (fork()) {
+    case -1:
+	/* error */
+	FatalError("daemon fork failed, %s\n", strerror(errno));
+	break;
+    case 0:
+	/* child */
+	break;
+    default:
+	/* parent */
+	exit(0);
+    }
+
+    if (setsid() == -1)
+	FatalError("setting session id for daemon failed: %s\n",
+		   strerror(errno));
+
+    chdir("/");
 
     close (0);
     close (1);
     close (2);
 
-# if !defined(__UNIXOS2__) && !defined(__CYGWIN__)
-#  if !((defined(SYSV) || defined(SVR4)) && defined(i386))
-    if ((i = open ("/dev/tty", O_RDWR)) >= 0) {	/* did open succeed? */
-#   if defined(USG) && defined(TCCLRCTTY)
-	int zero = 0;
-	(void) ioctl (i, TCCLRCTTY, &zero);
-#   else
-#    if (defined(SYSV) || defined(SVR4)) && defined(TIOCTTY)
-	int zero = 0;
-	(void) ioctl (i, TIOCTTY, &zero);
-#    else
-	(void) ioctl (i, TIOCNOTTY, (char *) 0);    /* detach, BSD style */
-#    endif
-#   endif
-	(void) close (i);
-    }
-#  endif /* !((SYSV || SVR4) && i386) */
-# endif /* !__UNIXOS2__ && !__CYGWIN__ */
-
     /*
      * Set up the standard file descriptors.
      */
-    (void) open ("/", O_RDONLY);	/* root inode already in core */
+    (void) open ("/dev/null", O_RDWR);
     (void) dup2 (0, 1);
     (void) dup2 (0, 2);
-#endif
+
+#endif /* HAS_DAEMON */
 }

Index: error.c
===================================================================
RCS file: /cvs/xorg/xc/programs/xfs/os/error.c,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/error.c	17 Nov 2003 19:03:48 -0000	1.1.4.1
+++ b/error.c	23 Feb 2004 21:37:54 -0000	1.1.4.2
@@ -44,7 +44,7 @@
  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  * THIS SOFTWARE.
  */
-/* $XFree86: xc/programs/xfs/os/error.c,v 1.11 2002/10/15 01:45:03 dawes Exp $ */
+/* $XFree86: xc/programs/xfs/os/error.c,v 1.12 2004/01/28 22:12:49 herrb Exp $ */
 
 #include	<stdio.h>
 #include	<stdlib.h>
@@ -95,7 +95,7 @@
 #ifdef SABER
     saber_stop();
 #else
-    abort();
+    _exit(1);
 #endif
 }
 

Index: utils.c
===================================================================
RCS file: /cvs/xorg/xc/programs/xfs/os/utils.c,v
retrieving revision 1.1.4.1
retrieving revision 1.1.4.2
diff -u -d -r1.1.4.1 -r1.1.4.2
--- a/utils.c	17 Nov 2003 19:03:48 -0000	1.1.4.1
+++ b/utils.c	23 Feb 2004 21:37:54 -0000	1.1.4.2
@@ -46,7 +46,7 @@
  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
  * THIS SOFTWARE.
  */
-/* $XFree86: xc/programs/xfs/os/utils.c,v 3.20 2002/10/15 01:45:03 dawes Exp $ */
+/* $XFree86: xc/programs/xfs/os/utils.c,v 3.21 2004/01/07 03:47:36 dawes Exp $ */
 
 #include	<stdio.h>
 #include	<X11/Xos.h>
@@ -526,7 +526,6 @@
     int	    oldpid;
 
     if (becomeDaemon) {
-	BecomeOrphan();
 	BecomeDaemon();
 	if ((oldpid = StorePid ())) {
 	    if (oldpid == -1)





More information about the xorg-commit mailing list