diff -uNr qemu-3.1.0/util/qemu-openpty.c qemu-3.1.0.mod/util/qemu-openpty.c --- qemu-3.1.0/util/qemu-openpty.c 2018-12-11 19:44:35.000000000 +0200 +++ qemu-3.1.0.mod/util/qemu-openpty.c 2019-05-27 15:04:41.083303559 +0300 @@ -108,6 +108,35 @@ } #endif +#ifdef __ANDROID__ +#ifdef __ANDROID_API__ < 24 +static int openpty(int* amaster, int* aslave, char* name, const struct termios* termp, const struct winsize* winp) +{ + char buf[512]; + + int master = open("/dev/ptmx", O_RDWR); + if (master == -1) return -1; + if (grantpt(master) || unlockpt(master) || ptsname_r(master, buf, sizeof buf)) goto fail; + + int slave = open(buf, O_RDWR | O_NOCTTY); + if (slave == -1) goto fail; + + /* XXX Should we ignore errors here? */ + if (termp) tcsetattr(slave, TCSANOW, termp); + if (winp) ioctl(slave, TIOCSWINSZ, winp); + + *amaster = master; + *aslave = slave; + if (name != NULL) strcpy(name, buf); + return 0; + +fail: + close(master); + return -1; +} +#endif +#endif + int qemu_openpty_raw(int *aslave, char *pty_name) { int amaster;