summaryrefslogtreecommitdiff
path: root/lib/src/main/kotlin/FileMode.kt
diff options
context:
space:
mode:
authorEdoardo La Greca2025-08-18 21:09:11 +0200
committerEdoardo La Greca2025-08-18 21:09:11 +0200
commit7341ead2aade10ea1b833e94275277658741883a (patch)
tree46495f24c54278d50aa0da5046822fbe502f3f14 /lib/src/main/kotlin/FileMode.kt
parent1e50cf9c224d03896f176f3718ff80ef1659e9c2 (diff)
switch to multi-module project structure
Diffstat (limited to 'lib/src/main/kotlin/FileMode.kt')
-rw-r--r--lib/src/main/kotlin/FileMode.kt32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/src/main/kotlin/FileMode.kt b/lib/src/main/kotlin/FileMode.kt
new file mode 100644
index 0000000..81712e6
--- /dev/null
+++ b/lib/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