Windows console I/O overhaul
[sbcl.git] / src / runtime / run-program.c
index 7377e7f..367dd77 100644 (file)
@@ -25,7 +25,7 @@
 #include <fcntl.h>
 #include <sys/ioctl.h>
 #include <unistd.h>
-
+#include <sys/wait.h>
 #include <sys/ioctl.h>
 #include <termios.h>
 #include <errno.h>
@@ -138,9 +138,12 @@ int spawn(char *program, char *argv[], int sin, int sout, int serr,
                     p += n;
                 }
             }
+            close(channel[0]);
             if (child_errno) {
                 waitpid(pid, NULL, 0);
-                pid = 0;
+                /* Our convention to tell Lisp that it was the exec that
+                 * failed, not the fork. */
+                pid = -2;
                 errno = child_errno;
             }
         }
@@ -190,7 +193,9 @@ int spawn(char *program, char *argv[], int sin, int sout, int serr,
         if (fd != channel[1]) close(fd);
 #endif
 
-    environ = envp;
+    if (envp) {
+      environ = envp;
+    }
     /* Exec the program. */
     if (search)
       execvp(program, argv);