termux-packages/x11-packages/bochs/gui-term.cc.patch

48 lines
1.3 KiB
Diff

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 <signal.h>
};
-#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();