blob: 04561feca9554c13c50a5676427f80f37363e380 (
plain)
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
|
/**
* The permissions of a newly created file.
*
* @param userPerms The permissions for the file's owning user.
* @param groupPerms The permissions for the file's owning group.
* @param elsePerms The permissions for everyone else.
* @param isDirectory Is the file a directory? If not, it's a regular file.
*/
class FilePermissions(val userPerms: Permissions, val groupPerms: Permissions, val elsePerms: Permissions, val isDirectory: Boolean) {
enum class Permissions(val bits: UByte) {
READ(0x4u),
WRITE(0x2u),
EXECUTE(0x1u),
READ_WRITE(READ.bits.or(WRITE.bits)),
READ_EXECUTE(READ.bits.or(EXECUTE.bits)),
WRITE_EXECUTE(WRITE.bits.or(EXECUTE.bits)),
READ_WRITE_EXECUTE(READ.bits.or(WRITE.bits.or(EXECUTE.bits)))
}
/**
* Turn the permissions described by the [FilePermissions] fields into a permission integer (4 bytes).
*/
fun toPermissionInt(): UInt {
val permFileds = listOf(userPerms, groupPerms, elsePerms)
val perms: UInt = 0u
for (i in 0..permFileds.size) {
perms.or(permFileds[i].bits.toUInt().shl(8 * (permFileds.size - 1 - i)))
}
if (isDirectory) {
perms.or(0x80000000u)
}
return perms
}
}
|