mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
os: do not skip directory entries with zero inodes on wasip1
When building programs to GOOS=wasip1, the program does not have the guarantees that the underlying directories will come from a file system where a zero inode value indicates that the entry was deleted but not yet removed from the directory. The host runtime may be running on windows or may be exposing virtual user-space file systems that do not have the concept of inodes. In those setup, we assume that the host runtime is in charge of dealing with edge cases such as skipping directory entries with zero inodes when needed, and the guest application should trust the list of entries that it sees; therefore, we disable skipping over zero inodes on wasip1. Change-Id: I99aa562441cdb4182965f270af054cf3cf7f8f20 Reviewed-on: https://go-review.googlesource.com/c/go/+/507915 Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
This commit is contained in:
parent
e6ec2a34dc
commit
39c5070712
3 changed files with 21 additions and 3 deletions
|
|
@ -89,7 +89,11 @@ func (f *File) readdir(n int, mode readdirMode) (names []string, dirents []DirEn
|
|||
if !ok {
|
||||
break
|
||||
}
|
||||
if ino == 0 {
|
||||
// When building to wasip1, the host runtime might be running on Windows
|
||||
// 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" {
|
||||
continue
|
||||
}
|
||||
const namoff = uint64(unsafe.Offsetof(syscall.Dirent{}.Name))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue