43 lines
1.4 KiB
Go
43 lines
1.4 KiB
Go
//go:build !tinygo
|
|
|
|
package sysfs
|
|
|
|
import (
|
|
"io/fs"
|
|
"os"
|
|
|
|
experimentalsys "github.com/tetratelabs/wazero/experimental/sys"
|
|
)
|
|
|
|
// Link implements the same method as documented on sys.FS
|
|
func (d *dirFS) Link(oldName, newName string) experimentalsys.Errno {
|
|
err := os.Link(d.join(oldName), d.join(newName))
|
|
return experimentalsys.UnwrapOSError(err)
|
|
}
|
|
|
|
// Unlink implements the same method as documented on sys.FS
|
|
func (d *dirFS) Unlink(path string) (err experimentalsys.Errno) {
|
|
return unlink(d.join(path))
|
|
}
|
|
|
|
// Rename implements the same method as documented on sys.FS
|
|
func (d *dirFS) Rename(from, to string) experimentalsys.Errno {
|
|
from, to = d.join(from), d.join(to)
|
|
return rename(from, to)
|
|
}
|
|
|
|
// Chmod implements the same method as documented on sys.FS
|
|
func (d *dirFS) Chmod(path string, perm fs.FileMode) experimentalsys.Errno {
|
|
err := os.Chmod(d.join(path), perm)
|
|
return experimentalsys.UnwrapOSError(err)
|
|
}
|
|
|
|
// Symlink implements the same method as documented on sys.FS
|
|
func (d *dirFS) Symlink(oldName, link string) experimentalsys.Errno {
|
|
// Note: do not resolve `oldName` relative to this dirFS. The link result is always resolved
|
|
// when dereference the `link` on its usage (e.g. readlink, read, etc).
|
|
// https://github.com/bytecodealliance/cap-std/blob/v1.0.4/cap-std/src/fs/dir.rs#L404-L409
|
|
err := os.Symlink(oldName, d.join(link))
|
|
return experimentalsys.UnwrapOSError(err)
|
|
}
|