summaryrefslogtreecommitdiff
path: root/src/main/kotlin/FileMode.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/FileMode.kt')
-rw-r--r--src/main/kotlin/FileMode.kt32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/main/kotlin/FileMode.kt b/src/main/kotlin/FileMode.kt
new file mode 100644
index 0000000..81712e6
--- /dev/null
+++ b/src/main/kotlin/FileMode.kt
@@ -0,0 +1,32 @@
+/**
+ * The mode in which to open or create a file. For directories, it's illegal for directories to be written, truncated,
+ * or removed on close.
+ *
+ * @param mode The actual mode, as described by the [Mode] enum class.
+ * @param truncate Set or unset the truncation bit. It requires the write permission.
+ * @param removeClose Set or unset the "remove on close" bit. It requires the remove permission in the parent directory.
+ */
+data class FileMode(val mode: Mode, val truncate: Boolean, val removeClose: Boolean) {
+ enum class Mode(val value: UByte) {
+ READ(0u),
+ WRITE(1u),
+ READ_WRITE(2u),
+ EXECUTE(3u)
+ }
+
+ /**
+ * Turn the mode described by the [FileMode] fields into a mode byte.
+ */
+ fun toModeByte(): UByte {
+ var byte: UByte = 0u
+ byte = byte.or(this.mode.value)
+ if (truncate) {
+ byte = byte.or(0x10u)
+ }
+ if (removeClose) {
+ byte = byte.or(0x40u)
+ }
+
+ return byte
+ }
+} \ No newline at end of file