diff options
Diffstat (limited to 'src/main/kotlin/FileMode.kt')
-rw-r--r-- | src/main/kotlin/FileMode.kt | 32 |
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 |