From: Ian Jackson Date: Sat, 18 Jul 2020 23:18:56 +0000 (+0100) Subject: wip save X-Git-Tag: otter-0.2.0~1293 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=caf714338e582147092d73882ceab4a39ee481c5;p=otter.git wip save --- diff --git a/src/global.rs b/src/global.rs index 90888175..802398de 100644 --- a/src/global.rs +++ b/src/global.rs @@ -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); }