fileutil: return immediately if preallocating 0 bytes
fallocate will return EINVAL, causing zeroing to the end of a 0 byte file to fail. Fixes #8045release-3.3
parent
4c5f9e0910
commit
87a3c87e45
|
@ -127,6 +127,11 @@ func TestZeroToEnd(t *testing.T) {
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
|
// Ensure 0 size is a nop so zero-to-end on an empty file won't give EINVAL.
|
||||||
|
if err = ZeroToEnd(f); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
b := make([]byte, 1024)
|
b := make([]byte, 1024)
|
||||||
for i := range b {
|
for i := range b {
|
||||||
b[i] = 12
|
b[i] = 12
|
||||||
|
|
|
@ -25,6 +25,10 @@ import (
|
||||||
// If the operation is unsupported, no error will be returned.
|
// If the operation is unsupported, no error will be returned.
|
||||||
// Otherwise, the error encountered will be returned.
|
// Otherwise, the error encountered will be returned.
|
||||||
func Preallocate(f *os.File, sizeInBytes int64, extendFile bool) error {
|
func Preallocate(f *os.File, sizeInBytes int64, extendFile bool) error {
|
||||||
|
if sizeInBytes == 0 {
|
||||||
|
// fallocate will return EINVAL if length is 0; skip
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if extendFile {
|
if extendFile {
|
||||||
return preallocExtend(f, sizeInBytes)
|
return preallocExtend(f, sizeInBytes)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue