summaryrefslogtreecommitdiffhomepage
path: root/pkg/syserr/host_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/syserr/host_linux.go')
-rw-r--r--pkg/syserr/host_linux.go160
1 files changed, 160 insertions, 0 deletions
diff --git a/pkg/syserr/host_linux.go b/pkg/syserr/host_linux.go
new file mode 100644
index 000000000..ffd78e8f8
--- /dev/null
+++ b/pkg/syserr/host_linux.go
@@ -0,0 +1,160 @@
+// 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
+}