浏览代码

2009-07-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

	Rewritten Signature::save()
	* src/Signature.cc
Tatsuhiro Tsujikawa 16 年之前
父节点
当前提交
f4a533846d
共有 2 个文件被更改,包括 17 次插入7 次删除
  1. 5 0
      ChangeLog
  2. 12 7
      src/Signature.cc

+ 5 - 0
ChangeLog

@@ -1,3 +1,8 @@
+2009-07-22  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
+
+	Rewritten Signature::save()
+	* src/Signature.cc
+
 2009-07-22  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Rewritten stream error handling

+ 12 - 7
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