package sys

import "github.com/tetratelabs/wazero/sys"

Package sys includes constants and types used by both public and internal APIs.

Index

Constants

const (
	// ExitCodeContextCanceled corresponds to context.Canceled and returned by ExitError.ExitCode in that case.
	ExitCodeContextCanceled uint32 = 0xffffffff
	// ExitCodeDeadlineExceeded corresponds to context.DeadlineExceeded and returned by ExitError.ExitCode in that case.
	ExitCodeDeadlineExceeded uint32 = 0xefffffff
)

These two special exit codes are reserved by wazero for context Cancel and Timeout integrations. The assumption here is that well-behaving Wasm programs won't use these two exit codes.

Types

type ClockResolution

type ClockResolution uint32

ClockResolution is a positive granularity of clock precision in nanoseconds. For example, if the resolution is 1us, this returns 1000.

Note: Some implementations return arbitrary resolution because there's no perfect alternative. For example, according to the source in time.go, windows monotonic resolution can be 15ms. See /RATIONALE.md.

type EpochNanos

type EpochNanos = int64

EpochNanos is a timestamp in epoch nanoseconds, or zero if unknown.

This defines epoch time the same way as Walltime, except this value is packed into an int64. Common conversions are detailed in the examples.

type ExitError

type ExitError struct {
	// contains filtered or unexported fields
}

ExitError is returned to a caller of api.Function when api.Module CloseWithExitCode was invoked, or context.Context passed to api.Function Call was canceled or reached the Timeout.

ExitCode zero value means success while any other value is an error.

Here's an example of how to get the exit code:

main := module.ExportedFunction("main")
if err := main(ctx); err != nil {
	if exitErr, ok := err.(*sys.ExitError); ok {
		// This means your module exited with non-zero code!
	}
--snip--

Note: While possible the reason of this was "proc_exit" from "wasi_snapshot_preview1", it could be from other host functions, for example an AssemblyScript's abort handler, or any arbitrary caller of CloseWithExitCode.

See https://github.com/WebAssembly/WASI/blob/main/phases/snapshot/docs.md#proc_exit and https://www.assemblyscript.org/concepts.html#special-imports

Note: In the case of context cancellation or timeout, the api.Module from which the api.Function created is closed.

func NewExitError

func NewExitError(exitCode uint32) *ExitError

func (*ExitError) Error

func (e *ExitError) Error() string

Error implements the error interface.

func (*ExitError) ExitCode

func (e *ExitError) ExitCode() uint32

ExitCode returns zero on success, and an arbitrary value otherwise.

func (*ExitError) Is

func (e *ExitError) Is(err error) bool

Is allows use via errors.Is

type Inode

type Inode = uint64

Inode is the file serial number, or zero if unknown.

Any constant value will invalidate functions that use this for equivalence, such as os.SameFile (Stat_t.Ino).

When zero is returned by a `readdir`, some compilers will attempt to get a non-zero value with `lstat`. Those using this for darwin's definition of `getdirentries` conflate zero `d_fileno` with a deleted file, so skip the entry. See /RATIONALE.md for more on this.

type Nanosleep

type Nanosleep func(ns int64)

Nanosleep puts the current goroutine to sleep for at least ns nanoseconds.

type Nanotime

type Nanotime func() int64

Nanotime returns nanoseconds since an arbitrary start point, used to measure elapsed time. This is sometimes referred to as a tick or monotonic time.

Note: There are no constraints on the value return except that it increments. For example, -1 is a valid if the next value is >= 0.

type Osyield

type Osyield func()

Osyield yields the processor, typically to implement spin-wait loops.

type Stat_t

type Stat_t struct {
	// Dev is the device ID of device containing the file.
	Dev uint64

	// Ino is the file serial number, or zero if not available. See Inode for
	// more details including impact returning a zero value.
	Ino Inode

	// Mode is the same as Mode on fs.FileInfo containing bits to identify the
	// type of the file (fs.ModeType) and its permissions (fs.ModePerm).
	Mode fs.FileMode

	// Nlink is the number of hard links to the file.
	//
	// Note: This value is platform-specific and often at least one. Linux will
	// return 1+N for a directory, where BSD (like Darwin) return 2+N, which
	// includes the dot entry.
	Nlink uint64

	// Size is the length in bytes for regular files. For symbolic links, this
	// is length in bytes of the pathname contained in the symbolic link.
	Size int64

	// Atim is the last data access timestamp in epoch nanoseconds.
	Atim EpochNanos

	// Mtim is the last data modification timestamp in epoch nanoseconds.
	Mtim EpochNanos

	// Ctim is the last file status change timestamp in epoch nanoseconds.
	Ctim EpochNanos
}

Stat_t is similar to syscall.Stat_t, except available on all operating systems, including Windows.

Notes

func NewStat_t

func NewStat_t(info fs.FileInfo) Stat_t

NewStat_t fills a new Stat_t from `info`, including any runtime.GOOS-specific details from fs.FileInfo `Sys`. When `Sys` is already a *Stat_t, it is returned as-is.

Notes

type Walltime

type Walltime func() (sec int64, nsec int32)

Walltime returns the current unix/epoch time, seconds since midnight UTC 1 January 1970, with a nanosecond fraction.

Source Files

clock.go error.go stat.go stat_linux.go

Version
v1.9.0 (latest)
Published
Feb 18, 2025
Platform
linux/amd64
Imports
4 packages
Last checked
4 days ago

Tools for package owners.