1// Copyright 2012 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package os
6
7import "syscall"
8
9func isExist(err error) bool {
10	switch pe := err.(type) {
11	case nil:
12		return false
13	case *PathError:
14		err = pe.Err
15	case *LinkError:
16		err = pe.Err
17	case *SyscallError:
18		err = pe.Err
19	}
20	return err == syscall.ERROR_ALREADY_EXISTS ||
21		err == syscall.ERROR_FILE_EXISTS || err == ErrExist
22}
23
24const _ERROR_BAD_NETPATH = syscall.Errno(53)
25
26func isNotExist(err error) bool {
27	switch pe := err.(type) {
28	case nil:
29		return false
30	case *PathError:
31		err = pe.Err
32	case *LinkError:
33		err = pe.Err
34	case *SyscallError:
35		err = pe.Err
36	}
37	return err == syscall.ERROR_FILE_NOT_FOUND ||
38		err == _ERROR_BAD_NETPATH ||
39		err == syscall.ERROR_PATH_NOT_FOUND || err == ErrNotExist
40}
41
42func isPermission(err error) bool {
43	switch pe := err.(type) {
44	case nil:
45		return false
46	case *PathError:
47		err = pe.Err
48	case *LinkError:
49		err = pe.Err
50	case *SyscallError:
51		err = pe.Err
52	}
53	return err == syscall.ERROR_ACCESS_DENIED || err == ErrPermission
54}
55