Merge release-20190806.1-368-g4fdd69d (automated)
This commit is contained in:
commit
40e8158c9c
|
@ -221,6 +221,8 @@ type InodeOperations interface {
|
||||||
// sys_ftruncate.
|
// sys_ftruncate.
|
||||||
//
|
//
|
||||||
// Implementations need not check that length >= 0.
|
// Implementations need not check that length >= 0.
|
||||||
|
//
|
||||||
|
// Truncate must only be called on regular files.
|
||||||
Truncate(ctx context.Context, inode *Inode, size int64) error
|
Truncate(ctx context.Context, inode *Inode, size int64) error
|
||||||
|
|
||||||
// Allocate allows the caller to reserve disk space for the inode.
|
// Allocate allows the caller to reserve disk space for the inode.
|
||||||
|
|
|
@ -169,7 +169,7 @@ func openAt(t *kernel.Task, dirFD int32, addr usermem.Addr, flags uint) (fd uint
|
||||||
if dirPath {
|
if dirPath {
|
||||||
return syserror.ENOTDIR
|
return syserror.ENOTDIR
|
||||||
}
|
}
|
||||||
if flags&linux.O_TRUNC != 0 {
|
if flags&linux.O_TRUNC != 0 && fs.IsRegular(d.Inode.StableAttr) {
|
||||||
if err := d.Inode.Truncate(t, d, 0); err != nil {
|
if err := d.Inode.Truncate(t, d, 0); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -397,7 +397,7 @@ func createAt(t *kernel.Task, dirFD int32, addr usermem.Addr, flags uint, mode l
|
||||||
}
|
}
|
||||||
|
|
||||||
// Should we truncate the file?
|
// Should we truncate the file?
|
||||||
if flags&linux.O_TRUNC != 0 {
|
if flags&linux.O_TRUNC != 0 && fs.IsRegular(found.Inode.StableAttr) {
|
||||||
if err := found.Inode.Truncate(t, found, 0); err != nil {
|
if err := found.Inode.Truncate(t, found, 0); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -1483,7 +1483,7 @@ func Truncate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sysc
|
||||||
if fs.IsDir(d.Inode.StableAttr) {
|
if fs.IsDir(d.Inode.StableAttr) {
|
||||||
return syserror.EISDIR
|
return syserror.EISDIR
|
||||||
}
|
}
|
||||||
if !fs.IsFile(d.Inode.StableAttr) {
|
if !fs.IsRegular(d.Inode.StableAttr) {
|
||||||
return syserror.EINVAL
|
return syserror.EINVAL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1523,7 +1523,7 @@ func Ftruncate(t *kernel.Task, args arch.SyscallArguments) (uintptr, *kernel.Sys
|
||||||
|
|
||||||
// Note that this is different from truncate(2) above, where a
|
// Note that this is different from truncate(2) above, where a
|
||||||
// directory returns EISDIR.
|
// directory returns EISDIR.
|
||||||
if !fs.IsFile(file.Dirent.Inode.StableAttr) {
|
if !fs.IsRegular(file.Dirent.Inode.StableAttr) {
|
||||||
return 0, nil, syserror.EINVAL
|
return 0, nil, syserror.EINVAL
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue