syslog() is a blocking call on eglibc. as procd provides the actual syslog, weneed...
[project/procd.git] / early.c
diff --git a/early.c b/early.c
index 063e1a6..e86e4dd 100644 (file)
--- a/early.c
+++ b/early.c
 
 static void early_mounts(void)
 {
-       mount("proc", "/proc", "proc", 0, 0);
-       mount("sysfs", "/sys", "sysfs", 0, 0);
+       mount("proc", "/proc", "proc", MS_NOATIME, 0);
+       mount("sysfs", "/sys", "sysfs", MS_NOATIME, 0);
 
-       mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID | MS_NODEV, "size=512k,mode=1777");
+       mount("tmpfs", "/tmp", "tmpfs", MS_NOSUID | MS_NODEV | MS_NOATIME, NULL);
        mkdir("/tmp/run", 0777);
        mkdir("/tmp/lock", 0777);
        mkdir("/tmp/state", 0777);
        symlink("/tmp", "/var");
 
-       mount("tmpfs", "/dev", "tmpfs", 0, "mode=0755,size=512K");
+       mount("tmpfs", "/dev", "tmpfs", MS_NOATIME, "mode=0755,size=512K");
        mkdir("/dev/shm", 0755);
        mkdir("/dev/pts", 0755);
-       mount("devpts", "/dev/pts", "devpts", 0, 0);
+       mount("devpts", "/dev/pts", "devpts", MS_NOATIME, "mode=600");
 }
 
 static void early_dev(void)
@@ -49,14 +49,12 @@ static void early_console(const char *dev)
        struct stat s;
        int dd;
 
-       if (stat(dev, &s))
-               mkdev("*console", 0600);
+       if (stat(dev, &s)) {
+               ERROR("Failed to stat %s\n", dev);
+               return;
+       }
 
        dd = open(dev, O_RDWR);
-       close(STDIN_FILENO);
-       close(STDOUT_FILENO);
-       close(STDERR_FILENO);
-
        if (dd < 0) {
                ERROR("Failed to open %s\n", dev);
                return;
@@ -65,7 +63,11 @@ static void early_console(const char *dev)
        dup2(dd, STDIN_FILENO);
        dup2(dd, STDOUT_FILENO);
        dup2(dd, STDERR_FILENO);
-       close(dd);
+
+       if (dd != STDIN_FILENO &&
+           dd != STDOUT_FILENO &&
+           dd != STDERR_FILENO)
+               close(dd);
 }
 
 static void early_env(void)