diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-12-01 18:34:08 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-12-01 18:34:08 -0800 |
commit | 6b9a29652474f1139dc088322cf68f22f37e5fed (patch) | |
tree | 140d7aa31c99447d679b49cc1362fa8601d4d6e2 | |
parent | 1776d5db74e7065b409b7e2d521323e8d7ea2bb5 (diff) | |
download | portage-6b9a29652474f1139dc088322cf68f22f37e5fed.tar.gz portage-6b9a29652474f1139dc088322cf68f22f37e5fed.tar.bz2 portage-6b9a29652474f1139dc088322cf68f22f37e5fed.zip |
PipeReader: use os.read/write
-rw-r--r-- | pym/_emerge/PipeReader.py | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py index 888c60963..67144c393 100644 --- a/pym/_emerge/PipeReader.py +++ b/pym/_emerge/PipeReader.py @@ -4,8 +4,8 @@ from portage import os from _emerge.AbstractPollTask import AbstractPollTask from _emerge.PollConstants import PollConstants +import errno import fcntl -import array class PipeReader(AbstractPollTask): @@ -59,26 +59,18 @@ class PipeReader(AbstractPollTask): if event & PollConstants.POLLIN: - for f in self.input_files.values(): - if fd == f.fileno(): - break - - buf = array.array('B') + data = None try: - buf.fromfile(f, self._bufsize) - except (EOFError, IOError): - pass - - if buf: - try: - # Python >=3.2 - data = buf.tobytes() - except AttributeError: - data = buf.tostring() - self._read_data.append(data) + data = os.read(fd, self._bufsize) + except IOError as e: + if e.errno not in (errno.EAGAIN,): + raise else: - self._unregister() - self.wait() + if data: + self._read_data.append(data) + else: + self._unregister() + self.wait() self._unregister_if_appropriate(event) |