osutil

package
v0.0.0-...-444551c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 23, 2024 License: Apache-2.0 Imports: 18 Imported by: 782

Documentation

Index

Constants

View Source
const (
	DefaultDirPerm  = 0755
	DefaultFilePerm = 0644
	DefaultExecPerm = 0755
)

Variables

This section is empty.

Functions

func Abs

func Abs(path string) string

func CloseMemMappedFile

func CloseMemMappedFile(f *os.File, mem []byte) error

CloseMemMappedFile destroys memory mapping created by CreateMemMappedFile.

func CloseSharedMemFile

func CloseSharedMemFile(f *os.File) error

func Command

func Command(bin string, args ...string) *exec.Cmd

Command is similar to os/exec.Command, but also sets PDEATHSIG to SIGKILL on linux, i.e. the child will be killed immediately.

func CommandContext

func CommandContext(ctx context.Context, bin string, args ...string) *exec.Cmd

CommandContext is similar to os/exec.CommandContext, but also sets PDEATHSIG to SIGKILL on linux, i.e. the child will be killed immediately.

func CopyDirRecursively

func CopyDirRecursively(srcDir, dstDir string) error

func CopyFile

func CopyFile(oldFile, newFile string) error

CopyFile atomically copies oldFile to newFile preserving permissions and modification time.

func CopyFiles

func CopyFiles(srcDir, dstDir string, files map[string]bool) error

CopyFiles copies files from srcDir to dstDir as atomically as possible. Files are assumed to be relative glob patterns in slash notation in srcDir. All other files in dstDir are removed.

func CreateMemMappedFile

func CreateMemMappedFile(size int) (f *os.File, mem []byte, err error)

CreateMemMappedFile creates a temp file with the requested size and maps it into memory.

func CreateSharedMemFile

func CreateSharedMemFile(size int) (f *os.File, err error)

In the case of Linux, we can just use the memfd_create syscall.

func FilesExist

func FilesExist(dir string, files map[string]bool) bool

FilesExist returns true if all files exist in dir. Files are assumed to be relative names in slash notation.

func GraciousCommand

func GraciousCommand(bin string, args ...string) *exec.Cmd

Command is similar to os/exec.Command, but also sets PDEATHSIG to SIGTERM on linux, i.e. the child has a chance to exit gracefully. This may be important when running e.g. syz-manager. If it is killed immediately, it can leak GCE instances.

func HandleInterrupts

func HandleInterrupts(shutdown chan struct{})

HandleInterrupts closes shutdown chan on first SIGINT (expecting that the program will gracefully shutdown and exit) and terminates the process on third SIGINT.

func IsAccessible

func IsAccessible(name string) error

IsAccessible checks if the file can be opened.

func IsDir

func IsDir(name string) bool

func IsExist

func IsExist(name string) bool

IsExist returns true if the file name exists.

func IsWritable

func IsWritable(name string) error

IsWritable checks if the file can be written.

func LinkFiles

func LinkFiles(srcDir, dstDir string, files map[string]bool) error

LinkFiles creates hard links for files from dstDir to srcDir. Files are assumed to be relative names in slash notation. All other files in dstDir are removed.

func ListDir

func ListDir(dir string) ([]string, error)

Return all files in a directory.

func LongPipe

func LongPipe() (io.ReadCloser, io.WriteCloser, error)

func MkdirAll

func MkdirAll(dir string) error

func MonotonicNano

func MonotonicNano() time.Duration

MonotonicNano returns monotonic time in nanoseconds from some unspecified point in time. Useful mostly to measure time intervals. This function should be used inside of tested VMs b/c time.Now may reject to use monotonic time if the fuzzer messes with system time (sets time past Y2157, see comments in time/time.go). This is a hacky way to use the private runtime function. If this ever breaks, we can either provide specializations for different Go versions using build tags, or fall back to time.Now.

func PrependContext

func PrependContext(ctx string, err error) error

func ProcessExitStatus

func ProcessExitStatus(ps *os.ProcessState) int

ProcessExitStatus returns process exit status. This is here only because of fuchsia that does not implement WaitStatus.

func ProcessTempDir

func ProcessTempDir(where string) (string, error)

ProcessTempDir creates a new temp dir in where and returns its path and an unique index. It also cleans up old, unused temp dirs after dead processes.

func RemoveAll

func RemoveAll(dir string) error

RemoveAll is similar to os.RemoveAll, but can handle more cases.

func Rename

func Rename(oldFile, newFile string) error

Rename is similar to os.Rename but handles cross-device renaming (by copying).

func Run

func Run(timeout time.Duration, cmd *exec.Cmd) ([]byte, error)

Run runs cmd with the specified timeout. Returns combined output. If the command fails, err includes output.

func RunCmd

func RunCmd(timeout time.Duration, dir, bin string, args ...string) ([]byte, error)

RunCmd runs "bin args..." in dir with timeout and returns its output.

func Sandbox

func Sandbox(cmd *exec.Cmd, user, net bool) error

func SandboxChown

func SandboxChown(file string) error

func SystemMemorySize

func SystemMemorySize() uint64

func TempFile

func TempFile(prefix string) (string, error)

TempFile creates a unique temp filename. Note: the file already exists when the function returns.

func WriteExecFile

func WriteExecFile(filename string, data []byte) error

func WriteFile

func WriteFile(filename string, data []byte) error

func WriteGzipStream

func WriteGzipStream(filename string, reader io.Reader) error

func WriteJSON

func WriteJSON[T any](filename string, obj T) error

func WriteTempFile

func WriteTempFile(data []byte) (string, error)

WriteTempFile writes data to a temp file and returns its name.

Types

type VerboseError

type VerboseError struct {
	Title    string
	Output   []byte
	ExitCode int
}

func (*VerboseError) Error

func (err *VerboseError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL