diff -uNr bochs-2.6.9/gui/term.cc bochs-2.6.9.mod/gui/term.cc --- bochs-2.6.9/gui/term.cc 2017-01-15 19:44:43.000000000 +0800 +++ bochs-2.6.9.mod/gui/term.cc 2019-08-26 01:42:56.996929000 +0800 @@ -33,7 +33,11 @@ #include }; -#define BX_DEBUGGER_TERM (BX_DEBUGGER && !defined(__OpenBSD__)) +#if BX_DEBUGGER && !defined(__OpenBSD__) +#define BX_DEBUGGER_TERM 1 +#else +#define BX_DEBUGGER_TERM 0 +#endif class bx_term_gui_c : public bx_gui_c { public: @@ -180,20 +184,25 @@ if (!strcmp(SIM->get_param_string(BXPN_LOG_FILENAME)->getptr(), "-")) BX_PANIC(("cannot log to stderr in term mode")); #else - FILE *old_stdin = stdin; - FILE *old_stdout = stdout; + int old_stdin = dup(STDIN_FILENO); + int old_stdout = dup(STDOUT_FILENO); scr_fd = open("/dev/ptmx",O_RDWR); if(scr_fd > 0){ - stdin = stdout = fdopen(scr_fd,"wr"); grantpt(scr_fd); unlockpt(scr_fd); + FILE * pty = fdopen(scr_fd,"wr"); + int pts = fileno(pty); + dup2(pts,STDIN_FILENO); + dup2(pts,STDOUT_FILENO); fprintf(stderr, "\nBochs connected to screen \"%s\"\n",ptsname(scr_fd)); } #endif initscr(); #if BX_DEBUGGER_TERM - stdin = old_stdin; - stdout = old_stdout; + dup2(old_stdin,STDIN_FILENO); + dup2(old_stdout,STDOUT_FILENO); + close(old_stdin); + close(old_stdout); #endif start_color(); cbreak();