aboutsummaryrefslogtreecommitdiff
path: root/src/os/file_unix.go
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2023-05-17 09:57:37 +0200
committerGopher Robot <gobot@golang.org>2023-05-18 09:16:07 +0000
commit774f60223f9a2b1a4e2f3c042e5cea93fc90c6a8 (patch)
treef717e325819cb50c7bfaff4ba98bb343662aceb7 /src/os/file_unix.go
parent27906bb74a0bb7a684b89b92d813e52be8608991 (diff)
downloadgo-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.go6
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.