diff options
author | Ben Bridle <bridle.benjamin@gmail.com> | 2024-04-24 16:11:31 +1200 |
---|---|---|
committer | Ben Bridle <bridle.benjamin@gmail.com> | 2024-04-24 16:11:31 +1200 |
commit | 6acdb1f632bdcbc1332caecb9d5ecd3d0eff36ad (patch) | |
tree | c046fce65ed198a2cd431c907a87d38cb6399f52 /src/devices | |
parent | 34a933ceb404aa710c91cea496140b5fc2672bab (diff) | |
download | bedrock-pc-6acdb1f632bdcbc1332caecb9d5ecd3d0eff36ad.zip |
Flush file contents each frame and when closing the file
Diffstat (limited to 'src/devices')
-rw-r--r-- | src/devices/file.rs | 13 | ||||
-rw-r--r-- | src/devices/file/buffered_file.rs | 10 | ||||
-rw-r--r-- | src/devices/stream.rs | 6 |
3 files changed, 28 insertions, 1 deletions
diff --git a/src/devices/file.rs b/src/devices/file.rs index 163c10d..d35acf9 100644 --- a/src/devices/file.rs +++ b/src/devices/file.rs @@ -53,10 +53,17 @@ impl FileDevice { } } + pub fn flush_entry(&mut self) { + if let Some((Entry::File(buffered_file), _)) = &mut self.entry { + buffered_file.flush(); + } + } + pub fn close_entry(&mut self) { self.open_buffer.clear(); self.move_buffer.clear(); self.name_buffer.clear(); + self.flush_entry(); self.entry = None; self.new_pointer = 0; self.new_length = 0; @@ -255,3 +262,9 @@ impl FileDevice { } } } + +impl Drop for FileDevice { + fn drop(&mut self) { + self.close_entry(); + } +} diff --git a/src/devices/file/buffered_file.rs b/src/devices/file/buffered_file.rs index 091b5d9..04fefbd 100644 --- a/src/devices/file/buffered_file.rs +++ b/src/devices/file/buffered_file.rs @@ -36,6 +36,16 @@ impl BufferedFile { } } + pub fn flush(&mut self) { + if let AccessMode::Write(writer) = &mut self.file { + writer.flush().unwrap(); + } + } + + pub fn close(&mut self) { + self.file = AccessMode::None; + } + pub fn read_byte(&mut self) -> u8 { let mut buffer = [0u8; 1]; diff --git a/src/devices/stream.rs b/src/devices/stream.rs index 7f69a7a..532df58 100644 --- a/src/devices/stream.rs +++ b/src/devices/stream.rs @@ -25,6 +25,10 @@ impl StreamDevice { } } + pub fn flush_local(&mut self) { + self.stdout.flush().unwrap(); + } + pub fn read_queue_len(&self) -> usize { self.stdin.buffer().len() } @@ -44,6 +48,6 @@ impl StreamDevice { impl Drop for StreamDevice { fn drop(&mut self) { - self.stdout.flush().unwrap(); + self.flush_local(); } } |