int attach_terminal(int in, int out, int ctl, void *info, int len) { struct terminal *term; fcntl(terminal_pipe[0], F_SETFL, O_NONBLOCK); fcntl(terminal_pipe[1], F_SETFL, O_NONBLOCK); handle_trm(in, out, out, terminal_pipe[1], ctl, info, len); mem_free(info); if ((term = init_term(terminal_pipe[0], out, win_func))) { handle_basic_signals(term); /* OK, this is race condition, but it must be so; GPM installs it's own buggy TSTP handler */ return terminal_pipe[1]; } close(terminal_pipe[0]); close(terminal_pipe[1]); return -1; }
int attach_terminal(int in, int out, int ctl, void *info, int len) { struct terminal *term; int rs; set_nonblock(terminal_pipe[0]); set_nonblock(terminal_pipe[1]); handle_trm(in, out, out, terminal_pipe[1], ctl, info, len); mem_free(info); if ((term = init_term(terminal_pipe[0], out, win_func))) { handle_basic_signals(term); /* OK, this is race condition, but it must be so; GPM installs it's own buggy TSTP handler */ return terminal_pipe[1]; } EINTRLOOP(rs, close(terminal_pipe[0])); EINTRLOOP(rs, close(terminal_pipe[1])); return -1; }