110 lines
2.6 KiB
Go
110 lines
2.6 KiB
Go
//go:build !wasm
|
|
|
|
package os
|
|
|
|
import (
|
|
c "github.com/goplus/llgo/runtime/internal/clite"
|
|
"github.com/goplus/llgo/runtime/internal/clite/os"
|
|
)
|
|
|
|
// setStickyBit adds ModeSticky to the permission bits of path, non atomic.
|
|
func setStickyBit(name string) error {
|
|
fi, err := Stat(name)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return Chmod(name, fi.Mode()|ModeSticky)
|
|
}
|
|
|
|
func Chmod(name string, mode FileMode) error {
|
|
ret := os.Chmod(c.AllocaCStr(name), os.ModeT(syscallMode(mode)))
|
|
if ret == 0 {
|
|
return nil
|
|
}
|
|
return toPathErr("chmod", name, ret)
|
|
}
|
|
|
|
/* TODO(xsw):
|
|
// Chmod changes the mode of the named file to mode.
|
|
// If the file is a symbolic link, it changes the mode of the link's target.
|
|
// If there is an error, it will be of type *PathError.
|
|
//
|
|
// A different subset of the mode bits are used, depending on the
|
|
// operating system.
|
|
//
|
|
// On Unix, the mode's permission bits, ModeSetuid, ModeSetgid, and
|
|
// ModeSticky are used.
|
|
//
|
|
// On Windows, only the 0200 bit (owner writable) of mode is used; it
|
|
// controls whether the file's read-only attribute is set or cleared.
|
|
// The other bits are currently unused. For compatibility with Go 1.12
|
|
// and earlier, use a non-zero mode. Use mode 0400 for a read-only
|
|
// file and 0600 for a readable+writable file.
|
|
//
|
|
// On Plan 9, the mode's permission bits, ModeAppend, ModeExclusive,
|
|
// and ModeTemporary are used.
|
|
func Chmod(name string, mode FileMode) error { return chmod(name, mode) }
|
|
*/
|
|
|
|
func Chown(name string, uid, gid int) error {
|
|
ret := os.Chown(c.AllocaCStr(name), os.UidT(uid), os.GidT(gid))
|
|
if ret == 0 {
|
|
return nil
|
|
}
|
|
return toPathErr("chown", name, ret)
|
|
}
|
|
|
|
func Getegid() int {
|
|
return int(os.Getegid())
|
|
}
|
|
|
|
func Geteuid() int {
|
|
return int(os.Geteuid())
|
|
}
|
|
|
|
func Getgid() int {
|
|
return int(os.Getgid())
|
|
}
|
|
|
|
// TODO(xsw):
|
|
// func Getgroups() ([]int, error)
|
|
// func Getpagesize() int
|
|
|
|
func Getpid() int {
|
|
return int(os.Getpid())
|
|
}
|
|
|
|
func Getppid() int {
|
|
return int(os.Getppid())
|
|
}
|
|
|
|
func Getuid() int {
|
|
return int(os.Getuid())
|
|
}
|
|
|
|
func Lchown(name string, uid, gid int) error {
|
|
ret := os.Lchown(c.AllocaCStr(name), os.UidT(uid), os.GidT(gid))
|
|
if ret == 0 {
|
|
return nil
|
|
}
|
|
return toPathErr("lchown", name, ret)
|
|
}
|
|
|
|
/* TODO(xsw):
|
|
// Lchown changes the numeric uid and gid of the named file.
|
|
// If the file is a symbolic link, it changes the uid and gid of the link itself.
|
|
// If there is an error, it will be of type *PathError.
|
|
//
|
|
// On Windows, it always returns the syscall.EWINDOWS error, wrapped
|
|
// in *PathError.
|
|
func Lchown(name string, uid, gid int) error {
|
|
e := ignoringEINTR(func() error {
|
|
return syscall.Lchown(name, uid, gid)
|
|
})
|
|
if e != nil {
|
|
return &PathError{Op: "lchown", Path: name, Err: e}
|
|
}
|
|
return nil
|
|
}
|
|
*/
|