...
1 package sys
2
3 import (
4 "io"
5 "io/fs"
6 "os"
7 )
8
9
10 func UnwrapOSError(err error) Errno {
11 if err == nil {
12 return 0
13 }
14 err = underlyingError(err)
15 switch err {
16 case nil, io.EOF:
17 return 0
18 case fs.ErrInvalid:
19 return EINVAL
20 case fs.ErrPermission:
21 return EPERM
22 case fs.ErrExist:
23 return EEXIST
24 case fs.ErrNotExist:
25 return ENOENT
26 case fs.ErrClosed:
27 return EBADF
28 }
29 return errorToErrno(err)
30 }
31
32
33
34
35 func underlyingError(err error) error {
36 switch err := err.(type) {
37 case *os.PathError:
38 return err.Err
39 case *os.LinkError:
40 return err.Err
41 case *os.SyscallError:
42 return err.Err
43 }
44 return err
45 }
46
View as plain text