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) {
var nwritten size
errno := path_readlink(
return -1, EINVAL
}
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
if (openmode & O_CREATE) != 0 {
oflags |= OFLAG_CREATE
fdflags |= FDFLAG_SYNC
}
+ var lflags lookupflags
+ if openmode&O_NOFOLLOW == 0 {
+ lflags = LOOKUP_SYMLINK_FOLLOW
+ }
+
var fd int32
errno := path_open(
dirFd,
- LOOKUP_SYMLINK_FOLLOW,
+ lflags,
pathPtr,
pathLen,
oflags,