From f4a533846d31a50bcf3be5f617cc220387dd4e68 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 22 Jul 2009 12:58:49 +0000 Subject: [PATCH] 2009-07-22 Tatsuhiro Tsujikawa Rewritten Signature::save() * src/Signature.cc --- ChangeLog | 5 +++++ src/Signature.cc | 19 ++++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 40da4e48..56aa2de6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-07-22 Tatsuhiro Tsujikawa + + Rewritten Signature::save() + * src/Signature.cc + 2009-07-22 Tatsuhiro Tsujikawa Rewritten stream error handling diff --git a/src/Signature.cc b/src/Signature.cc index 12d538f9..59618c1d 100644 --- a/src/Signature.cc +++ b/src/Signature.cc @@ -64,15 +64,20 @@ bool Signature::save(const std::string& filepath) const if(File(filepath).exists()) { return false; } - std::ofstream out(filepath.c_str(), std::ios::binary); - try { - out.exceptions(std::ios::failbit); + std::string tempFilepath = filepath; + tempFilepath += "__temp"; + { + std::ofstream out(tempFilepath.c_str(), std::ios::binary); + if(!out) { + return false; + } out << _body; - out.close(); - return true; - } catch(const std::ios::failure& exception) { - return false; + out.flush(); + if(!out) { + return false; + } } + return File(tempFilepath).renameTo(filepath); } } // namespace aria2