chiark / gitweb /
wip save
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 18 Jul 2020 23:18:56 +0000 (00:18 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 18 Jul 2020 23:18:56 +0000 (00:18 +0100)
src/global.rs

index 90888175e8feb28acea18f8898cd81713ec83a5c..802398de82cc4efbccb7d55a7713ef5a425c7b71 100644 (file)
@@ -156,16 +156,22 @@ impl InstanceGuard<'_> {
     for t in tokens.tr.drain() { global.remove(&t); }
   }
 
-  #[throws(OE)]
-  fn save_game_now(&mut self) {
-    let savefile : String =
-      iter::once("g-")
+  fn savefile(&self, prefix: &str, suffix: &str) -> String {
+    iter::once(prefix)
       .chain( utf8_percent_encode(&self.name,
                                   &percent_encoding::NON_ALPHANUMERIC) )
-      .chain( iter::once(".tmp") )
-      .collect();
+      .chain( iter::once(suffix) )
+      .collect()
+  }
+
+  #[throws(OE)]
+  fn save_game_now(&mut self) {
+    let savefile = self.savefile("g-","tmp");
     let mut f = BufWriter::new(fs::File::create(&savefile)?);
     rmp_serde::encode::write_named(&mut f, &self.ig.gs)?;
+    f.flush()?;
+    drop( f.into_inner().map_err(|e| { let e : io::Error = e.into(); e })? );
+    fs::rename(&savefile, &self.savefile("g-",""))?;
     eprintln!("xxx saved {} to {}!", self.name, &savefile);
   }