From f1ec68632ff22b72b25c0d70cc2f2c137f957a91 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 16 Dec 2011 11:32:39 -0800 Subject: SpawnProcess/AbstractPollTask: eliminate array Since commit 30d2d0a9db486c5a70848ad5d27b37a3ec48f271, we use os.read() due to bugs in array.fromfile(). So, eliminate array usage entirely. --- pym/_emerge/AbstractPollTask.py | 20 ++++++-------------- pym/_emerge/SpawnProcess.py | 13 ++----------- 2 files changed, 8 insertions(+), 25 deletions(-) (limited to 'pym') diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py index d4785a2a1..b3c0b2d16 100644 --- a/pym/_emerge/AbstractPollTask.py +++ b/pym/_emerge/AbstractPollTask.py @@ -1,7 +1,6 @@ # Copyright 1999-2011 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -import array import errno import logging import os @@ -27,10 +26,9 @@ class AbstractPollTask(AsynchronousTask): | POLLIN | RETURN | BIT | VALUE | --------------------------------------------------- - | 1 | Read self._bufsize into an instance of - | | array.array('B') and return it, ignoring - | | EOFError and IOError. An empty array - | | indicates EOF. + | 1 | Read self._bufsize into a string of bytes, + | | handling EAGAIN and EIO. An empty string + | | of bytes indicates EOF. | --------------------------------------------------- | 0 | None """ @@ -39,20 +37,14 @@ class AbstractPollTask(AsynchronousTask): # and Python 3.2). buf = None if event & PollConstants.POLLIN: - buf = array.array('B') try: - # Python >=3.2 - frombytes = buf.frombytes - except AttributeError: - frombytes = buf.fromstring - try: - frombytes(os.read(fd, self._bufsize)) + buf = os.read(fd, self._bufsize) except OSError as e: # EIO happens with pty on Linux after the # slave end of the pty has been closed. if e.errno == errno.EIO: - # EOF: return empty buffer - pass + # EOF: return empty string of bytes + buf = b'' elif e.errno == errno.EAGAIN: # EAGAIN: return None buf = None diff --git a/pym/_emerge/SpawnProcess.py b/pym/_emerge/SpawnProcess.py index 9f83ef0de..ec5bf7d2f 100644 --- a/pym/_emerge/SpawnProcess.py +++ b/pym/_emerge/SpawnProcess.py @@ -183,7 +183,7 @@ class SpawnProcess(SubProcess): while True: try: if not write_successful: - buf.tofile(files.stdout) + files.stdout.write(buf) write_successful = True files.stdout.flush() break @@ -213,16 +213,7 @@ class SpawnProcess(SubProcess): fcntl.fcntl(files.stdout.fileno(), fcntl.F_GETFL) ^ os.O_NONBLOCK) - try: - buf.tofile(files.log) - except TypeError: - # array.tofile() doesn't work with GzipFile - try: - # Python >=3.2 - data = buf.tobytes() - except AttributeError: - data = buf.tostring() - files.log.write(data) + files.log.write(buf) files.log.flush() self._unregister_if_appropriate(event) -- cgit v1.2.3-1-g7c22