Oops, preserve the size invariant.
parent
9dc1d04623
commit
910d3b2f9f
|
@ -377,14 +377,19 @@ func (inode *inode) SetAttributes(size *uint64) {
|
||||||
// Update the modification time.
|
// Update the modification time.
|
||||||
inode.attributes.Mtime = inode.clock.Now()
|
inode.attributes.Mtime = inode.clock.Now()
|
||||||
|
|
||||||
// Do we need to truncate?
|
// Truncate?
|
||||||
if size != nil {
|
if size != nil {
|
||||||
intSize := int(*size)
|
intSize := int(*size)
|
||||||
|
|
||||||
|
// Update contents.
|
||||||
if intSize <= len(inode.contents) {
|
if intSize <= len(inode.contents) {
|
||||||
inode.contents = inode.contents[:intSize]
|
inode.contents = inode.contents[:intSize]
|
||||||
} else {
|
} else {
|
||||||
padding := make([]byte, intSize-len(inode.contents))
|
padding := make([]byte, intSize-len(inode.contents))
|
||||||
inode.contents = append(inode.contents, padding...)
|
inode.contents = append(inode.contents, padding...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update attributes.
|
||||||
|
inode.attributes.Size = *size
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -875,6 +875,11 @@ func (t *MemFSTest) Truncate_Smaller() {
|
||||||
err = f.Truncate(2)
|
err = f.Truncate(2)
|
||||||
AssertEq(nil, err)
|
AssertEq(nil, err)
|
||||||
|
|
||||||
|
// Stat it.
|
||||||
|
fi, err := f.Stat()
|
||||||
|
AssertEq(nil, err)
|
||||||
|
ExpectEq(2, fi.Size())
|
||||||
|
|
||||||
// Read the contents.
|
// Read the contents.
|
||||||
contents, err := ioutil.ReadFile(fileName)
|
contents, err := ioutil.ReadFile(fileName)
|
||||||
AssertEq(nil, err)
|
AssertEq(nil, err)
|
||||||
|
|
Loading…
Reference in New Issue