42 lines
925 B
Go
42 lines
925 B
Go
package exec
|
|
|
|
import (
|
|
"code.icb4dc0.de/buildr/wasi-module-sdk-go/mem"
|
|
rpcv1 "code.icb4dc0.de/buildr/wasi-module-sdk-go/protocol/generated/rpc/v1"
|
|
"errors"
|
|
"fmt"
|
|
)
|
|
|
|
func LookPath(file string) (string, error) {
|
|
lookupPathReq := &rpcv1.LookupPathRequest{
|
|
Command: file,
|
|
}
|
|
|
|
data, err := lookupPathReq.MarshalVT()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
result := _lookPath(mem.DataToManagedPtr(data))
|
|
if result == 0 {
|
|
return "", fmt.Errorf("failed to lookup in path: %s", file)
|
|
}
|
|
|
|
resultPtr := uint32(result >> 32)
|
|
resultSize := uint32(result)
|
|
|
|
if resultSize == 0 {
|
|
return "", fmt.Errorf("failed to lookup in path: %s", file)
|
|
}
|
|
|
|
lookupPathResp := new(rpcv1.LookupPathResponse)
|
|
if err := lookupPathResp.UnmarshalVT(mem.PtrToData(resultPtr, resultSize)); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if len(lookupPathResp.Error) > 0 {
|
|
return "", errors.New(lookupPathResp.Error)
|
|
}
|
|
|
|
return lookupPathResp.Path, nil
|
|
}
|