From a1020fb61d228de4e455924eaa50f2320018056a Mon Sep 17 00:00:00 2001 From: Daniel P. Berrange Date: May 05 2008 17:52:21 +0000 Subject: Fix text console PTYs to be in rawmode --- diff --git a/qemu-0.9.1-pty-rawmode.patch b/qemu-0.9.1-pty-rawmode.patch new file mode 100644 index 0000000..3959a55 --- /dev/null +++ b/qemu-0.9.1-pty-rawmode.patch @@ -0,0 +1,94 @@ +diff -rup qemu-0.9.1.orig/vl.c qemu-0.9.1.new/vl.c +--- qemu-0.9.1.orig/vl.c 2008-05-05 13:32:55.000000000 -0400 ++++ qemu-0.9.1.new/vl.c 2008-05-05 13:33:17.000000000 -0400 +@@ -2200,28 +2200,78 @@ static CharDriverState *qemu_chr_open_st + return chr; + } + ++#ifdef __sun__ ++/* Once Solaris has openpty(), this is going to be removed. */ ++int openpty(int *amaster, int *aslave, char *name, ++ struct termios *termp, struct winsize *winp) ++{ ++ const char *slave; ++ int mfd = -1, sfd = -1; ++ ++ *amaster = *aslave = -1; ++ ++ mfd = open("/dev/ptmx", O_RDWR | O_NOCTTY); ++ if (mfd < 0) ++ goto err; ++ ++ if (grantpt(mfd) == -1 || unlockpt(mfd) == -1) ++ goto err; ++ ++ if ((slave = ptsname(mfd)) == NULL) ++ goto err; ++ ++ if ((sfd = open(slave, O_RDONLY | O_NOCTTY)) == -1) ++ goto err; ++ ++ if (ioctl(sfd, I_PUSH, "ptem") == -1 || ++ (termp != NULL && tcgetattr(sfd, termp) < 0)) ++ goto err; ++ ++ if (amaster) ++ *amaster = mfd; ++ if (aslave) ++ *aslave = sfd; ++ if (winp) ++ ioctl(sfd, TIOCSWINSZ, winp); ++ ++ return 0; ++ ++err: ++ if (sfd != -1) ++ close(sfd); ++ close(mfd); ++ return -1; ++} ++ ++void cfmakeraw (struct termios *termios_p) ++{ ++ termios_p->c_iflag &= ++ ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); ++ termios_p->c_oflag &= ~OPOST; ++ termios_p->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); ++ termios_p->c_cflag &= ~(CSIZE|PARENB); ++ termios_p->c_cflag |= CS8; ++ ++ termios_p->c_cc[VMIN] = 0; ++ termios_p->c_cc[VTIME] = 0; ++} ++#endif ++ + #if defined(__linux__) || defined(__sun__) + static CharDriverState *qemu_chr_open_pty(void) + { + struct termios tty; +- char slave_name[1024]; + int master_fd, slave_fd; + +-#if defined(__linux__) +- /* Not satisfying */ +- if (openpty(&master_fd, &slave_fd, slave_name, NULL, NULL) < 0) { ++ if (openpty(&master_fd, &slave_fd, NULL, NULL, NULL) < 0) { + return NULL; + } +-#endif + +- /* Disabling local echo and line-buffered output */ +- tcgetattr (master_fd, &tty); +- tty.c_lflag &= ~(ECHO|ICANON|ISIG); +- tty.c_cc[VMIN] = 1; +- tty.c_cc[VTIME] = 0; +- tcsetattr (master_fd, TCSAFLUSH, &tty); ++ /* Set raw attributes on the pty. */ ++ cfmakeraw(&tty); ++ tcsetattr(slave_fd, TCSAFLUSH, &tty); + +- fprintf(stderr, "char device redirected to %s\n", slave_name); ++ fprintf(stderr, "char device redirected to %s\n", ptsname(master_fd)); + return qemu_chr_open_fd(master_fd, master_fd); + } + diff --git a/qemu.spec b/qemu.spec index d28740f..c60ab41 100644 --- a/qemu.spec +++ b/qemu.spec @@ -8,7 +8,7 @@ Summary: QEMU is a FAST! processor emulator Name: qemu Version: 0.9.1 -Release: 6%{?dist} +Release: 7%{?dist} License: GPLv2+ and LGPLv2+ Group: Development/Tools URL: http://www.qemu.org/ @@ -18,6 +18,8 @@ Patch0: qemu-0.7.0-build.patch # Change default NIC to rtl8139 to get link-state detection Patch3: qemu-0.9.1-nic-defaults.patch Patch4: qemu-%{version}-block-rw-range-check.patch +# Upstream SVN changeset #4338 +Patch5: qemu-%{version}-pty-rawmode.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: SDL-devel compat-gcc-%{gccver} zlib-devel which texi2html gnutls-devel Requires(post): /sbin/chkconfig @@ -54,6 +56,7 @@ This package provides the command line tool for manipulating disk images %patch0 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 %build ./configure \ @@ -125,6 +128,9 @@ fi %{_mandir}/man1/qemu-img.1* %changelog +* Mon May 5 2008 Daniel P. Berrange - 0.9.1-7.fc10 +- Fix text console PTYs to be in rawmode + * Sun Apr 27 2008 Lubomir Kundrak - 0.9.1-6 - Register binary handler for SuperH-4 CPU