mirror of
https://github.com/golang/go
synced 2024-11-26 03:07:57 -07:00
syscall, internal/syscall/unix: add Openat support for wasip1
The syscall package is mostly frozen, but wasip1 file syscall support was added to syscall and the Open and Openat implementations overlap. Implement Openat in syscall for overall simplicity. We already have syscall.Openat for some platforms, so this doesn't add any new functions to syscall. For #67002 Change-Id: Ia34b12ef11fc7a3b7832e07b3546a760c23efe5b Reviewed-on: https://go-review.googlesource.com/c/go/+/617378 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
parent
96db8cc49e
commit
df97215a34
@ -19,6 +19,10 @@ const (
|
|||||||
UTIME_OMIT = -0x2
|
UTIME_OMIT = -0x2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func Openat(dirfd int, path string, flags int, perm uint32) (int, error) {
|
||||||
|
return syscall.Openat(dirfd, path, flags, perm)
|
||||||
|
}
|
||||||
|
|
||||||
func Readlinkat(dirfd int, path string, buf []byte) (int, error) {
|
func Readlinkat(dirfd int, path string, buf []byte) (int, error) {
|
||||||
var nwritten size
|
var nwritten size
|
||||||
errno := path_readlink(
|
errno := path_readlink(
|
||||||
|
@ -520,7 +520,14 @@ func Open(path string, openmode int, perm uint32) (int, error) {
|
|||||||
return -1, EINVAL
|
return -1, EINVAL
|
||||||
}
|
}
|
||||||
dirFd, pathPtr, pathLen := preparePath(path)
|
dirFd, pathPtr, pathLen := preparePath(path)
|
||||||
|
return openat(dirFd, pathPtr, pathLen, openmode, perm)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Openat(dirFd int, path string, openmode int, perm uint32) (int, error) {
|
||||||
|
return openat(int32(dirFd), stringPointer(path), size(len(path)), openmode, perm)
|
||||||
|
}
|
||||||
|
|
||||||
|
func openat(dirFd int32, pathPtr unsafe.Pointer, pathLen size, openmode int, perm uint32) (int, error) {
|
||||||
var oflags oflags
|
var oflags oflags
|
||||||
if (openmode & O_CREATE) != 0 {
|
if (openmode & O_CREATE) != 0 {
|
||||||
oflags |= OFLAG_CREATE
|
oflags |= OFLAG_CREATE
|
||||||
@ -558,10 +565,15 @@ func Open(path string, openmode int, perm uint32) (int, error) {
|
|||||||
fdflags |= FDFLAG_SYNC
|
fdflags |= FDFLAG_SYNC
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var lflags lookupflags
|
||||||
|
if openmode&O_NOFOLLOW == 0 {
|
||||||
|
lflags = LOOKUP_SYMLINK_FOLLOW
|
||||||
|
}
|
||||||
|
|
||||||
var fd int32
|
var fd int32
|
||||||
errno := path_open(
|
errno := path_open(
|
||||||
dirFd,
|
dirFd,
|
||||||
LOOKUP_SYMLINK_FOLLOW,
|
lflags,
|
||||||
pathPtr,
|
pathPtr,
|
||||||
pathLen,
|
pathLen,
|
||||||
oflags,
|
oflags,
|
||||||
|
@ -223,6 +223,7 @@ const (
|
|||||||
O_EXCL = 0200
|
O_EXCL = 0200
|
||||||
O_SYNC = 010000
|
O_SYNC = 010000
|
||||||
O_DIRECTORY = 020000
|
O_DIRECTORY = 020000
|
||||||
|
O_NOFOLLOW = 0400
|
||||||
|
|
||||||
O_CLOEXEC = 0
|
O_CLOEXEC = 0
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user