-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathreadfile.kt
43 lines (35 loc) · 965 Bytes
/
readfile.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package datkt.fs
import datkt.fs.ReadFileCallback as Callback
data class ReadFileOptions(
val mode: Long = DEFAULT_OPEN_MODE,
val flags: String = "r"
)
fun readFile(path: String, callback: Callback) {
return readFile(path, ReadFileOptions(), callback)
}
fun readFile(path: String, opts: ReadFileOptions, callback: Callback) {
var buffer: ByteArray
var fd: Int = -1
fun onstat(err: Error?, stats: Stats?) {
if (null != err) {
callback(err, null)
} else if (null != stats && fd > -1) {
val size = stats.size.toInt()
buffer = ByteArray(size)
if (size > 0) {
read(fd, buffer, 0, size, 0, callback)
} else {
callback(null, buffer)
}
}
}
fun onopen(err: Error?, result: Int?) {
if (null != err) {
callback(err, null)
} else if (null != result && result > -1) {
fd = result
fstat(result, ::onstat)
}
}
open(path, opts?.flags, opts?.mode, ::onopen)
}