0 | module System.Posix.Dir
 1 |
 2 | import Data.Buffer
 3 | import System.Posix.Dir.Prim as P
 4 |
 5 | import public Data.Buffer.Core
 6 | import public Data.ByteString
 7 | import public Data.C.Integer
 8 | import public System.Posix.Dir.Dir
 9 | import public System.Posix.Errno
10 | import public System.Posix.File
11 |
12 | %default total
13 |
14 | export %inline
15 | ELift1 World f => Resource f Dir where
16 |   cleanup d = lift1 $ closedir' d
17 |
18 | --------------------------------------------------------------------------------
19 | -- API
20 | --------------------------------------------------------------------------------
21 |
22 | ||| Creates a new directory.
23 | |||
24 | ||| This fails if the directory exists already. It also fails, if the
25 | ||| parent directory does not exist.
26 | export %inline
27 | mkdir : Has Errno es => EIO1 f => (pth : String) -> Mode -> f es ()
28 | mkdir pth m = elift1 (P.mkdir pth m)
29 |
30 | ||| Opens a directory.
31 | export
32 | opendir : Has Errno es => EIO1 f => String -> f es Dir
33 | opendir s = elift1 (P.opendir s)
34 |
35 | ||| Opens a directory from a file descriptor.
36 | export
37 | fdopendir : FileDesc a => Has Errno es => EIO1 f => a -> f es Dir
38 | fdopendir v = elift1 (P.fdopendir v)
39 |
40 | ||| Rewinds a directory.
41 | export
42 | rewinddir : HasIO io => Dir -> io ()
43 | rewinddir = primIO . P.rewinddir
44 |
45 | ||| Closes a directory.
46 | export
47 | closedir : Has Errno es => EIO1 f => Dir -> f es ()
48 | closedir d = elift1 (P.closedir d)
49 |
50 | ||| Reads the next entry from a directory.
51 | export
52 | readdir : (0 r : Type) -> FromBuf r => Has Errno es => EIO1 f => Dir -> f es (ReadRes r)
53 | readdir r d = elift1 (P.readdir r d)
54 |
55 | ||| Returns the current working directory.
56 | export %inline
57 | getcwd : (0 r : Type) -> FromBuf r => Has Errno es => EIO1 f => f es r
58 | getcwd r = elift1 (P.getcwd r)
59 |
60 | ||| Changes the current working directory
61 | export
62 | chdir : Has Errno es => EIO1 f => String -> f es ()
63 | chdir s = elift1 (P.chdir s)
64 |
65 | ||| Changes the current working directory
66 | export
67 | chroot : Has Errno es => EIO1 f => String -> f es ()
68 | chroot s = elift1 (P.chroot s)
69 |