0 | module System.Linux.Inotify.Prim
 1 |
 2 | import Data.C.Array
 3 | import public System.Linux.Inotify.Flags
 4 | import public System.Linux.Inotify.Inotify
 5 | import public System.Posix.File.Prim
 6 |
 7 | %default total
 8 |
 9 | --------------------------------------------------------------------------------
10 | -- FFI
11 | --------------------------------------------------------------------------------
12 |
13 | %foreign "C:li_inotify_init1, linux-idris"
14 | prim__inotify_init1 : Bits32 -> PrimIO CInt
15 |
16 | %foreign "C:li_inotify_add_watch, linux-idris"
17 | prim__inotify_add_watch : Bits32 -> String -> Bits32 -> PrimIO CInt
18 |
19 | %foreign "C:li_inotify_rm, linux-idris"
20 | prim__inotify_rm : Bits32 -> Bits32 -> PrimIO CInt
21 |
22 | --------------------------------------------------------------------------------
23 | -- API
24 | --------------------------------------------------------------------------------
25 |
26 | ||| Opens a new `inotify` file descriptor.
27 | export %inline
28 | inotifyInit : InotifyFlags -> EPrim Inotify
29 | inotifyInit (IF f) = toVal cast $ prim__inotify_init1 f
30 |
31 | ||| Watches a file for the given events.
32 | export %inline
33 | inotifyAddWatch : Inotify -> String -> InotifyMask -> EPrim Watch
34 | inotifyAddWatch f s (IM m) =
35 |   toVal cast $ prim__inotify_add_watch (fileDesc f) s m
36 |
37 | export %inline
38 | inotifyRm : Inotify -> Watch -> EPrim ()
39 | inotifyRm f w = toUnit $ prim__inotify_rm (fileDesc f) (cast w)
40 |
41 | ||| Reads at most `buf` from an `inotify` file descriptor.
42 | export %inline
43 | inotifyRead : (buf : Bits32) -> Inotify -> EPrim (List InotifyRes)
44 | inotifyRead buf i = read i _ buf
45 |