> 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]     :
:---------------------------------------------------------------------:

Reply via email to