Initial commit
Proof-of-concept implementation. Bugs will occur.
This commit is contained in:
9
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat.go
generated
vendored
Normal file
9
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat.go
generated
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
package renameat
|
||||
|
||||
// Renameat is a wrapper around renameat syscall.
|
||||
// On Linux, it is a wrapper around renameat2(2).
|
||||
// On Darwin, it is a wrapper around renameatx_np(2).
|
||||
// On FreeBSD, it is a wrapper around renameat(2).
|
||||
func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
|
||||
return renameat(olddirfd, oldpath, newdirfd, newpath, flags)
|
||||
}
|
||||
38
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat_darwin.go
generated
vendored
Normal file
38
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat_darwin.go
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
package renameat
|
||||
|
||||
import (
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
const (
|
||||
SYS_RENAMEATX_NP = 488
|
||||
RENAME_SWAP = 0x2
|
||||
RENAME_EXCHANGE = RENAME_SWAP
|
||||
)
|
||||
|
||||
func renameat(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) error {
|
||||
oldpathCString, err := syscall.BytePtrFromString(oldpath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
newpathCString, err := syscall.BytePtrFromString(newpath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, _, errno := syscall.Syscall6(
|
||||
SYS_RENAMEATX_NP,
|
||||
uintptr(olddirfd),
|
||||
uintptr(unsafe.Pointer(oldpathCString)),
|
||||
uintptr(newdirfd),
|
||||
uintptr(unsafe.Pointer(newpathCString)),
|
||||
uintptr(flags),
|
||||
0,
|
||||
)
|
||||
|
||||
if errno != 0 {
|
||||
return errno
|
||||
}
|
||||
return nil
|
||||
}
|
||||
17
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat_freebsd.go
generated
vendored
Normal file
17
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat_freebsd.go
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
package renameat
|
||||
|
||||
import "golang.org/x/sys/unix"
|
||||
|
||||
const (
|
||||
// Since FreeBSD does not currently privode renameat syscall
|
||||
// beyond POSIX standard like Linux and Darwin do, we borrow
|
||||
// the defination from Linux but reject these non-POSIX flags.
|
||||
RENAME_EXCHANGE = (1 << 1)
|
||||
)
|
||||
|
||||
func renameat(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
|
||||
if flags != 0 {
|
||||
return unix.ENOSYS
|
||||
}
|
||||
return unix.Renameat(olddirfd, oldpath, newdirfd, newpath)
|
||||
}
|
||||
11
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat_linux.go
generated
vendored
Normal file
11
vendor/github.com/hanwen/go-fuse/v2/internal/renameat/renameat_linux.go
generated
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
package renameat
|
||||
|
||||
import "golang.org/x/sys/unix"
|
||||
|
||||
const (
|
||||
RENAME_EXCHANGE = unix.RENAME_EXCHANGE
|
||||
)
|
||||
|
||||
func renameat(olddirfd int, oldpath string, newdirfd int, newpath string, flags uint) (err error) {
|
||||
return unix.Renameat2(olddirfd, oldpath, newdirfd, newpath, flags)
|
||||
}
|
||||
Reference in New Issue
Block a user