mirror of
https://github.com/golang/go.git
synced 2026-02-05 02:15:06 +03:00
os: allow direntries to have zero inodes on Linux
Some Linux filesystems have been known to return valid enties with
zero inodes. This new behavior also puts Go in agreement with recent
glibc.
Fixes #76428
Change-Id: Ieaf50739a294915a3ea2ef8c5a3bb2a91a186881
GitHub-Last-Rev: 8f83d009ef
GitHub-Pull-Request: golang/go#76448
Reviewed-on: https://go-review.googlesource.com/c/go/+/724220
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
committed by
Gopher Robot
parent
f1bbc66a10
commit
cec4d4303f
@@ -112,7 +112,8 @@ func (f *File) readdir(n int, mode readdirMode) (names []string, dirents []DirEn
|
||||
// or might expose a remote file system which does not have the concept
|
||||
// of inodes. Therefore, we cannot make the assumption that it is safe
|
||||
// to skip entries with zero inodes.
|
||||
if ino == 0 && runtime.GOOS != "wasip1" {
|
||||
// Some Linux filesystems (old XFS, FUSE) can return valid files with zero inodes.
|
||||
if ino == 0 && runtime.GOOS != "linux" && runtime.GOOS != "wasip1" {
|
||||
continue
|
||||
}
|
||||
const namoff = uint64(unsafe.Offsetof(syscall.Dirent{}.Name))
|
||||
|
||||
@@ -73,8 +73,8 @@ func ParseDirent(buf []byte, max int, names []string) (consumed int, count int,
|
||||
break
|
||||
}
|
||||
// See src/os/dir_unix.go for the reason why this condition is
|
||||
// excluded on wasip1.
|
||||
if ino == 0 && runtime.GOOS != "wasip1" { // File absent in directory.
|
||||
// excluded on wasip1 and linux.
|
||||
if ino == 0 && runtime.GOOS != "linux" && runtime.GOOS != "wasip1" { // File absent in directory.
|
||||
continue
|
||||
}
|
||||
const namoff = uint64(unsafe.Offsetof(Dirent{}.Name))
|
||||
|
||||
Reference in New Issue
Block a user