diff options
| author | 2024-10-06 20:53:03 +0000 | |
|---|---|---|
| committer | 2024-10-06 20:53:03 +0000 | |
| commit | bd1866ad8a860e1b6d43c7fc988cf8c346f19f33 (patch) | |
| tree | 6726f95b30b73baa4e5a7feed5c0b41bf46116db /vendor/codeberg.org/gruf/go-ffmpreg/wasm | |
| parent | [chore/themes] Tweak colors on new themes (#3397) (diff) | |
| download | gotosocial-bd1866ad8a860e1b6d43c7fc988cf8c346f19f33.tar.xz | |
update go-ffmpreg to v0.3.1 (pulls in latest wazero too) (#3398)
Diffstat (limited to 'vendor/codeberg.org/gruf/go-ffmpreg/wasm')
| -rw-r--r-- | vendor/codeberg.org/gruf/go-ffmpreg/wasm/instance.go | 89 | 
1 files changed, 89 insertions, 0 deletions
| diff --git a/vendor/codeberg.org/gruf/go-ffmpreg/wasm/instance.go b/vendor/codeberg.org/gruf/go-ffmpreg/wasm/instance.go new file mode 100644 index 000000000..d2eccd9e9 --- /dev/null +++ b/vendor/codeberg.org/gruf/go-ffmpreg/wasm/instance.go @@ -0,0 +1,89 @@ +package wasm + +import ( +	"context" +	"io" +	"unsafe" + +	"github.com/tetratelabs/wazero" +	"github.com/tetratelabs/wazero/api" +	"github.com/tetratelabs/wazero/sys" +) + +// CoreFeatures are the WebAssembly Core specification +// features our embedded binaries are compiled with. +const CoreFeatures = api.CoreFeatureSIMD | +	api.CoreFeatureBulkMemoryOperations | +	api.CoreFeatureNonTrappingFloatToIntConversion | +	api.CoreFeatureMutableGlobal | +	api.CoreFeatureReferenceTypes | +	api.CoreFeatureSignExtensionOps + +// Args encompasses a common set of +// configuration options often passed to +// wazero.Runtime on module instantiation. +type Args struct { + +	// Optional further module configuration function. +	// (e.g. to mount filesystem dir, set env vars, etc). +	Config func(wazero.ModuleConfig) wazero.ModuleConfig + +	// Standard FDs. +	Stdin  io.Reader +	Stdout io.Writer +	Stderr io.Writer + +	// CLI args. +	Args []string +} + +// Run will run given compiled WebAssembly module +// within the given runtime, with given arguments. +// Returns the exit code, or error. +func Run( +	ctx context.Context, +	runtime wazero.Runtime, +	module wazero.CompiledModule, +	args Args, +) (rc uint32, err error) { + +	// Prefix arguments with module name. +	cargs := make([]string, len(args.Args)+1) +	cargs[0] = module.Name() +	copy(cargs[1:], args.Args) + +	// Prepare new module configuration. +	modcfg := wazero.NewModuleConfig() +	modcfg = modcfg.WithArgs(cargs...) +	modcfg = modcfg.WithStdin(args.Stdin) +	modcfg = modcfg.WithStdout(args.Stdout) +	modcfg = modcfg.WithStderr(args.Stderr) + +	if args.Config != nil { +		// Pass through config fn. +		modcfg = args.Config(modcfg) +	} + +	// Instantiate the module from precompiled wasm module data. +	mod, err := runtime.InstantiateModule(ctx, module, modcfg) + +	if !isNil(mod) { +		// Ensure closed. +		_ = mod.Close(ctx) +	} + +	// Try extract exit code. +	switch err := err.(type) { +	case *sys.ExitError: +		return err.ExitCode(), nil +	default: +		return 0, err +	} +} + +// isNil will safely check if 'v' is nil without +// dealing with weird Go interface nil bullshit. +func isNil(i interface{}) bool { +	type eface struct{ Type, Data unsafe.Pointer } +	return (*(*eface)(unsafe.Pointer(&i))).Data == nil +} | 
