summaryrefslogtreecommitdiff
path: root/vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go
diff options
context:
space:
mode:
authorLibravatar kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>2024-10-06 20:53:03 +0000
committerLibravatar GitHub <noreply@github.com>2024-10-06 20:53:03 +0000
commitbd1866ad8a860e1b6d43c7fc988cf8c346f19f33 (patch)
tree6726f95b30b73baa4e5a7feed5c0b41bf46116db /vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go
parent[chore/themes] Tweak colors on new themes (#3397) (diff)
downloadgotosocial-bd1866ad8a860e1b6d43c7fc988cf8c346f19f33.tar.xz
update go-ffmpreg to v0.3.1 (pulls in latest wazero too) (#3398)
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go')
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go34
1 files changed, 20 insertions, 14 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go b/vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go
index fdbf1fde0..1b6d5f3de 100644
--- a/vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go
+++ b/vendor/github.com/tetratelabs/wazero/internal/sysfs/file.go
@@ -269,7 +269,7 @@ func (f *fsFile) Readdir(n int) (dirents []experimentalsys.Dirent, errno experim
if f.reopenDir { // re-open the directory if needed.
f.reopenDir = false
- if errno = adjustReaddirErr(f, f.closed, f.reopen()); errno != 0 {
+ if errno = adjustReaddirErr(f, f.closed, f.rewindDir()); errno != 0 {
return
}
}
@@ -418,19 +418,25 @@ func seek(s io.Seeker, offset int64, whence int) (int64, experimentalsys.Errno)
return newOffset, experimentalsys.UnwrapOSError(err)
}
-// reopenFile allows re-opening a file for reasons such as applying flags or
-// directory iteration.
-type reopenFile func() experimentalsys.Errno
-
-// compile-time check to ensure fsFile.reopen implements reopenFile.
-var _ reopenFile = (*fsFile)(nil).reopen
-
-// reopen implements the same method as documented on reopenFile.
-func (f *fsFile) reopen() experimentalsys.Errno {
- _ = f.close()
- var err error
- f.file, err = f.fs.Open(f.name)
- return experimentalsys.UnwrapOSError(err)
+func (f *fsFile) rewindDir() experimentalsys.Errno {
+ // Reopen the directory to rewind it.
+ file, err := f.fs.Open(f.name)
+ if err != nil {
+ return experimentalsys.UnwrapOSError(err)
+ }
+ fi, err := file.Stat()
+ if err != nil {
+ return experimentalsys.UnwrapOSError(err)
+ }
+ // Can't check if it's still the same file,
+ // but is it still a directory, at least?
+ if !fi.IsDir() {
+ return experimentalsys.ENOTDIR
+ }
+ // Only update f on success.
+ _ = f.file.Close()
+ f.file = file
+ return 0
}
// readdirFile allows masking the `Readdir` function on os.File.