1// Copyright 2009 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
5// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris
6
7package os
8
9import "syscall"
10
11func isExist(err error) bool {
12	switch pe := err.(type) {
13	case nil:
14		return false
15	case *PathError:
16		err = pe.Err
17	case *LinkError:
18		err = pe.Err
19	case *SyscallError:
20		err = pe.Err
21	}
22	return err == syscall.EEXIST || err == ErrExist
23}
24
25func isNotExist(err error) bool {
26	switch pe := err.(type) {
27	case nil:
28		return false
29	case *PathError:
30		err = pe.Err
31	case *LinkError:
32		err = pe.Err
33	case *SyscallError:
34		err = pe.Err
35	}
36	return err == syscall.ENOENT || err == ErrNotExist
37}
38
39func isPermission(err error) bool {
40	switch pe := err.(type) {
41	case nil:
42		return false
43	case *PathError:
44		err = pe.Err
45	case *LinkError:
46		err = pe.Err
47	case *SyscallError:
48		err = pe.Err
49	}
50	return err == syscall.EACCES || err == syscall.EPERM || err == ErrPermission
51}
52