properly handle unix read on directory

This commit is contained in:
Thomas Legris
2024-12-04 12:58:19 +09:00
committed by Ron Evans
parent 6507765883
commit eeba90fd5b
2 changed files with 25 additions and 1 deletions
+6 -1
View File
@@ -1,6 +1,6 @@
//go:build !baremetal && !js && !wasm_unknown && !nintendoswitch
// Portions copyright 2009 The Go Authors. All rights reserved.
// Portions copyright 2009-2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -97,6 +97,11 @@ type unixFileHandle uintptr
// read and any error encountered. At end of file, Read returns 0, io.EOF.
func (f unixFileHandle) Read(b []byte) (n int, err error) {
n, err = syscall.Read(syscallFd(f), b)
// In case of EISDIR, n == -1.
// This breaks the assumption that n always represent the number of read bytes.
if err == syscall.EISDIR {
n = 0
}
err = handleSyscallError(err)
if n == 0 && len(b) > 0 && err == nil {
err = io.EOF