summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/__init__.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-07-12 07:32:55 +0000
committerZac Medico <zmedico@gentoo.org>2008-07-12 07:32:55 +0000
commit529a4762cfd8b650b8567be2f1423926d6cbaf9e (patch)
treeae53a1d524b538a6c031753f10f5cbabf4f77555 /pym/_emerge/__init__.py
parent31b18e72b3ed4077f31be583d9a83ad2de53df29 (diff)
downloadportage-529a4762cfd8b650b8567be2f1423926d6cbaf9e.tar.gz
portage-529a4762cfd8b650b8567be2f1423926d6cbaf9e.tar.bz2
portage-529a4762cfd8b650b8567be2f1423926d6cbaf9e.zip
Derive a PtyReaderTestCase from PipeReaderTestCase. This test is expected to
fail on some operating systems such as Darwin that do not support poll() on pty devices. svn path=/main/trunk/; revision=11023
Diffstat (limited to 'pym/_emerge/__init__.py')
-rw-r--r--pym/_emerge/__init__.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/pym/_emerge/__init__.py b/pym/_emerge/__init__.py
index 6f975449a..b111157ea 100644
--- a/pym/_emerge/__init__.py
+++ b/pym/_emerge/__init__.py
@@ -1594,6 +1594,8 @@ class PipeReader(AsynchronousTask):
__slots__ = ("input_files", "scheduler",) + \
("pid", "registered", "_reg_ids", "_read_data")
+ _bufsize = 4096
+
def _start(self):
self._reg_ids = set()
self._read_data = []
@@ -1628,8 +1630,16 @@ class PipeReader(AsynchronousTask):
for f in files.itervalues():
if fd == f.fileno():
break
- self._read_data.append(f.read())
- if not self._read_data[-1]:
+
+ buf = array.array('B')
+ try:
+ buf.fromfile(f, self._bufsize)
+ except EOFError:
+ pass
+
+ if buf:
+ self._read_data.append(buf.tostring())
+ else:
for f in files.values():
f.close()
self.registered = False