[Python-checkins] CVS: python/dist/src/Lib multifile.py,1.18,1.19

Guido van Rossum gvanrossum@users.sourceforge.net
Tue, 18 Sep 2001 07:34:08 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv31026

Modified Files:
	multifile.py 
Log Message:
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?


Index: multifile.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/multifile.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** multifile.py	2001/08/02 07:15:29	1.18
--- multifile.py	2001/09/18 14:34:06	1.19
***************
*** 42,45 ****
--- 42,46 ----
          self.level = 0
          self.last = 0
+         self.readahead = ""
          if seekable:
              self.seekable = 1
***************
*** 50,54 ****
          if self.level > 0:
              return self.lastpos
!         return self.fp.tell() - self.start
  
      def seek(self, pos, whence=0):
--- 51,55 ----
          if self.level > 0:
              return self.lastpos
!         return self.fp.tell() - len(self.readahead) - self.start
  
      def seek(self, pos, whence=0):
***************
*** 68,73 ****
--- 69,85 ----
          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 ''