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 27d0929..e86e4dd 100644 (file)
--- a/early.c
+++ b/early.c
@@ -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)