chiark / gitweb /
main: move basic setup into main.c
authorLennart Poettering <lennart@poettering.net>
Tue, 6 Apr 2010 19:59:25 +0000 (21:59 +0200)
committerLennart Poettering <lennart@poettering.net>
Tue, 6 Apr 2010 19:59:25 +0000 (21:59 +0200)
main.c
manager.c

diff --git a/main.c b/main.c
index 838f5c89e3812a97e21503a000329af5d9f4c0cb..86ccc72a168be8b7472fe062f2137b2e1c741cfa 100644 (file)
--- a/main.c
+++ b/main.c
 #include <errno.h>
 #include <string.h>
 #include <unistd.h>
 #include <errno.h>
 #include <string.h>
 #include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
 
 #include "manager.h"
 #include "log.h"
 
 #include "manager.h"
 #include "log.h"
+#include "mount-setup.h"
 
 int main(int argc, char *argv[]) {
         Manager *m = NULL;
 
 int main(int argc, char *argv[]) {
         Manager *m = NULL;
@@ -41,6 +44,31 @@ int main(int argc, char *argv[]) {
         else
                 default_unit = SPECIAL_DEFAULT_TARGET;
 
         else
                 default_unit = SPECIAL_DEFAULT_TARGET;
 
+        /* Move out of the way, so that we won't block unmounts */
+        assert_se(chdir("/")  == 0);
+
+        /* Reset all signal handlers. */
+        assert_se(reset_all_signal_handlers() == 0);
+
+        /* Become a session leader if we aren't one yet. */
+        setsid();
+
+        /* Disable the umask logic */
+        umask(0);
+
+        /* Make sure D-Bus doesn't fiddle with the SIGPIPE handlers */
+        dbus_connection_set_change_sigpipe(FALSE);
+
+        /* Mount /dev, /sys and friends */
+        mount_setup();
+
+        /* Set up logging */
+        log_set_target(LOG_TARGET_CONSOLE);
+
+        /* Open the logging devices, if possible and necessary*/
+        log_open_syslog();
+        log_open_kmsg();
+
         if ((r = manager_new(&m)) < 0) {
                 log_error("Failed to allocate manager object: %s", strerror(-r));
                 goto finish;
         if ((r = manager_new(&m)) < 0) {
                 log_error("Failed to allocate manager object: %s", strerror(-r));
                 goto finish;
index 4cfa6b9cdc4ee9e61f4f8bd3258ee9800d88856c..7d3b8b503922d55a54880d28ca5eb6f227e0c614 100644 (file)
--- a/manager.c
+++ b/manager.c
@@ -49,8 +49,6 @@ static int manager_setup_signals(Manager *m) {
 
         assert(m);
 
 
         assert(m);
 
-        assert_se(reset_all_signal_handlers() == 0);
-
         assert_se(sigemptyset(&mask) == 0);
         assert_se(sigaddset(&mask, SIGCHLD) == 0);
         assert_se(sigaddset(&mask, SIGINT) == 0);   /* Kernel sends us this on control-alt-del */
         assert_se(sigemptyset(&mask) == 0);
         assert_se(sigaddset(&mask, SIGCHLD) == 0);
         assert_se(sigaddset(&mask, SIGINT) == 0);   /* Kernel sends us this on control-alt-del */
@@ -300,23 +298,12 @@ int manager_new(Manager **_m) {
         if ((r = manager_find_paths(m)) < 0)
                 goto fail;
 
         if ((r = manager_find_paths(m)) < 0)
                 goto fail;
 
-        if (chdir("/") < 0)
-                log_warning("Failed to chdir to /: %s", strerror(errno));
-
-        /* Become a session leader if we aren't one yet. */
-        setsid();
-
         if ((r = manager_setup_signals(m)) < 0)
                 goto fail;
 
         if ((r = manager_setup_signals(m)) < 0)
                 goto fail;
 
-        if ((r = mount_setup()) < 0)
-                goto fail;
-
         if ((r = manager_setup_cgroup(m)) < 0)
                 goto fail;
 
         if ((r = manager_setup_cgroup(m)) < 0)
                 goto fail;
 
-        dbus_connection_set_change_sigpipe(FALSE);
-
         /* Try to connect to the busses, if possible. */
         if ((r = bus_init_system(m)) < 0 ||
             (r = bus_init_api(m)) < 0)
         /* Try to connect to the busses, if possible. */
         if ((r = bus_init_system(m)) < 0 ||
             (r = bus_init_api(m)) < 0)