mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
Patch # 1323 by Amaury Forgeot d'Arc.
This patch corrects a problem in test_file.py on Windows: f.truncate() seeks to the truncation point, but does not empty the buffers. In the test, f.tell() returns -1...
This commit is contained in:
parent
687b9c0779
commit
79b79eeab2
2 changed files with 24 additions and 10 deletions
19
Lib/io.py
19
Lib/io.py
|
@ -597,9 +597,24 @@ class _BufferedIOMixin(BufferedIOBase):
|
|||
return self.raw.tell()
|
||||
|
||||
def truncate(self, pos=None):
|
||||
# On Windows, the truncate operation changes the current position
|
||||
# to the end of the file, which may leave us with desynchronized
|
||||
# buffers.
|
||||
# Since we promise that truncate() won't change the current position,
|
||||
# the easiest thing is to capture current pos now and seek back to
|
||||
# it at the end.
|
||||
|
||||
initialpos = self.tell()
|
||||
if pos is None:
|
||||
pos = self.tell()
|
||||
return self.raw.truncate(pos)
|
||||
pos = initialpos
|
||||
|
||||
# Flush the stream. We're mixing buffered I/O with lower-level I/O,
|
||||
# and a flush may be necessary to synch both views of the current
|
||||
# file state.
|
||||
self.flush()
|
||||
newpos = self.raw.truncate(pos)
|
||||
self.seek(initialpos)
|
||||
return newpos
|
||||
|
||||
### Flush and close ###
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue