Commit 912e56c3 authored by Guido van Rossum's avatar Guido van Rossum

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?
parent 555d12f9
......@@ -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()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment