161 lines
6.4 KiB
Go
161 lines
6.4 KiB
Go
// Copyright 2018 Google Inc.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
// +build linux
|
|
|
|
package syserr
|
|
|
|
import (
|
|
"syscall"
|
|
)
|
|
|
|
var linuxHostTranslations = map[syscall.Errno]*Error{
|
|
syscall.EPERM: ErrNotPermitted,
|
|
syscall.ENOENT: ErrNoFileOrDir,
|
|
syscall.ESRCH: ErrNoProcess,
|
|
syscall.EINTR: ErrInterrupted,
|
|
syscall.EIO: ErrIO,
|
|
syscall.ENXIO: ErrDeviceOrAddress,
|
|
syscall.E2BIG: ErrTooManyArgs,
|
|
syscall.ENOEXEC: ErrEcec,
|
|
syscall.EBADF: ErrBadFD,
|
|
syscall.ECHILD: ErrNoChild,
|
|
syscall.EAGAIN: ErrTryAgain,
|
|
syscall.ENOMEM: ErrNoMemory,
|
|
syscall.EACCES: ErrPermissionDenied,
|
|
syscall.EFAULT: ErrBadAddress,
|
|
syscall.ENOTBLK: ErrNotBlockDevice,
|
|
syscall.EBUSY: ErrBusy,
|
|
syscall.EEXIST: ErrExists,
|
|
syscall.EXDEV: ErrCrossDeviceLink,
|
|
syscall.ENODEV: ErrNoDevice,
|
|
syscall.ENOTDIR: ErrNotDir,
|
|
syscall.EISDIR: ErrIsDir,
|
|
syscall.EINVAL: ErrInvalidArgument,
|
|
syscall.ENFILE: ErrFileTableOverflow,
|
|
syscall.EMFILE: ErrTooManyOpenFiles,
|
|
syscall.ENOTTY: ErrNotTTY,
|
|
syscall.ETXTBSY: ErrTestFileBusy,
|
|
syscall.EFBIG: ErrFileTooBig,
|
|
syscall.ENOSPC: ErrNoSpace,
|
|
syscall.ESPIPE: ErrIllegalSeek,
|
|
syscall.EROFS: ErrReadOnlyFS,
|
|
syscall.EMLINK: ErrTooManyLinks,
|
|
syscall.EPIPE: ErrBrokenPipe,
|
|
syscall.EDOM: ErrDomain,
|
|
syscall.ERANGE: ErrRange,
|
|
syscall.EDEADLOCK: ErrDeadlock,
|
|
syscall.ENAMETOOLONG: ErrNameTooLong,
|
|
syscall.ENOLCK: ErrNoLocksAvailable,
|
|
syscall.ENOSYS: ErrInvalidSyscall,
|
|
syscall.ENOTEMPTY: ErrDirNotEmpty,
|
|
syscall.ELOOP: ErrLinkLoop,
|
|
syscall.ENOMSG: ErrNoMessage,
|
|
syscall.EIDRM: ErrIdentifierRemoved,
|
|
syscall.ECHRNG: ErrChannelOutOfRange,
|
|
syscall.EL2NSYNC: ErrLevelTwoNotSynced,
|
|
syscall.EL3HLT: ErrLevelThreeHalted,
|
|
syscall.EL3RST: ErrLevelThreeReset,
|
|
syscall.ELNRNG: ErrLinkNumberOutOfRange,
|
|
syscall.EUNATCH: ErrProtocolDriverNotAttached,
|
|
syscall.ENOCSI: ErrNoCSIAvailable,
|
|
syscall.EL2HLT: ErrLevelTwoHalted,
|
|
syscall.EBADE: ErrInvalidExchange,
|
|
syscall.EBADR: ErrInvalidRequestDescriptor,
|
|
syscall.EXFULL: ErrExchangeFull,
|
|
syscall.ENOANO: ErrNoAnode,
|
|
syscall.EBADRQC: ErrInvalidRequestCode,
|
|
syscall.EBADSLT: ErrInvalidSlot,
|
|
syscall.EBFONT: ErrBadFontFile,
|
|
syscall.ENOSTR: ErrNotStream,
|
|
syscall.ENODATA: ErrNoDataAvailable,
|
|
syscall.ETIME: ErrTimerExpired,
|
|
syscall.ENOSR: ErrStreamsResourceDepleted,
|
|
syscall.ENONET: ErrMachineNotOnNetwork,
|
|
syscall.ENOPKG: ErrPackageNotInstalled,
|
|
syscall.EREMOTE: ErrIsRemote,
|
|
syscall.ENOLINK: ErrNoLink,
|
|
syscall.EADV: ErrAdvertise,
|
|
syscall.ESRMNT: ErrSRMount,
|
|
syscall.ECOMM: ErrSendCommunication,
|
|
syscall.EPROTO: ErrProtocol,
|
|
syscall.EMULTIHOP: ErrMultihopAttempted,
|
|
syscall.EDOTDOT: ErrRFS,
|
|
syscall.EBADMSG: ErrInvalidDataMessage,
|
|
syscall.EOVERFLOW: ErrOverflow,
|
|
syscall.ENOTUNIQ: ErrNetworkNameNotUnique,
|
|
syscall.EBADFD: ErrFDInBadState,
|
|
syscall.EREMCHG: ErrRemoteAddressChanged,
|
|
syscall.ELIBACC: ErrSharedLibraryInaccessible,
|
|
syscall.ELIBBAD: ErrCorruptedSharedLibrary,
|
|
syscall.ELIBSCN: ErrLibSectionCorrupted,
|
|
syscall.ELIBMAX: ErrTooManySharedLibraries,
|
|
syscall.ELIBEXEC: ErrSharedLibraryExeced,
|
|
syscall.EILSEQ: ErrIllegalByteSequence,
|
|
syscall.ERESTART: ErrShouldRestart,
|
|
syscall.ESTRPIPE: ErrStreamPipe,
|
|
syscall.EUSERS: ErrTooManyUsers,
|
|
syscall.ENOTSOCK: ErrNotASocket,
|
|
syscall.EDESTADDRREQ: ErrDestinationAddressRequired,
|
|
syscall.EMSGSIZE: ErrMessageTooLong,
|
|
syscall.EPROTOTYPE: ErrWrongProtocolForSocket,
|
|
syscall.ENOPROTOOPT: ErrProtocolNotAvailable,
|
|
syscall.EPROTONOSUPPORT: ErrProtocolNotSupported,
|
|
syscall.ESOCKTNOSUPPORT: ErrSocketNotSupported,
|
|
syscall.EOPNOTSUPP: ErrEndpointOperation,
|
|
syscall.EPFNOSUPPORT: ErrProtocolFamilyNotSupported,
|
|
syscall.EAFNOSUPPORT: ErrAddressFamilyNotSupported,
|
|
syscall.EADDRINUSE: ErrAddressInUse,
|
|
syscall.EADDRNOTAVAIL: ErrAddressNotAvailable,
|
|
syscall.ENETDOWN: ErrNetworkDown,
|
|
syscall.ENETUNREACH: ErrNetworkUnreachable,
|
|
syscall.ENETRESET: ErrNetworkReset,
|
|
syscall.ECONNABORTED: ErrConnectionAborted,
|
|
syscall.ECONNRESET: ErrConnectionReset,
|
|
syscall.ENOBUFS: ErrNoBufferSpace,
|
|
syscall.EISCONN: ErrAlreadyConnected,
|
|
syscall.ENOTCONN: ErrNotConnected,
|
|
syscall.ESHUTDOWN: ErrShutdown,
|
|
syscall.ETOOMANYREFS: ErrTooManyRefs,
|
|
syscall.ETIMEDOUT: ErrTimedOut,
|
|
syscall.ECONNREFUSED: ErrConnectionRefused,
|
|
syscall.EHOSTDOWN: ErrHostDown,
|
|
syscall.EHOSTUNREACH: ErrNoRoute,
|
|
syscall.EALREADY: ErrAlreadyInProgress,
|
|
syscall.EINPROGRESS: ErrInProgress,
|
|
syscall.ESTALE: ErrStaleFileHandle,
|
|
syscall.EUCLEAN: ErrStructureNeedsCleaning,
|
|
syscall.ENOTNAM: ErrIsNamedFile,
|
|
syscall.EREMOTEIO: ErrRemoteIO,
|
|
syscall.EDQUOT: ErrQuotaExceeded,
|
|
syscall.ENOMEDIUM: ErrNoMedium,
|
|
syscall.EMEDIUMTYPE: ErrWrongMediumType,
|
|
syscall.ECANCELED: ErrCanceled,
|
|
syscall.ENOKEY: ErrNoKey,
|
|
syscall.EKEYEXPIRED: ErrKeyExpired,
|
|
syscall.EKEYREVOKED: ErrKeyRevoked,
|
|
syscall.EKEYREJECTED: ErrKeyRejected,
|
|
syscall.EOWNERDEAD: ErrOwnerDied,
|
|
syscall.ENOTRECOVERABLE: ErrNotRecoverable,
|
|
}
|
|
|
|
// FromHost translates a syscall.Errno to a corresponding Error value.
|
|
func FromHost(err syscall.Errno) *Error {
|
|
e, ok := linuxHostTranslations[err]
|
|
if !ok {
|
|
panic("Unknown host errno " + err.Error())
|
|
}
|
|
return e
|
|
}
|