// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// +build darwin freebsd linux netbsd openbsd windows

package os

import syscall "syscall"

// Commonly known Unix errors.
var (
	EPERM        error = syscall.EPERM
	ENOENT       error = syscall.ENOENT
	ESRCH        error = syscall.ESRCH
	EINTR        error = syscall.EINTR
	EIO          error = syscall.EIO
	E2BIG        error = syscall.E2BIG
	ENOEXEC      error = syscall.ENOEXEC
	EBADF        error = syscall.EBADF
	ECHILD       error = syscall.ECHILD
	EDEADLK      error = syscall.EDEADLK
	ENOMEM       error = syscall.ENOMEM
	EACCES       error = syscall.EACCES
	EFAULT       error = syscall.EFAULT
	EBUSY        error = syscall.EBUSY
	EEXIST       error = syscall.EEXIST
	EXDEV        error = syscall.EXDEV
	ENODEV       error = syscall.ENODEV
	ENOTDIR      error = syscall.ENOTDIR
	EISDIR       error = syscall.EISDIR
	EINVAL       error = syscall.EINVAL
	ENFILE       error = syscall.ENFILE
	EMFILE       error = syscall.EMFILE
	ENOTTY       error = syscall.ENOTTY
	EFBIG        error = syscall.EFBIG
	ENOSPC       error = syscall.ENOSPC
	ESPIPE       error = syscall.ESPIPE
	EROFS        error = syscall.EROFS
	EMLINK       error = syscall.EMLINK
	EPIPE        error = syscall.EPIPE
	EAGAIN       error = syscall.EAGAIN
	EDOM         error = syscall.EDOM
	ERANGE       error = syscall.ERANGE
	EADDRINUSE   error = syscall.EADDRINUSE
	ECONNREFUSED error = syscall.ECONNREFUSED
	ENAMETOOLONG error = syscall.ENAMETOOLONG
	EAFNOSUPPORT error = syscall.EAFNOSUPPORT
	ETIMEDOUT    error = syscall.ETIMEDOUT
	ENOTCONN     error = syscall.ENOTCONN
)

// SyscallError records an error from a specific system call.
type SyscallError struct {
	Syscall string
	Errno   error
}

func (e *SyscallError) Error() string { return e.Syscall + ": " + e.Errno.Error() }

// NewSyscallError returns, as an error, a new SyscallError
// with the given system call name and error details.
// As a convenience, if err is nil, NewSyscallError returns nil.
func NewSyscallError(syscall string, err error) error {
	if err == nil {
		return nil
	}
	return &SyscallError{syscall, err}
}
