summaryrefslogtreecommitdiff
path: root/src/main/kotlin/FilePermissions.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/FilePermissions.kt')
-rw-r--r--src/main/kotlin/FilePermissions.kt92
1 files changed, 0 insertions, 92 deletions
diff --git a/src/main/kotlin/FilePermissions.kt b/src/main/kotlin/FilePermissions.kt
deleted file mode 100644
index 84a7944..0000000
--- a/src/main/kotlin/FilePermissions.kt
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * The permissions of a newly created file.
- */
-class FilePermissions {
-
- /**
- * The permissions for the file's owning user.
- */
- val userPerms: Permissions
-
- /**
- * The permissions for the file's owning group.
- */
- val groupPerms: Permissions
-
- /**
- * The permissions for everyone else.
- */
- val elsePerms: Permissions
-
- /**
- * Is the file a directory? If not, it's a regular file.
- */
- val isDirectory: Boolean
-
- private val DMDIR: UInt = 0x80000000u
-
- /**
- * Constructor for file permissions with separate fields.
- *
- * @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.
- */
- constructor(userPerms: Permissions, groupPerms: Permissions, elsePerms: Permissions, isDirectory: Boolean) {
- this.userPerms = userPerms
- this.groupPerms = groupPerms
- this.elsePerms = elsePerms
- this.isDirectory = isDirectory
- }
-
- /**
- * Constructor for raw file permission data. Only the first 4 elements are read.
- *
- * @param raw The raw file permission data.
- * @throws IllegalArgumentException if [raw] does not have at least 4 elements.
- */
- constructor(raw: List<UByte>) {
- require(raw.size >= 4)
- val raw = raw.slice(0..4)
- val dirValue = raw[0].toUInt().xor(this.DMDIR)
- this.isDirectory = dirValue > 0u
- this.userPerms = Permissions.fromByte(raw[1])
- this.groupPerms = Permissions.fromByte(raw[2])
- this.elsePerms = Permissions.fromByte(raw[3])
- }
-
- 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)));
-
- companion object {
- /**
- * Obtain a [Permissions] instance by matching its value.
- *
- * @throws NoSuchElementException if no such element has the provided value.
- */
- fun fromByte(bits: UByte) = Permissions.entries.first { it.bits == 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(this.DMDIR)
- }
- return perms
- }
-} \ No newline at end of file