mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-25 05:06:38 +00:00
1e7b32490d
This allows for building GoToSocial with [SQLite transpiled to WASM](https://github.com/ncruces/go-sqlite3) and accessed through [Wazero](https://wazero.io/).
46 lines
844 B
Go
46 lines
844 B
Go
package sys
|
|
|
|
import (
|
|
"io"
|
|
"io/fs"
|
|
"os"
|
|
)
|
|
|
|
// UnwrapOSError returns an Errno or zero if the input is nil.
|
|
func UnwrapOSError(err error) Errno {
|
|
if err == nil {
|
|
return 0
|
|
}
|
|
err = underlyingError(err)
|
|
switch err {
|
|
case nil, io.EOF:
|
|
return 0 // EOF is not a Errno
|
|
case fs.ErrInvalid:
|
|
return EINVAL
|
|
case fs.ErrPermission:
|
|
return EPERM
|
|
case fs.ErrExist:
|
|
return EEXIST
|
|
case fs.ErrNotExist:
|
|
return ENOENT
|
|
case fs.ErrClosed:
|
|
return EBADF
|
|
}
|
|
return errorToErrno(err)
|
|
}
|
|
|
|
// underlyingError returns the underlying error if a well-known OS error type.
|
|
//
|
|
// This impl is basically the same as os.underlyingError in os/error.go
|
|
func underlyingError(err error) error {
|
|
switch err := err.(type) {
|
|
case *os.PathError:
|
|
return err.Err
|
|
case *os.LinkError:
|
|
return err.Err
|
|
case *os.SyscallError:
|
|
return err.Err
|
|
}
|
|
return err
|
|
}
|