]> Cypherpunks.ru repositories - gostls13.git/commitdiff
syscall: use fchmodat2 in Fchmodat
authorTobias Klauser <tklauser@distanz.ch>
Tue, 7 Nov 2023 12:10:48 +0000 (13:10 +0100)
committerGopher Robot <gobot@golang.org>
Wed, 8 Nov 2023 17:55:49 +0000 (17:55 +0000)
The fchmodat2 syscall was added in Linux kernel 6.6.  Mirror the
implementation in golang.org/x/sys/unix.Fchmodat (CL 539635) and use
fchmodat2 in Fchmodat if flags are given. It will return ENOSYS on older
kernels (or EINVAL or any other bogus error in some container
implementations).

Also update ztypes_linux_$GOARCH.go for all linux platforms to add
_AT_EMPTY_PATH. It was added to linux/types in CL 407694 but was only
updated for linux/loong64 at that time.

Updates #61636

Change-Id: I863d06e35cd366f1cf99052e9f77c22ab8168b3f
Reviewed-on: https://go-review.googlesource.com/c/go/+/540435
Reviewed-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Heschi Kreinick <heschi@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com>

36 files changed:
src/syscall/syscall_linux.go
src/syscall/syscall_linux_386.go
src/syscall/syscall_linux_amd64.go
src/syscall/syscall_linux_arm.go
src/syscall/syscall_linux_arm64.go
src/syscall/syscall_linux_loong64.go
src/syscall/syscall_linux_mips64x.go
src/syscall/syscall_linux_mipsx.go
src/syscall/syscall_linux_ppc64x.go
src/syscall/syscall_linux_riscv64.go
src/syscall/syscall_linux_s390x.go
src/syscall/zsyscall_linux_386.go
src/syscall/zsyscall_linux_amd64.go
src/syscall/zsyscall_linux_arm.go
src/syscall/zsyscall_linux_arm64.go
src/syscall/zsyscall_linux_loong64.go
src/syscall/zsyscall_linux_mips.go
src/syscall/zsyscall_linux_mips64.go
src/syscall/zsyscall_linux_mips64le.go
src/syscall/zsyscall_linux_mipsle.go
src/syscall/zsyscall_linux_ppc64.go
src/syscall/zsyscall_linux_ppc64le.go
src/syscall/zsyscall_linux_riscv64.go
src/syscall/zsyscall_linux_s390x.go
src/syscall/ztypes_linux_386.go
src/syscall/ztypes_linux_amd64.go
src/syscall/ztypes_linux_arm.go
src/syscall/ztypes_linux_arm64.go
src/syscall/ztypes_linux_mips.go
src/syscall/ztypes_linux_mips64.go
src/syscall/ztypes_linux_mips64le.go
src/syscall/ztypes_linux_mipsle.go
src/syscall/ztypes_linux_ppc64.go
src/syscall/ztypes_linux_ppc64le.go
src/syscall/ztypes_linux_riscv64.go
src/syscall/ztypes_linux_s390x.go

index 96ad4fbe3f4208513b12e595bdbdbb4e77e5f666..b6e84203e8dfa0ae03afea5eb93eaab983842a55 100644 (file)
@@ -241,15 +241,23 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
 }
 
 //sys  fchmodat(dirfd int, path string, mode uint32) (err error)
-
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       // Linux fchmodat doesn't support the flags parameter. Mimic glibc's behavior
-       // and check the flags. Otherwise the mode would be applied to the symlink
-       // destination which is not what the user expects.
-       if flags&^_AT_SYMLINK_NOFOLLOW != 0 {
-               return EINVAL
-       } else if flags&_AT_SYMLINK_NOFOLLOW != 0 {
-               return EOPNOTSUPP
+//sys  fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) = _SYS_fchmodat2
+
+func Fchmodat(dirfd int, path string, mode uint32, flags int) error {
+       // Linux fchmodat doesn't support the flags parameter, but fchmodat2 does.
+       // Try fchmodat2 if flags are specified.
+       if flags != 0 {
+               err := fchmodat2(dirfd, path, mode, flags)
+               if err == ENOSYS {
+                       // fchmodat2 isn't available. If the flags are known to be valid,
+                       // return EOPNOTSUPP to indicate that fchmodat doesn't support them.
+                       if flags&^(_AT_SYMLINK_NOFOLLOW|_AT_EMPTY_PATH) != 0 {
+                               return EINVAL
+                       } else if flags&(_AT_SYMLINK_NOFOLLOW|_AT_EMPTY_PATH) != 0 {
+                               return EOPNOTSUPP
+                       }
+               }
+               return err
        }
        return fchmodat(dirfd, path, mode)
 }
index f9d47236e57fdd349d66b016a100bb96dc55c6a1..1ab6c5e14853a913cb8ff1288e9f218b79168bb6 100644 (file)
@@ -11,6 +11,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 func setTimespec(sec, nsec int64) Timespec {
index 0652590cfe5a635f8e7485cfb57b42c0139e7361..1083a507c705d12105d5eddc2d186f575a585503 100644 (file)
@@ -13,6 +13,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)
index 15c53d64b6df837be3ec833cf755eda13f17f210..2641cd286869971f8c72880d74d7a81e6ebb33bb 100644 (file)
@@ -11,6 +11,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 func setTimespec(sec, nsec int64) Timespec {
index 48067e22ddcb9104da5a5bc4d53574ded6881c0e..74d6e3a95865624227ceced74c9af1ed29f506aa 100644 (file)
@@ -11,6 +11,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
index 62533e80116479c9ef2155a97fad00591fdc89cf..eb275bc71734296d281b6d1e588c539a3e3d77dd 100644 (file)
@@ -11,6 +11,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
index 061585a1bfaed998e5bc0e13e7d676ee14e2285b..3bdee928ed6c7ec9c5d8062fa3dcdb7a9e3f86a5 100644 (file)
@@ -15,6 +15,7 @@ const (
        _SYS_clone3            = 5435
        _SYS_faccessat2        = 5439
        _SYS_pidfd_send_signal = 5424
+       _SYS_fchmodat2         = 5452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)
index 168148ab244c8d3f19f26e41f1d5e05faa3eb615..7253c648e715d66e7f49dfdd69bfc3f16ec393f5 100644 (file)
@@ -13,6 +13,7 @@ const (
        _SYS_clone3            = 4435
        _SYS_faccessat2        = 4439
        _SYS_pidfd_send_signal = 4424
+       _SYS_fchmodat2         = 4452
 )
 
 func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
index 91cd9838c39d71bc27ca307cad6f90703701655d..9cfe2dc6959d9be3a7d942c1b76f0eacd8cceeda 100644 (file)
@@ -15,6 +15,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)
index 50c3988e82f5721250ce885e5893eb283c13d5e5..61fb4c166859ed032048b1e3c64a582f86eac755 100644 (file)
@@ -11,6 +11,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 //sys  EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT
index ecdabbf98f80cecfb523f885c9417233d10e6409..3a0afc404a096c9b6dd83524ec048e6105a0c2e9 100644 (file)
@@ -11,6 +11,7 @@ const (
        _SYS_clone3            = 435
        _SYS_faccessat2        = 439
        _SYS_pidfd_send_signal = 424
+       _SYS_fchmodat2         = 452
 )
 
 //sys  Dup2(oldfd int, newfd int) (err error)
index 51f206655891abd1c13ba17bea81ea5578c1cebe..661cfe7bed6f8d9ea525f1d56d9c8126d56b2e5d 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index be00d5857a72a8c8dfd70f172edec2e27b6e0f33..9d05781893c2552ba61f49b3fe67681b6a6ba6cc 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index 245a44a4d8c87d6a2ea26c7031ce166023c6e843..a386120f7833e75a2b54268efda09653e697a99f 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index fa0d8fd1103ed3400d6219b4bedfde5230918818..a1c91071f1253d68c046f62d8b1b4fb0dd42da49 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index 74ec8f50c59f9922cefdc7cd5f5c2139e7263ab6..e32c87d9b81ed5233a475ead6ded1bc5fde4ec95 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index 2f4ecb3dac37eacac4af87d25a7ddf1b81263053..7e216b04ea6f1e8747d65cdc2e4a071a80b3e92e 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index e99d85aab2c946049c832202ddbae311ee381df8..8c894b1088cb481a35f3f6d25a93acde5dfe1505 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index a856ee370bb2dc92d94cc298739248477249f907..812a6ba8e69af19e01fc4304ded88c32e6dc1c84 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index ab9b1c86ff1023e14cd60091b5672adad9513d80..d32a8afa4f6a331c7af3493d99f5c6b408896d07 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index c22a14f9391f03f3c8300f5618f29c7b657be8ca..c321267b9ba431279926c75634be36167a14133b 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index 381b2a5501aa10594ee632f16eee88510da2a022..40475d76bfe85b7ab89bd8a9aac50cc386eca4f4 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index b3254c821746d5ebb7bf8addad08eb9b3b3cc061..dc74acfc880d43d057a5e1827d046d3895b6bda2 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index 2223808cbd89c79be3ed9b37103ad201638f221c..cc189d9ea7748e8556f64fa9c270d6d2cbb6fb3e 100644 (file)
@@ -54,6 +54,21 @@ func fchmodat(dirfd int, path string, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat2(dirfd int, path string, mode uint32, flags int) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall6(_SYS_fchmodat2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0)
+       if e1 != 0 {
+               err = errnoErr(e1)
+       }
+       return
+}
+
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
+
 func linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(oldpath)
index a45511e84760855810ed4f7ddc4d987f1bf31e36..79a46a4aba5b9d06cbad575db0d80916be5a69c9 100644 (file)
@@ -577,6 +577,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index 1bab13bf431ece2f79c01710b5d3206b41daa361..3d223fe2565128a0681016d95db1883932009927 100644 (file)
@@ -595,6 +595,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index a4d61bd19bbe88000d55cdcfe605498cb828980a..9db1142c22c7ebed224a1c1424f832c01eca8870 100644 (file)
@@ -566,6 +566,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index 1e469c36d2eddb6b19992e6edbd1ee8f437b1316..996950f4b05d0a4cbbfea06191285b606af10889 100644 (file)
@@ -574,6 +574,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index 621ef2d5a85d5236d8a3dde2c367ab186069dc36..4ce84978b1ad6d7d2b2d7c49753c91b2de6d5180 100644 (file)
@@ -572,6 +572,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index 75a5bc4589b2128ae0b8b8420a897c191b77f3d8..de39e732c87f176769e25cdb24caf97dbe0cc588 100644 (file)
@@ -579,6 +579,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index 75a5bc4589b2128ae0b8b8420a897c191b77f3d8..de39e732c87f176769e25cdb24caf97dbe0cc588 100644 (file)
@@ -579,6 +579,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index 621ef2d5a85d5236d8a3dde2c367ab186069dc36..4ce84978b1ad6d7d2b2d7c49753c91b2de6d5180 100644 (file)
@@ -572,6 +572,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index c830cee966bf86d9e14a126da6c85709b8d5a100..717e273425bc45bf8e416b9c4357265fc84e77af 100644 (file)
@@ -584,6 +584,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index 770ddc9fe9a23bdfb0fadfa0cabbd60a9dd21084..177c1f1e37fd8564f4c4e7cc3a96d9a8316f28df 100644 (file)
@@ -584,6 +584,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index f6b9cede0e5ce6cd8dc49d06d6bf84d0ce62731a..a6c4d7884ab8a9e3596bb647e3130fe4fbf29156 100644 (file)
@@ -599,6 +599,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {
index b67877f065c82ba87d04260935309945aa95cc18..5c5a71461e3efd5838ed2b1f9c8e6e54f59b51c4 100644 (file)
@@ -598,6 +598,7 @@ const (
        _AT_REMOVEDIR        = 0x200
        _AT_SYMLINK_NOFOLLOW = 0x100
        _AT_EACCESS          = 0x200
+       _AT_EMPTY_PATH       = 0x1000
 )
 
 type pollFd struct {