err = pe.Err
case *LinkError:
err = pe.Err
+ case *SyscallError:
+ err = pe.Err
}
return contains(err.Error(), " exists")
}
err = pe.Err
case *LinkError:
err = pe.Err
+ case *SyscallError:
+ err = pe.Err
}
return contains(err.Error(), "does not exist") || contains(err.Error(), "not found") ||
contains(err.Error(), "has been removed") || contains(err.Error(), "no parent")
err = pe.Err
case *LinkError:
err = pe.Err
+ case *SyscallError:
+ err = pe.Err
}
return contains(err.Error(), "permission denied")
}
{&os.LinkError{Err: os.ErrPermission}, false, false},
{&os.LinkError{Err: os.ErrExist}, true, false},
{&os.LinkError{Err: os.ErrNotExist}, false, true},
+ {&os.SyscallError{Err: os.ErrNotExist}, false, true},
+ {&os.SyscallError{Err: os.ErrExist}, true, false},
{nil, false, false},
}
}
}
+var isPermissionTests = []struct {
+ err error
+ want bool
+}{
+ {nil, false},
+ {&os.PathError{Err: os.ErrPermission}, true},
+ {&os.SyscallError{Err: os.ErrPermission}, true},
+}
+
+func TestIsPermission(t *testing.T) {
+ for _, tt := range isPermissionTests {
+ if got := os.IsPermission(tt.err); got != tt.want {
+ t.Errorf("os.IsPermission(%#v) = %v; want %v", tt.err, got, tt.want)
+ }
+ }
+}
+
func TestErrPathNUL(t *testing.T) {
f, err := ioutil.TempFile("", "_Go_ErrPathNUL\x00")
if err == nil {
err = pe.Err
case *LinkError:
err = pe.Err
+ case *SyscallError:
+ err = pe.Err
}
return err == syscall.ERROR_ALREADY_EXISTS ||
err == syscall.ERROR_FILE_EXISTS || err == ErrExist
err = pe.Err
case *LinkError:
err = pe.Err
+ case *SyscallError:
+ err = pe.Err
}
return err == syscall.ERROR_FILE_NOT_FOUND ||
err == _ERROR_BAD_NETPATH ||
err = pe.Err
case *LinkError:
err = pe.Err
+ case *SyscallError:
+ err = pe.Err
}
return err == syscall.ERROR_ACCESS_DENIED || err == ErrPermission
}