Bug #198491 - Disable termios.OPOST post-processing of output on
authorZac Medico <zmedico@gentoo.org>
Fri, 9 Nov 2007 03:33:07 +0000 (03:33 -0000)
committerZac Medico <zmedico@gentoo.org>
Fri, 9 Nov 2007 03:33:07 +0000 (03:33 -0000)
the slave pty file descriptor since otherwise weird things like
\n -> \r\n transformations may occur. Thanks to Ulrich Mueller
<ulm@gentoo.org> for this patch.

svn path=/main/trunk/; revision=8473

pym/portage/__init__.py

index f5ea0318afd154ed8cc57b82e285391b9fb75f3b..40814d4b84aad1e908fbb6c45254b54a3adcbad1 100644 (file)
@@ -2616,6 +2616,13 @@ def spawn(mystring, mysettings, debug=0, free=0, droppriv=0, sesandbox=0, fakero
                                writemsg("openpty failed: '%s'\n" % str(e), noiselevel=1)
                                del e
                                master_fd, slave_fd = os.pipe()
+               if got_pty:
+                       # Disable post-processing of output since otherwise weird
+                       # things like \n -> \r\n transformations may occur.
+                       import termios
+                       mode = termios.tcgetattr(slave_fd)
+                       mode[1] &= ~termios.OPOST
+                       termios.tcsetattr(slave_fd, termios.TCSANOW, mode)
 
                # We must set non-blocking mode before we close the slave_fd
                # since otherwise the fcntl call can fail on FreeBSD (the child