Author: Brian Kearns <bdkea...@gmail.com>
Branch: 
Changeset: r61175:0fa3dc324460
Date: 2013-02-13 06:22 -0500
http://bitbucket.org/pypy/pypy/changeset/0fa3dc324460/

Log:    revert this _io change, not worth differing from cpython

diff --git a/pypy/module/_io/interp_bufferedio.py 
b/pypy/module/_io/interp_bufferedio.py
--- a/pypy/module/_io/interp_bufferedio.py
+++ b/pypy/module/_io/interp_bufferedio.py
@@ -260,7 +260,7 @@
             raise operationerrfmt(space.w_ValueError,
                 "whence must be between 0 and 2, not %d", whence)
         self._check_closed(space, "seek of closed file")
-        if whence != 2 and self.readable and self.read_end != -1:
+        if whence != 2 and self.readable:
             # Check if seeking leaves us inside the current buffer, so as to
             # return quickly if possible. Also, we needn't take the lock in
             # this fast path.
@@ -268,15 +268,16 @@
                 self._raw_tell(space)
             current = self.abs_pos
             available = self._readahead()
-            if whence == 0:
-                offset = pos - (current - self._raw_offset())
-            else:
-                offset = pos
-            if -self.pos <= offset <= available:
-                newpos = self.pos + offset
-                assert newpos >= 0
-                self.pos = newpos
-                return space.wrap(current - available + offset)
+            if available > 0:
+                if whence == 0:
+                    offset = pos - (current - self._raw_offset())
+                else:
+                    offset = pos
+                if -self.pos <= offset <= available:
+                    newpos = self.pos + offset
+                    assert newpos >= 0
+                    self.pos = newpos
+                    return space.wrap(current - available + offset)
 
         # Fallback: invoke raw seek() method and clear buffer
         with self.lock:
diff --git a/pypy/module/_io/test/test_bufferedio.py 
b/pypy/module/_io/test/test_bufferedio.py
--- a/pypy/module/_io/test/test_bufferedio.py
+++ b/pypy/module/_io/test/test_bufferedio.py
@@ -153,19 +153,6 @@
         assert f.read() == "\nc"
         f.close()
 
-    def test_seek_nocall(self):
-        # test that when we're at the end of the buffer,
-        # an in-buffer back seek doesn't produce a raw seek
-        import _io
-        raw = _io.FileIO(self.tmpfile)
-        f = _io.BufferedReader(raw, buffer_size=3)
-        f.read(1)
-        f.seek(3, 0)
-        def failing_seek(*args):
-            assert False
-        raw.seek = failing_seek
-        f.seek(-1, 1)
-
     def test_readlines(self):
         import _io
         raw = _io.FileIO(self.tmpfile)
@@ -604,7 +591,7 @@
                 expected[j] = 2
                 expected[i] = 1
                 assert raw.getvalue() == str(expected)
-        
+
     def test_interleaved_read_write(self):
         import _io as io
         # Test for issue #12213
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to