mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Change Windows file.truncate() to (a) restore the original file position,
and (b) stop trying to prevent file growth. Beef up the file.truncate() docs. Change test_largefile.py to stop assuming that f.truncate() moves the file pointer to the truncation point, and to verify instead that it leaves the file position alone. Remove the test for what happens when a specified size exceeds the original file size (it's ill-defined, according to the Single Unix Spec).
This commit is contained in:
parent
9d142adfce
commit
8f01b680c8
3 changed files with 75 additions and 51 deletions
|
@ -133,24 +133,30 @@ if hasattr(f, 'truncate'):
|
|||
print 'try truncate'
|
||||
f = open(name, 'r+b')
|
||||
f.seek(0, 2)
|
||||
expect(f.tell(), size+1)
|
||||
expect(f.tell(), size+1) # else we've lost track of the true size
|
||||
# Cut it back via seek + truncate with no argument.
|
||||
newsize = size - 10
|
||||
f.seek(newsize)
|
||||
f.truncate()
|
||||
expect(f.tell(), newsize)
|
||||
# Ensure that truncate(bigger than true size) doesn't grow the file.
|
||||
f.truncate(size)
|
||||
expect(f.tell(), newsize)
|
||||
expect(f.tell(), newsize) # else pointer moved
|
||||
f.seek(0, 2)
|
||||
expect(f.tell(), newsize) # else wasn't truncated
|
||||
# Ensure that truncate(smaller than true size) shrinks the file.
|
||||
newsize -= 1
|
||||
f.seek(0)
|
||||
f.seek(42)
|
||||
f.truncate(newsize)
|
||||
expect(f.tell(), newsize)
|
||||
expect(f.tell(), 42) # else pointer moved
|
||||
f.seek(0, 2)
|
||||
expect(f.tell(), newsize) # else wasn't truncated
|
||||
|
||||
# XXX truncate(larger than true size) is ill-defined across platforms
|
||||
|
||||
# cut it waaaaay back
|
||||
f.truncate(1)
|
||||
f.seek(0)
|
||||
expect(len(f.read()), 1)
|
||||
f.truncate(1)
|
||||
expect(f.tell(), 0) # else pointer moved
|
||||
expect(len(f.read()), 1) # else wasn't truncated
|
||||
|
||||
f.close()
|
||||
|
||||
os.unlink(name)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue