summaryrefslogtreecommitdiff
path: root/src/devices
diff options
context:
space:
mode:
authorBen Bridle <bridle.benjamin@gmail.com>2024-04-24 16:11:31 +1200
committerBen Bridle <bridle.benjamin@gmail.com>2024-04-24 16:11:31 +1200
commit6acdb1f632bdcbc1332caecb9d5ecd3d0eff36ad (patch)
treec046fce65ed198a2cd431c907a87d38cb6399f52 /src/devices
parent34a933ceb404aa710c91cea496140b5fc2672bab (diff)
downloadbedrock-pc-6acdb1f632bdcbc1332caecb9d5ecd3d0eff36ad.zip
Flush file contents each frame and when closing the file
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/file.rs13
-rw-r--r--src/devices/file/buffered_file.rs10
-rw-r--r--src/devices/stream.rs6
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();
}
}