mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-02 15:17:31 -04:00
x/sys/unix: add support for O_TMPFILE in Linux
Since Linux 3.11, O_TMPFILE flag can be used in open syscall to create an unnamed file in a directory. The file occupies space in the filesystem, and can be given a name using linkat syscall. If the file is closed without being given a name, its contents are deleted. See the manpage open(2) in Linux for details. Exports O_TMPFILE for Linux in 386 and amd64 (other architectures already had it). Exports Linkat syscall and AT_SYMLINK_FOLLOW (used for giving a name to the file) for all Linux in all architectures. Fixes golang/go#7830. Change-Id: Ib82e44f405b227e227b9cbf317c2657b32e046f5 Reviewed-on: https://go-review.googlesource.com/21003 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
committed by
Brad Fitzpatrick
parent
9d4e42a206
commit
23999e87b4
@@ -36,10 +36,10 @@ func Creat(path string, mode uint32) (fd int, err error) {
|
|||||||
return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
|
return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
//sys linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error)
|
||||||
|
|
||||||
func Link(oldpath string, newpath string) (err error) {
|
func Link(oldpath string, newpath string) (err error) {
|
||||||
return linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)
|
return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Mkdir(path string, mode uint32) (err error) {
|
func Mkdir(path string, mode uint32) (err error) {
|
||||||
|
|||||||
@@ -400,6 +400,7 @@ type EpollEvent C.struct_my_epoll_event
|
|||||||
const (
|
const (
|
||||||
AT_FDCWD = C.AT_FDCWD
|
AT_FDCWD = C.AT_FDCWD
|
||||||
AT_REMOVEDIR = C.AT_REMOVEDIR
|
AT_REMOVEDIR = C.AT_REMOVEDIR
|
||||||
|
AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW
|
||||||
AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
|
AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -826,6 +826,7 @@ const (
|
|||||||
O_RDWR = 0x2
|
O_RDWR = 0x2
|
||||||
O_RSYNC = 0x101000
|
O_RSYNC = 0x101000
|
||||||
O_SYNC = 0x101000
|
O_SYNC = 0x101000
|
||||||
|
O_TMPFILE = 0x410000
|
||||||
O_TRUNC = 0x200
|
O_TRUNC = 0x200
|
||||||
O_WRONLY = 0x1
|
O_WRONLY = 0x1
|
||||||
PACKET_ADD_MEMBERSHIP = 0x1
|
PACKET_ADD_MEMBERSHIP = 0x1
|
||||||
|
|||||||
@@ -826,6 +826,7 @@ const (
|
|||||||
O_RDWR = 0x2
|
O_RDWR = 0x2
|
||||||
O_RSYNC = 0x101000
|
O_RSYNC = 0x101000
|
||||||
O_SYNC = 0x101000
|
O_SYNC = 0x101000
|
||||||
|
O_TMPFILE = 0x410000
|
||||||
O_TRUNC = 0x200
|
O_TRUNC = 0x200
|
||||||
O_WRONLY = 0x1
|
O_WRONLY = 0x1
|
||||||
PACKET_ADD_MEMBERSHIP = 0x1
|
PACKET_ADD_MEMBERSHIP = 0x1
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ var _ syscall.Errno
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// 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) {
|
func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) {
|
||||||
var _p0 *byte
|
var _p0 *byte
|
||||||
_p0, err = BytePtrFromString(oldpath)
|
_p0, err = BytePtrFromString(oldpath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -574,8 +574,9 @@ type EpollEvent struct {
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
type Termios struct {
|
type Termios struct {
|
||||||
|
|||||||
@@ -592,8 +592,9 @@ type EpollEvent struct {
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
type Termios struct {
|
type Termios struct {
|
||||||
|
|||||||
@@ -563,8 +563,9 @@ type EpollEvent struct {
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
type Termios struct {
|
type Termios struct {
|
||||||
|
|||||||
@@ -580,6 +580,7 @@ type EpollEvent struct {
|
|||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -585,6 +585,7 @@ type EpollEvent struct {
|
|||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -585,6 +585,7 @@ type EpollEvent struct {
|
|||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -590,6 +590,7 @@ type EpollEvent struct {
|
|||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -590,6 +590,7 @@ type EpollEvent struct {
|
|||||||
const (
|
const (
|
||||||
AT_FDCWD = -0x64
|
AT_FDCWD = -0x64
|
||||||
AT_REMOVEDIR = 0x200
|
AT_REMOVEDIR = 0x200
|
||||||
|
AT_SYMLINK_FOLLOW = 0x400
|
||||||
AT_SYMLINK_NOFOLLOW = 0x100
|
AT_SYMLINK_NOFOLLOW = 0x100
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user