diff options
| author | Tobias Klauser <tklauser@distanz.ch> | 2023-05-17 09:57:37 +0200 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2023-05-18 09:16:07 +0000 |
| commit | 774f60223f9a2b1a4e2f3c042e5cea93fc90c6a8 (patch) | |
| tree | f717e325819cb50c7bfaff4ba98bb343662aceb7 /src/os/file_unix.go | |
| parent | 27906bb74a0bb7a684b89b92d813e52be8608991 (diff) | |
| download | go-774f60223f9a2b1a4e2f3c042e5cea93fc90c6a8.tar.xz | |
os: set File.appendMode in NewFile if file was opened with O_APPEND
To allow skipping the use of the copy_file_range syscall on Linux which
isn't supported for destination files opened with O_APPEND, see comment
in (*File).readFrom and
https://man7.org/linux/man-pages/man2/copy_file_range.2.html#ERRORS
Fixes #60181
Change-Id: Ie0b0050faab16858412928a3d1f96442619581eb
Reviewed-on: https://go-review.googlesource.com/c/go/+/494915
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
Diffstat (limited to 'src/os/file_unix.go')
| -rw-r--r-- | src/os/file_unix.go | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/os/file_unix.go b/src/os/file_unix.go index 3d3a8b2056..b8c27d8826 100644 --- a/src/os/file_unix.go +++ b/src/os/file_unix.go @@ -106,7 +106,11 @@ func NewFile(fd uintptr, name string) *File { if nb, err := unix.IsNonblock(int(fd)); err == nil && nb { kind = kindNonBlock } - return newFile(fd, name, kind) + f := newFile(fd, name, kind) + if flags, err := unix.Fcntl(int(fd), syscall.F_GETFL, 0); err == nil { + f.appendMode = flags&syscall.O_APPEND != 0 + } + return f } // newFileKind describes the kind of file to newFile. |
