return 1;
}
-int spawn(char *program, char *argv[], char *envp[], char *pty_name,
- int stdin, int stdout, int stderr)
+extern char **environ;
+int spawn(char *program, char *argv[], int sin, int sout, int serr,
+ int search, char *envp[], char *pty_name, int wait)
{
int pid = fork();
int fd;
return pid;
/* Put us in our own process group. */
-#if defined(hpux)
+#if defined(LISP_FEATURE_HPUX)
setsid();
+#elif defined(LISP_FEATURE_DARWIN)
+ setpgid(0, getpid());
#elif defined(SVR4) || defined(__linux__) || defined(__osf__)
setpgrp();
#else
/* If we are supposed to be part of some other pty, go for it. */
if (pty_name) {
-#if !defined(hpux) && !defined(SVR4)
+#if !defined(LISP_FEATURE_HPUX) && !defined(SVR4)
fd = open("/dev/tty", O_RDWR, 0);
if (fd >= 0) {
ioctl(fd, TIOCNOTTY, 0);
close(fd);
} else{
/* Set up stdin, stdout, and stderr */
- if (stdin >= 0)
- dup2(stdin, 0);
- if (stdout >= 0)
- dup2(stdout, 1);
- if (stderr >= 0)
- dup2(stderr, 2);
+ if (sin >= 0)
+ dup2(sin, 0);
+ if (sout >= 0)
+ dup2(sout, 1);
+ if (serr >= 0)
+ dup2(serr, 2);
}
/* Close all other fds. */
#ifdef SVR4
close(fd);
#endif
+ environ = envp;
/* Exec the program. */
- execve(program, argv, envp);
+ if (search)
+ execvp(program, argv);
+ else
+ execv(program, argv);
- /* 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);
+ exit (1);
}
#else /* !LISP_FEATURE_WIN32 */
int in,
int out,
int err,
+ int search,
+ char *envp,
+ char *ptyname,
int wait
)
{
}
/* Spawn process given on the command line*/
- hProcess = (HANDLE) spawnvp ( wait_mode, program, argv );
+ if (search)
+ hProcess = (HANDLE) spawnvp ( wait_mode, program, argv );
+ else
+ hProcess = (HANDLE) spawnv ( wait_mode, program, argv );
/* Now that the process is launched, replace the original
* in/out/err handles and close the backups. */