sysfs: return st instead of accepting it (#1261)

This returns stat as a value instead of a pointer param. This is both
more efficient and faster. It is also more efficient than returning a
pointer to a stat.

Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
Crypt Keeper
2023-03-21 10:57:19 +08:00
committed by GitHub
parent 57c887113e
commit c46a6eb4ae
24 changed files with 333 additions and 308 deletions

View File

@@ -134,11 +134,11 @@ func (s *jsfsStat) invoke(ctx context.Context, mod api.Module, args ...interface
func syscallStat(mod api.Module, path string) (*jsSt, error) {
fsc := mod.(*wasm.CallContext).Sys.FS()
var stat platform.Stat_t
if err := fsc.RootFS().Stat(path, &stat); err != nil {
if st, err := fsc.RootFS().Stat(path); err != nil {
return nil, err
} else {
return newJsSt(st), nil
}
return newJsSt(&stat), nil
}
// jsfsLstat implements jsFn for syscall.Lstat
@@ -161,11 +161,11 @@ func (l *jsfsLstat) invoke(ctx context.Context, mod api.Module, args ...interfac
func syscallLstat(mod api.Module, path string) (*jsSt, error) {
fsc := mod.(*wasm.CallContext).Sys.FS()
var stat platform.Stat_t
if err := fsc.RootFS().Lstat(path, &stat); err != nil {
if st, err := fsc.RootFS().Lstat(path); err != nil {
return nil, err
} else {
return newJsSt(st), nil
}
return newJsSt(&stat), nil
}
// jsfsFstat implements jsFn for syscall.Open
@@ -190,14 +190,14 @@ func syscallFstat(fsc *internalsys.FSContext, fd uint32) (*jsSt, error) {
return nil, syscall.EBADF
}
var st platform.Stat_t
if err := f.Stat(&st); err != nil {
if st, err := f.Stat(); err != nil {
return nil, err
} else {
return newJsSt(st), nil
}
return newJsSt(&st), nil
}
func newJsSt(st *platform.Stat_t) *jsSt {
func newJsSt(st platform.Stat_t) *jsSt {
ret := &jsSt{}
ret.isDir = st.Mode.IsDir()
ret.dev = st.Dev