+ int fd;
+ char ptydev[] = "/dev/pty??";
+ char ttydev[] = "/dev/tty??";
+ int len = strlen(ttydev);
+ const char *c1, *c2;
+
+ for (c1 = PTYCHAR1; *c1; c1++) {
+ ptydev[len-2] = ttydev[len-2] = *c1;
+ for (c2 = PTYCHAR2; *c2; c2++) {
+ ptydev[len-1] = ttydev[len-1] = *c2;
+ if ((fd = open(ptydev, O_RDWR)) >= 0) {
+ if (access(ttydev, R_OK|W_OK) == 0) {
+ strcpy(tty_str, ttydev);
+ return fd;
+ }
+ close(fd);
+ }
+ }
+ }
+ return -1;
+}
+
+static int
+run_process(const char *path, const char **argv, int *fd_ptr, int *pid_ptr)
+{
+ int pty_fd, pid, i, nb_fds;
+ char tty_name[32];