cleanup of previous CVS-check-in mistakes
authorWilliam Harold Newman <william.newman@airmail.net>
Thu, 28 Sep 2000 15:28:07 +0000 (15:28 +0000)
committerWilliam Harold Newman <william.newman@airmail.net>
Thu, 28 Sep 2000 15:28:07 +0000 (15:28 +0000)
I did "cvs add" for files which I'd overlooked in previous checkins.
I miss pcl-cvs.:-(

src/runtime/GNUmakefile
src/runtime/run-program.c [new file with mode: 0644]
version.lisp-expr

index a8c4e79..9f96cd5 100644 (file)
@@ -25,7 +25,7 @@ include Config
 SRCS = alloc.c backtrace.c breakpoint.c coreparse.c \
        dynbind.c globals.c interr.c interrupt.c \
        monitor.c parse.c print.c purify.c \
-       regnames.c runprog.c runtime.c save.c search.c \
+       regnames.c run-program.c runtime.c save.c search.c \
        time.c validate.c vars.c \
        ${ARCH_SRC} ${ASSEM_SRC} ${OS_SRC} ${GC_SRC}
 
diff --git a/src/runtime/run-program.c b/src/runtime/run-program.c
new file mode 100644 (file)
index 0000000..a4bfbf1
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * support for the Lisp function RUN-PROGRAM and friends
+ */
+
+/*
+ * This software is part of the SBCL system. See the README file for
+ * more information.
+ *
+ * This software is derived from the CMU CL system, which was
+ * written at Carnegie Mellon University and released into the
+ * public domain. The software is in the public domain and is
+ * provided with absolutely no warranty. See the COPYING and CREDITS
+ * files for more information.
+ */
+
+/*
+ * $Header$
+ */
+
+#include <sys/file.h>
+#include <sys/fcntl.h>
+#include <sys/ioctl.h>
+#ifdef SVR4
+#include <unistd.h>
+#endif
+
+int spawn(char *program, char *argv[], char *envp[], char *pty_name,
+         int stdin, int stdout, int stderr)
+{
+    int pid = fork();
+    int fd;
+
+    if (pid != 0)
+       return pid;
+
+    /* Put us in our own process group. */
+#if defined(hpux)
+    setsid();
+#elif defined(SVR4)
+    setpgrp();
+#else
+    setpgrp(0, getpid());
+#endif
+
+    /* If we are supposed to be part of some other pty, go for it. */
+    if (pty_name) {
+#if !defined(hpux) && !defined(SVR4)
+       fd = open("/dev/tty", O_RDWR, 0);
+       if (fd >= 0) {
+           ioctl(fd, TIOCNOTTY, 0);
+           close(fd);
+       }
+#endif
+
+       fd = open(pty_name, O_RDWR, 0);
+       dup2(fd, 0);
+       dup2(fd, 1);
+       dup2(fd, 2);
+       close(fd);
+    }
+
+    /* Set up stdin, stdout, and stderr */
+    if (stdin >= 0)
+       dup2(stdin, 0);
+    if (stdout >= 0)
+       dup2(stdout, 1);
+    if (stderr >= 0)
+       dup2(stderr, 2);
+
+    /* Close all other fds. */
+#ifdef SVR4
+    for (fd = sysconf(_SC_OPEN_MAX)-1; fd >= 3; fd--)
+       close(fd);
+#else
+    for (fd = getdtablesize()-1; fd >= 3; fd--)
+       close(fd);
+#endif
+
+    /* Exec the program. */
+    execve(program, argv, envp);
+
+    /* It didn't work, so try /bin/sh. */
+    argv[0] = program;
+    argv[-1] = "sh";
+    execve("/bin/sh", argv-1, envp);
+
+    /* The exec didn't work, flame out. */
+    exit(1);
+}
index 7205a7a..f476b4c 100644 (file)
@@ -15,4 +15,4 @@
 ;;; versions, and a string a la "0.6.5.12" is used for versions which
 ;;; aren't released but correspond only to CVS tags or snapshots.
 
-"0.6.7.4"
+"0.6.7.5"