0 | module System.Linux.Error
5 | import Derive.Prelude
8 | %language ElabReflection
10 | export %foreign "C:ep_eagain,epoll-idris"
13 | export %foreign "C:ep_ebadf,epoll-idris"
16 | export %foreign "C:ep_eexist,epoll-idris"
19 | export %foreign "C:ep_efault,epoll-idris"
22 | export %foreign "C:ep_einval,epoll-idris"
25 | export %foreign "C:ep_eisdir,epoll-idris"
28 | export %foreign "C:ep_eio,epoll-idris"
31 | export %foreign "C:ep_eloop,epoll-idris"
34 | export %foreign "C:ep_enoent,epoll-idris"
37 | export %foreign "C:ep_enomem,epoll-idris"
40 | export %foreign "C:ep_enospc,epoll-idris"
43 | export %foreign "C:ep_eperm,epoll-idris"
46 | export %foreign "C:ep_ewouldblock,epoll-idris"
47 | ewouldblock : Bits32
49 | export %foreign "C:ep_eintr,epoll-idris"
52 | export %foreign "C:ep_edestaddrreq,epoll-idris"
53 | edestaddrreq : Bits32
55 | export %foreign "C:ep_efbig,epoll-idris"
58 | export %foreign "C:ep_edquot,epoll-idris"
61 | export %foreign "C:ep_epipe,epoll-idris"
64 | %foreign "C:ep_errno,epoll-idris"
65 | prim__errno : PrimIO Bits32
68 | data EpollErr : Type where
71 | EDESTADDRREQ : EpollErr
87 | %runElab derive "EpollErr" [Show,Eq,Finite]
90 | Interpolation EpollErr where interpolate = show
93 | errCode : EpollErr -> Bits32
94 | errCode EAGAIN = eagain
95 | errCode EBADF = ebadf
96 | errCode EDQUOT = edquot
97 | errCode EDESTADDRREQ = edestaddrreq
98 | errCode EEXIST = eexist
99 | errCode EFAULT = efault
100 | errCode EFBIG = efbig
101 | errCode EISDIR = eisdir
102 | errCode EINTR = eintr
103 | errCode EINVAL = einval
105 | errCode ELOOP = eloop
106 | errCode ENOENT = enoent
107 | errCode ENOMEM = enomem
108 | errCode ENOSPC = enospc
109 | errCode EPERM = eperm
110 | errCode EPIPE = epipe
112 | pairs : List (Bits32,EpollErr)
113 | pairs = (ewouldblock, EAGAIN) :: map (\x => (errCode x, x)) values
116 | fromCode : Bits32 -> EpollErr
117 | fromCode x = fromMaybe EINVAL $
lookup x pairs
120 | getErr : PrimIO (Either EpollErr a)
122 | let MkIORes v w := prim__errno w
123 | in MkIORes (Left $
fromCode v) w
126 | checkErr : Int32 -> PrimIO (Either EpollErr ())
127 | checkErr n w = if n < 0 then getErr w else MkIORes (Right ()) w
130 | checkSize : Int32 -> PrimIO (Either EpollErr Nat)
131 | checkSize n w = if n < 0 then getErr w else MkIORes (Right $
cast n) w