[前][次][番号順一覧][スレッド一覧]

ruby-changes:16636

From: nobu <ko1@a...>
Date: Tue, 13 Jul 2010 21:31:32 +0900 (JST)
Subject: [ruby-changes:16636] Ruby:r28630 (trunk): * process.c (rb_daemon): split from proc_daemon.

nobu	2010-07-13 21:31:17 +0900 (Tue, 13 Jul 2010)

  New Revision: 28630

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28630

  Log:
    * process.c (rb_daemon): split from proc_daemon.

  Modified files:
    trunk/ChangeLog
    trunk/process.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28629)
+++ ChangeLog	(revision 28630)
@@ -1,5 +1,7 @@
-Tue Jul 13 21:28:35 2010  Nobuyoshi Nakada  <nobu@r...>
+Tue Jul 13 21:31:15 2010  Nobuyoshi Nakada  <nobu@r...>
 
+	* process.c (rb_daemon): split from proc_daemon.
+
 	* process.c (rb_fork_err): suppress gcc 4.4 warnings.
 
 	* random.c (fill_random_seed): ditto.
Index: process.c
===================================================================
--- process.c	(revision 28629)
+++ process.c	(revision 28630)
@@ -4554,6 +4554,11 @@
 }
 
 #if defined(HAVE_DAEMON) || (defined(HAVE_FORK) && defined(HAVE_SETSID))
+#ifndef HAVE_DAEMON
+static int rb_daemon(int nochdir, int noclose);
+#define daemon(nochdir, noclose) rb_daemon(nochdir, noclose)
+#endif
+
 /*
  *  call-seq:
  *     Process.daemon()                        -> 0
@@ -4577,14 +4582,20 @@
     rb_secure(2);
     rb_scan_args(argc, argv, "02", &nochdir, &noclose);
 
-#if defined(HAVE_DAEMON)
     prefork();
     before_fork();
     n = daemon(RTEST(nochdir), RTEST(noclose));
     after_fork();
     if (n < 0) rb_sys_fail("daemon");
     return INT2FIX(n);
-#elif defined(HAVE_FORK)
+}
+
+#ifndef HAVE_DAEMON
+static int
+rb_daemon(int nochdir, int noclose)
+{
+    int n, err = 0;
+
     switch (rb_fork(0, 0, 0, Qnil)) {
       case -1:
 	rb_sys_fail("daemon");
@@ -4599,26 +4610,26 @@
     /* must not be process-leader */
     switch (rb_fork(0, 0, 0, Qnil)) {
       case -1:
-	rb_sys_fail("daemon");
+	return -1;
       case 0:
 	break;
       default:
 	_exit(EXIT_SUCCESS);
     }
 
-    if (!RTEST(nochdir))
-	(void)chdir("/");
+    if (!nochdir)
+	err = chdir("/");
 
-    if (!RTEST(noclose) && (n = open("/dev/null", O_RDWR, 0)) != -1) {
+    if (!noclose && (n = open("/dev/null", O_RDWR, 0)) != -1) {
 	(void)dup2(n, 0);
 	(void)dup2(n, 1);
 	(void)dup2(n, 2);
 	if (n > 2)
 	    (void)close (n);
     }
-    return INT2FIX(0);
+    return err;
+}
 #endif
-}
 #else
 #define proc_daemon rb_f_notimplement
 #endif

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]