/** * 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 } }