]> granicus.if.org Git - python/commitdiff
SF bug #417176 (Martijn Pieters): MultiFile.read() includes CRLF
authorGuido van Rossum <guido@python.org>
Tue, 18 Sep 2001 14:34:06 +0000 (14:34 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 18 Sep 2001 14:34:06 +0000 (14:34 +0000)
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

index 74c35f0388f0979560fc2bde58134ff90f7b981c..47e2346978a9ffac2ff0e289f884f67a04bd8a51 100644 (file)
@@ -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()