0 | module System.Posix.Dir.Prim
3 | import public Data.Buffer.Core
4 | import public Data.ByteString
5 | import public Data.C.Integer
6 | import public System.Posix.Dir.Dir
7 | import public System.Posix.Errno
8 | import public System.Posix.File.Prim
16 | %foreign "C:li_mkdir, posix-idris"
17 | prim__mkdir : String -> ModeT -> PrimIO CInt
19 | %foreign "C:li_rmdir, posix-idris"
20 | prim__rmdir : String -> PrimIO CInt
22 | %foreign "C:calloc_dir, posix-idris"
23 | prim__calloc_dir : PrimIO AnyPtr
25 | %foreign "C:li_opendir, posix-idris"
26 | prim__opendir : String -> AnyPtr -> PrimIO CInt
28 | %foreign "C:li_fdopendir, posix-idris"
29 | prim__fdopendir : Bits32 -> AnyPtr -> PrimIO CInt
31 | %foreign "C:li_closedir, posix-idris"
32 | prim__closedir : AnyPtr -> PrimIO CInt
34 | %foreign "C:li_rewinddir, posix-idris"
35 | prim__rewinddir : AnyPtr -> PrimIO ()
37 | %foreign "C:li_readdir, posix-idris"
38 | prim__readdir : AnyPtr -> Buffer -> PrimIO SsizeT
40 | %foreign "C:li_getcwd, posix-idris"
41 | prim__getcwd : Buffer -> (max : Bits32) -> PrimIO SsizeT
43 | %foreign "C:li_chdir, posix-idris"
44 | prim__chdir : String -> PrimIO CInt
46 | %foreign "C:li_chroot, posix-idris"
47 | prim__chroot : String -> PrimIO CInt
58 | mkdir : (pth : String) -> Mode -> EPrim ()
59 | mkdir f (M m) = toUnit $
prim__mkdir f m
63 | opendir : String -> EPrim Dir
65 | let p # t := ffi prim__calloc_dir t
66 | in toVal (const $
wrapdir p) (prim__opendir s p) t
70 | fdopendir : FileDesc a => a -> EPrim Dir
72 | let p # t := ffi prim__calloc_dir t
73 | in toRes (MkIORes $
wrapdir p) (prim__fdopendir (fileDesc fd) p) t
77 | rewinddir : Dir -> PrimIO ()
78 | rewinddir p = prim__rewinddir (dirptr p)
82 | closedir : Dir -> EPrim ()
83 | closedir p = toUnit $
prim__closedir (dirptr p)
87 | closedir' : Dir -> F1' World
88 | closedir' p = e1ToF1 (closedir {es = [Errno]} p)
92 | readdir : (0 r : Type) -> FromBuf r => Dir -> EPrim (ReadRes r)
93 | readdir r p = toRes 256 (\b,_ => prim__readdir (dirptr p) b)
97 | getcwd : (0 r : Type) -> FromBuf r => EPrim r
98 | getcwd r = allocRead 4096 prim__getcwd
102 | chdir : String -> EPrim ()
103 | chdir p = toUnit $
prim__chdir p
107 | chroot : String -> EPrim ()
108 | chroot p = toUnit $
prim__chroot p