]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: check Fchmodat flags parameter on Linux
authorTobias Klauser <tklauser@distanz.ch>
Wed, 13 Jun 2018 13:54:42 +0000 (15:54 +0200)
committerTobias Klauser <tobias.klauser@gmail.com>
Wed, 13 Jun 2018 20:32:08 +0000 (20:32 +0000)
As mentioned in #25845, port CL 46474 from golang.org/x/sys/unix to the
syscall package.

Currently Linux' fchmodat(2) syscall implementation doesn't support the
flags parameter (though it might in future versions [1]). Fchmodat in
the syscall package takes the parameter and (wrongly) passes it on to the
syscall which will ignore it.

According to the POSIX.1-2008 manual page [2], AT_SYMLINK_NOFOLLOW is
the only valid value for the flags parameter and EOPNOTSUPP should be
returned in case changing the mode of a symbolic link is not supported
by the underlying system. EINVAL should be returned for any other value
of the flags parameter.

  [1] https://patchwork.kernel.org/patch/9596301/
  [2] http://pubs.opengroup.org/onlinepubs/9699919799/functions/chmod.html

Updates #20130
Updates #25845

Change-Id: I1021dd0e6a4f4cb3557cb1c1b34dd618c378cda6
Reviewed-on: https://go-review.googlesource.com/118658
Reviewed-by: Ian Lance Taylor <iant@golang.org>
13 files changed:
src/syscall/syscall_linux.go
src/syscall/syscall_linux_test.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_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_s390x.go

index 58216f195786c8c2d11cef659ae7844a621eb5e2..8d0532e216cfea0664f78b619bf54f4458a7b554 100644 (file)
@@ -35,6 +35,20 @@ func Creat(path string, mode uint32) (fd int, err error) {
        return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
 }
 
+//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. Mimick 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
+       }
+       return fchmodat(dirfd, path, mode)
+}
+
 //sys  linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
 
 func Link(oldpath string, newpath string) (err error) {
@@ -830,7 +844,6 @@ func Mount(source string, target string, fstype string, flags uintptr, data stri
 //sys  Fallocate(fd int, mode uint32, off int64, len int64) (err error)
 //sys  Fchdir(fd int) (err error)
 //sys  Fchmod(fd int, mode uint32) (err error)
-//sys  Fchmodat(dirfd int, path string, mode uint32, flags int) (err error)
 //sys  Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error)
 //sys  fcntl(fd int, cmd int, arg int) (val int, err error)
 //sys  Fdatasync(fd int) (err error)
index 932ccee491b4bb656c3239046763a62b4c4f7003..4490fc24cae4b4917ce0c43cbc869ff767180429 100644 (file)
@@ -21,6 +21,69 @@ import (
        "time"
 )
 
+// chtmpdir changes the working directory to a new temporary directory and
+// provides a cleanup function. Used when PWD is read-only.
+func chtmpdir(t *testing.T) func() {
+       oldwd, err := os.Getwd()
+       if err != nil {
+               t.Fatalf("chtmpdir: %v", err)
+       }
+       d, err := ioutil.TempDir("", "test")
+       if err != nil {
+               t.Fatalf("chtmpdir: %v", err)
+       }
+       if err := os.Chdir(d); err != nil {
+               t.Fatalf("chtmpdir: %v", err)
+       }
+       return func() {
+               if err := os.Chdir(oldwd); err != nil {
+                       t.Fatalf("chtmpdir: %v", err)
+               }
+               os.RemoveAll(d)
+       }
+}
+
+func touch(t *testing.T, name string) {
+       f, err := os.Create(name)
+       if err != nil {
+               t.Fatal(err)
+       }
+       if err := f.Close(); err != nil {
+               t.Fatal(err)
+       }
+}
+
+const (
+       _AT_SYMLINK_NOFOLLOW = 0x100
+       _AT_FDCWD            = -0x64
+)
+
+func TestFchmodat(t *testing.T) {
+       defer chtmpdir(t)()
+
+       touch(t, "file1")
+       os.Symlink("file1", "symlink1")
+
+       err := syscall.Fchmodat(_AT_FDCWD, "symlink1", 0444, 0)
+       if err != nil {
+               t.Fatalf("Fchmodat: unexpected error: %v", err)
+       }
+
+       fi, err := os.Stat("file1")
+       if err != nil {
+               t.Fatal(err)
+       }
+
+       if fi.Mode() != 0444 {
+               t.Errorf("Fchmodat: failed to change mode: expected %v, got %v", 0444, fi.Mode())
+       }
+
+       err = syscall.Fchmodat(_AT_FDCWD, "symlink1", 0444, _AT_SYMLINK_NOFOLLOW)
+       if err != syscall.EOPNOTSUPP {
+               t.Fatalf("Fchmodat: unexpected error: %v, expected EOPNOTSUPP", err)
+       }
+}
+
 func TestMain(m *testing.M) {
        if os.Getenv("GO_DEATHSIG_PARENT") == "1" {
                deathSignalParent()
index 951bf9ad485b28a1f42d26cf7f5453148c27eeea..346c3cdbcfad31129b90e41afcb34f7950abba85 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 55e7edd9e8cb3ca5e26231863bf93e752934daca..606c9e8cb0f2e17d416031f1cd3a3628d25a6f69 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 40ee2888272b0f43444d00266f941c3854526b16..ccddfae9f63804daf35dcb9e3239c4c4495de5be 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 59d445cc1ca06590b5565e84e355e46b6f9879e8..3ad94d0e7fc45f5cb91cd155821b4c9bac41273e 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index df65776170bfd2e2d4d2a7c6805a8e5e46803018..50bc319f275831f8c6fb425eaf38dca7f710a0b8 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 701f39a2525852862ac168a8d3973d5089fbf520..26b22169e4d91feee9d9a0011e5775a98b456f7a 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index c7976c9207a7c0877a04f63325708cf6363df8fb..18d0298ced66a042f2a19568df00cff118814964 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index c3e8d92035c11f5f412fdce4e71e3168c80a1b8c..0b2862d1cb72d8c6ad40cc12ceef78c85a9a33e8 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 6f0e09e63a9eedadf4ed3d860cafa461b779a6cd..071ef7e461b32ec725d9697f7257bea15a0fc06d 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 6202e79b36c1f981f8929dba721a50ba2099dbe7..e1267ecd877f2a13b247ce34336cfdfa635e34cc 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)
index 1020c8ee6032e2eec2ac5fbb2831021d42e229de..07962f6188446314af2717ac5459420b865e5abc 100644 (file)
@@ -9,6 +9,21 @@ import "unsafe"
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
+func fchmodat(dirfd int, path string, mode uint32) (err error) {
+       var _p0 *byte
+       _p0, err = BytePtrFromString(path)
+       if err != nil {
+               return
+       }
+       _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode))
+       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)
@@ -384,21 +399,6 @@ func Fchmod(fd int, mode uint32) (err error) {
 
 // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
 
-func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) {
-       var _p0 *byte
-       _p0, err = BytePtrFromString(path)
-       if err != nil {
-               return
-       }
-       _, _, e1 := Syscall6(SYS_FCHMODAT, 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 Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) {
        var _p0 *byte
        _p0, err = BytePtrFromString(path)