12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- //go:build windows
- package hcserror
- import (
- "errors"
- "fmt"
- "golang.org/x/sys/windows"
- )
- type HcsError struct {
- title string
- rest string
- Err error
- }
- func (e *HcsError) Error() string {
- s := e.title
- if len(s) > 0 && s[len(s)-1] != ' ' {
- s += " "
- }
- s += fmt.Sprintf("failed in Win32: %s (0x%x)", e.Err, Win32FromError(e.Err))
- if e.rest != "" {
- if e.rest[0] != ' ' {
- s += " "
- }
- s += e.rest
- }
- return s
- }
- func New(err error, title, rest string) error {
- // Pass through DLL errors directly since they do not originate from HCS.
- var e *windows.DLLError
- if errors.As(err, &e) {
- return err
- }
- return &HcsError{title, rest, err}
- }
- func Win32FromError(err error) uint32 {
- var herr *HcsError
- if errors.As(err, &herr) {
- return Win32FromError(herr.Err)
- }
- var code windows.Errno
- if errors.As(err, &code) {
- return uint32(code)
- }
- return uint32(windows.ERROR_GEN_FAILURE)
- }
|