> Hugs wish-list item:
[..]
> OK, the relevant info is in the following files in the GHC distro:
Right: some fun with emacs, egrep, and awk:
/* AIX returns EEXIST where 4.3BSD used ENOTEMPTY.
* there is an ENOTEMPTY defined as the same as EEXIST, and
* therefore it won't work properly on a case statement.
* another option is to define _ALL_SOURCE for aix, which
* gives a different number for ENOTEMPTY.
* I haven't tried that. -- andre.
*/
E2BIG GHC_E2BIG
EACCES GHC_EACCES
EADDRINUSE GHC_EADDRINUSE
EADDRNOTAVAIL GHC_EADDRNOTAVAIL
EADV GHC_EADV
EAFNOSUPPORT GHC_EAFNOSUPPORT
EAGAIN GHC_EAGAIN
EALREADY GHC_EALREADY
EBADF GHC_EBADF
EBADMSG GHC_EBADMSG
EBADRPC GHC_EBADRPC
EBUSY GHC_EBUSY
ECHILD GHC_ECHILD
ECOMM GHC_ECOMM
ECONNABORTED GHC_ECONNABORTED
ECONNREFUSED GHC_ECONNREFUSED
ECONNRESET GHC_ECONNRESET
EDEADLK GHC_EDEADLK
EDESTADDRREQ GHC_EDESTADDRREQ
EDIRTY GHC_EDIRTY
EDOM GHC_EDOM
EDQUOT GHC_EDQUOT
EEXIST GHC_EEXIST
EFAULT GHC_EFAULT
EFBIG GHC_EFBIG
EFTYPE GHC_EFTYPE
EHOSTDOWN GHC_EHOSTDOWN
EHOSTUNREACH GHC_EHOSTUNREACH
EIDRM GHC_EIDRM
EILSEQ GHC_EILSEQ
EINPROGRESS GHC_EINPROGRESS
EINTR GHC_EINTR
EINVAL GHC_EINVAL
EIO GHC_EIO
EISCONN GHC_EISCONN
EISDIR GHC_EISDIR
ELOOP GHC_ELOOP
EMFILE GHC_EMFILE
EMLINK GHC_EMLINK
EMSGSIZE GHC_EMSGSIZE
EMULTIHOP GHC_EMULTIHOP
ENAMETOOLONG GHC_ENAMETOOLONG
ENETDOWN GHC_ENETDOWN
ENETRESET GHC_ENETRESET
ENETUNREACH GHC_ENETUNREACH
ENFILE GHC_ENFILE
ENOBUFS GHC_ENOBUFS
ENODATA GHC_ENODATA
ENODEV GHC_ENODEV
ENOENT GHC_ENOENT
ENOEXEC GHC_ENOEXEC
ENOLCK GHC_ENOLCK
ENOLINK GHC_ENOLINK
ENOMEM GHC_ENOMEM
ENOMSG GHC_ENOMSG
ENONET GHC_ENONET
ENOPROTOOPT GHC_ENOPROTOOPT
ENOSPC GHC_ENOSPC
ENOSR GHC_ENOSR
ENOSTR GHC_ENOSTR
ENOSYS GHC_ENOSYS
ENOTBLK GHC_ENOTBLK
ENOTCONN GHC_ENOTCONN
ENOTDIR GHC_ENOTDIR
ENOTEMPTY GHC_ENOTEMPTY
ENOTSOCK GHC_ENOTSOCK
ENOTTY GHC_ENOTTY
ENXIO GHC_ENXIO
EOPNOTSUPP GHC_EOPNOTSUPP
EPERM GHC_EPERM
EPFNOSUPPORT GHC_EPFNOSUPPORT
EPIPE GHC_EPIPE
EPROCLIM GHC_EPROCLIM
EPROCUNAVAIL GHC_EPROCUNAVAIL
EPROGMISMATCH GHC_EPROGMISMATCH
EPROGUNAVAIL GHC_EPROGUNAVAIL
EPROTO GHC_EPROTO
EPROTONOSUPPORT GHC_EPROTONOSUPPORT
EPROTOTYPE GHC_EPROTOTYPE
ERANGE GHC_ERANGE
EREMCHG GHC_EREMCHG
EREMOTE GHC_EREMOTE
EROFS GHC_EROFS
ERPCMISMATCH GHC_ERPCMISMATCH
ERREMOTE GHC_ERREMOTE
ESHUTDOWN GHC_ESHUTDOWN
ESOCKTNOSUPPORT GHC_ESOCKTNOSUPPORT
ESPIPE GHC_ESPIPE
ESRCH GHC_ESRCH
ESRMNT GHC_ESRMNT
ESTALE GHC_ESTALE
ETIME GHC_ETIME
ETIMEDOUT GHC_ETIMEDOUT
ETOOMANYREFS GHC_ETOOMANYREFS
ETXTBSY GHC_ETXTBSY
EUSERS GHC_EUSERS
EXDEV GHC_EXDEV
and...
GHC_E2BIG,ERR_RESOURCEEXHAUSTED,"argument list too long"
GHC_EACCES,ERR_PERMISSIONDENIED,"inadequate access permission"
GHC_EADDRINUSE,ERR_RESOURCEBUSY,"address already in use"
GHC_EADDRNOTAVAIL,ERR_UNSUPPORTEDOPERATION,"address not available"
GHC_EADV,ERR_OTHERERROR,"RFS advertise error"
GHC_EAFNOSUPPORT,ERR_UNSUPPORTEDOPERATION,"address family not supported by protocol
family"
GHC_EAGAIN,ERR_RESOURCEEXHAUSTED,"insufficient resources"
GHC_EALREADY,ERR_ALREADYEXISTS,"operation already in progress"
GHC_EBADF,ERR_OTHERERROR,"internal error (EBADF)"
GHC_EBADMSG,ERR_INAPPROPRIATETYPE,"next message has wrong type"
GHC_EBADRPC,ERR_OTHERERROR,"invalid RPC request or response"
GHC_EBUSY,ERR_RESOURCEBUSY,"device busy"
GHC_ECHILD,ERR_NOSUCHTHING,"no child processes"
GHC_ECOMM,ERR_RESOURCEVANISHED,"no virtual circuit could be found"
GHC_ECONNABORTED,ERR_OTHERERROR,"aborted connection"
GHC_ECONNREFUSED,ERR_NOSUCHTHING,"no listener on remote host"
GHC_ECONNRESET,ERR_RESOURCEVANISHED,"connection reset by peer"
GHC_EDEADLK,ERR_RESOURCEBUSY,"resource deadlock avoided"
GHC_EDESTADDRREQ,ERR_INVALIDARGUMENT,"destination address required"
GHC_EDIRTY,ERR_UNSATISFIEDCONSTRAINTS,"file system dirty"
GHC_EDOM,ERR_INVALIDARGUMENT,"argument too large"
GHC_EDQUOT,ERR_PERMISSIONDENIED,"quota exceeded"
GHC_EEXIST,ERR_ALREADYEXISTS,"file already exists"
GHC_EFAULT,ERR_OTHERERROR,"internal error (EFAULT)"
GHC_EFBIG,ERR_PERMISSIONDENIED,"file too large"
GHC_EFTYPE,ERR_INAPPROPRIATETYPE,"inappropriate NFS file type or format"
GHC_EHOSTDOWN,ERR_NOSUCHTHING,"destination host down"
GHC_EHOSTUNREACH,ERR_NOSUCHTHING,"remote host is unreachable"
GHC_EIDRM,ERR_RESOURCEVANISHED,"IPC identifier removed"
GHC_EILSEQ,ERR_INVALIDARGUMENT,"invalid wide character"
GHC_EINPROGRESS,ERR_ALREADYEXISTS,"operation now in progress"
GHC_EINTR,ERR_INTERRUPTED,"interrupted system call"
GHC_EINVAL,ERR_INVALIDARGUMENT,"invalid argument"
GHC_EIO,ERR_HARDWAREFAULT,"unknown I/O fault"
GHC_EISCONN,ERR_ALREADYEXISTS,"socket is already connected"
GHC_EISDIR,ERR_INAPPROPRIATETYPE,"file is a directory"
GHC_ELOOP,ERR_INVALIDARGUMENT,"too many symbolic links"
GHC_EMFILE,ERR_RESOURCEEXHAUSTED,"process file table full"
GHC_EMLINK,ERR_RESOURCEEXHAUSTED,"too many links"
GHC_EMSGSIZE,ERR_RESOURCEEXHAUSTED,"message too long"
GHC_EMULTIHOP,ERR_UNSUPPORTEDOPERATION,"multi-hop RFS request"
GHC_ENAMETOOLONG,ERR_INVALIDARGUMENT,"filename too long"
GHC_ENETDOWN,ERR_RESOURCEVANISHED,"network is down"
GHC_ENETRESET,ERR_RESOURCEVANISHED,"remote host rebooted; connection lost"
GHC_ENETUNREACH,ERR_NOSUCHTHING,"remote network is unreachable"
GHC_ENFILE,ERR_RESOURCEEXHAUSTED,"system file table full"
GHC_ENOBUFS,ERR_RESOURCEEXHAUSTED,"no buffer space available"
GHC_ENODATA,ERR_NOSUCHTHING,"no message on the stream head read queue"
GHC_ENODEV,ERR_NOSUCHTHING,"no such device"
GHC_ENOENT,ERR_NOSUCHTHING,"no such file or directory"
GHC_ENOEXEC,ERR_INVALIDARGUMENT,"not an executable file"
GHC_ENOLCK,ERR_RESOURCEEXHAUSTED,"no file locks available"
GHC_ENOLINK,ERR_RESOURCEVANISHED,"RFS link has been severed"
GHC_ENOMEM,ERR_RESOURCEEXHAUSTED,"not enough virtual memory"
GHC_ENOMSG,ERR_NOSUCHTHING,"no message of desired type"
GHC_ENONET,ERR_NOSUCHTHING,"host is not on a network"
GHC_ENOPROTOOPT,ERR_UNSUPPORTEDOPERATION,"operation not supported by protocol"
GHC_ENOSPC,ERR_RESOURCEEXHAUSTED,"no space left on device"
GHC_ENOSR,ERR_RESOURCEEXHAUSTED,"out of stream resources"
GHC_ENOSTR,ERR_INVALIDARGUMENT,"not a stream device"
GHC_ENOSYS,ERR_UNSUPPORTEDOPERATION,"function not implemented"
GHC_ENOTBLK,ERR_INVALIDARGUMENT,"not a block device"
GHC_ENOTCONN,ERR_INVALIDARGUMENT,"socket is not connected"
GHC_ENOTDIR,ERR_INAPPROPRIATETYPE,"not a directory"
GHC_ENOTEMPTY,ERR_UNSATISFIEDCONSTRAINTS,"directory not empty"
GHC_ENOTSOCK,ERR_INVALIDARGUMENT,"not a socket"
GHC_ENOTTY,ERR_ILLEGALOPERATION,"inappropriate ioctl for device"
GHC_ENXIO,ERR_NOSUCHTHING,"no such device or address"
GHC_EOPNOTSUPP,ERR_UNSUPPORTEDOPERATION,"operation not supported on socket"
GHC_EPERM,ERR_PERMISSIONDENIED,"privileged operation"
GHC_EPFNOSUPPORT,ERR_UNSUPPORTEDOPERATION,"protocol family not supported"
GHC_EPIPE,ERR_RESOURCEVANISHED,"broken pipe"
GHC_EPROCLIM,ERR_PERMISSIONDENIED,"too many processes"
GHC_EPROCUNAVAIL,ERR_UNSUPPORTEDOPERATION,"unimplemented RPC procedure"
GHC_EPROGMISMATCH,ERR_PROTOCOLERROR,"unsupported RPC program version"
GHC_EPROGUNAVAIL,ERR_UNSUPPORTEDOPERATION,"RPC program unavailable"
GHC_EPROTO,ERR_PROTOCOLERROR,"error in streams protocol"
GHC_EPROTONOSUPPORT,ERR_PROTOCOLERROR,"protocol not supported"
GHC_EPROTOTYPE,ERR_PROTOCOLERROR,"wrong protocol for socket"
GHC_ERANGE,ERR_UNSUPPORTEDOPERATION,"result too large"
GHC_EREMCHG,ERR_RESOURCEVANISHED,"remote address changed"
GHC_EREMOTE,ERR_ILLEGALOPERATION,"too many levels of remote in path"
GHC_EROFS,ERR_PERMISSIONDENIED,"read-only file system"
GHC_ERPCMISMATCH,ERR_PROTOCOLERROR,"RPC version is wrong"
GHC_ERREMOTE,ERR_ILLEGALOPERATION,"object is remote"
GHC_ESHUTDOWN,ERR_ILLEGALOPERATION,"can't send after socket shutdown"
GHC_ESOCKTNOSUPPORT,ERR_UNSUPPORTEDOPERATION,"socket type not supported"
GHC_ESPIPE,ERR_UNSUPPORTEDOPERATION,"can't seek on a pipe"
GHC_ESRCH,ERR_NOSUCHTHING,"no such process"
GHC_ESRMNT,ERR_UNSATISFIEDCONSTRAINTS,"RFS resources still mounted by remote host(s)"
GHC_ESTALE,ERR_RESOURCEVANISHED,"stale NFS file handle"
GHC_ETIME,ERR_TIMEEXPIRED,"timer expired"
GHC_ETIMEDOUT,ERR_TIMEEXPIRED,"connection timed out"
GHC_ETOOMANYREFS,ERR_RESOURCEEXHAUSTED,"too many references; can't splice"
GHC_ETXTBSY,ERR_RESOURCEBUSY,"text file in-use"
GHC_EUSERS,ERR_RESOURCEEXHAUSTED,"quota table full"
GHC_EWOULDBLOCK,ERR_OTHERERROR,"operation would block"
GHC_EXDEV,ERR_UNSUPPORTEDOPERATION,"can't make a cross-device link"
(default is ERR_OTHERERROR, "unexpected error", 0 is ERR_OTHERERROR, "no error".)
and finally...
constructErrorMsg :: String -> Maybe String -> IO IOError
constructErrorMsg call_site reason =
CCALL(getErrType__) >>= \ errtype ->
CCALL(getErrStr__) >>= \ str ->
let
iot =
case (errtype::Int) of
ERR_ALREADYEXISTS -> AlreadyExists
ERR_HARDWAREFAULT -> HardwareFault
ERR_ILLEGALOPERATION -> IllegalOperation
ERR_INAPPROPRIATETYPE -> InappropriateType
ERR_INTERRUPTED -> Interrupted
ERR_INVALIDARGUMENT -> InvalidArgument
ERR_NOSUCHTHING -> NoSuchThing
ERR_OTHERERROR -> OtherError
ERR_PERMISSIONDENIED -> PermissionDenied
ERR_PROTOCOLERROR -> ProtocolError
ERR_RESOURCEBUSY -> ResourceBusy
ERR_RESOURCEEXHAUSTED -> ResourceExhausted
ERR_RESOURCEVANISHED -> ResourceVanished
ERR_SYSTEMERROR -> SystemError
ERR_TIMEEXPIRED -> TimeExpired
ERR_UNSATISFIEDCONSTRAINTS -> UnsatisfiedConstraints
ERR_UNSUPPORTEDOPERATION -> UnsupportedOperation
ERR_EOF -> EOF
_ -> OtherError
HTH!
--KW 8-)
--
: Keith Wansbrough, MSc, BSc(Hons) (Auckland) ------------------------:
: PhD Student, Computer Laboratory, University of Cambridge, England. :
: (and recently of the University of Glasgow, Scotland. [><] ) :
: Native of Antipodean Auckland, New Zealand: 174d47' E, 36d55' S. :
: http://www.cl.cam.ac.uk/users/kw217/ mailto:[EMAIL PROTECTED] :
:---------------------------------------------------------------------: