From 912e56c3acadf2d68a43e126f5c42e6ca7074025 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 18 Sep 2001 14:34:06 +0000 Subject: SF bug #417176 (Martijn Pieters): MultiFile.read() includes CRLF boundary. Fixed by keeping a readahead buffer containing the next line. XXX We have no test suite for this. Maybe the new email package will help? --- Lib/multifile.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Lib/multifile.py b/Lib/multifile.py index 74c35f0..47e2346 100644 --- a/Lib/multifile.py +++ b/Lib/multifile.py @@ -41,6 +41,7 @@ class MultiFile: self.stack = [] # Grows down self.level = 0 self.last = 0 + self.readahead = "" if seekable: self.seekable = 1 self.start = self.fp.tell() @@ -49,7 +50,7 @@ class MultiFile: def tell(self): if self.level > 0: return self.lastpos - return self.fp.tell() - self.start + return self.fp.tell() - len(self.readahead) - self.start def seek(self, pos, whence=0): here = self.tell() @@ -67,8 +68,19 @@ class MultiFile: self.fp.seek(pos + self.start) self.level = 0 self.last = 0 + self.readahead = "" def readline(self): + if not self.readahead: + self.readahead = self._readline() + line = self.readahead + if line: + self.readahead = self._readline() + if not self.readahead and line[-1:] == "\n": + line = line[:-1] + return line + + def _readline(self): if self.level > 0: return '' line = self.fp.readline() -- cgit v0.12