diff options
author | Sanjay Ghemawat <sanjay@google.com> | 2012-01-25 14:56:52 -0800 |
---|---|---|
committer | Sanjay Ghemawat <sanjay@google.com> | 2012-01-25 14:56:52 -0800 |
commit | 3c8be108bfb5fbd7d51f824199627e757279f79e (patch) | |
tree | fa5fbe9ca451a385cf615f772cbcfeeb7c90e87a /util/env.cc | |
parent | c8c5866a86c8d4a3e80d8708d14a06776fb683d1 (diff) | |
download | leveldb-3c8be108bfb5fbd7d51f824199627e757279f79e.tar.gz |
fixed issues 66 (leaking files on disk error) and 68 (no sync of CURRENT file)
Diffstat (limited to 'util/env.cc')
-rw-r--r-- | util/env.cc | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/util/env.cc b/util/env.cc index 594811b..c2600e9 100644 --- a/util/env.cc +++ b/util/env.cc @@ -33,14 +33,18 @@ void Log(Logger* info_log, const char* format, ...) { } } -Status WriteStringToFile(Env* env, const Slice& data, - const std::string& fname) { +static Status DoWriteStringToFile(Env* env, const Slice& data, + const std::string& fname, + bool should_sync) { WritableFile* file; Status s = env->NewWritableFile(fname, &file); if (!s.ok()) { return s; } s = file->Append(data); + if (s.ok() && should_sync) { + s = file->Sync(); + } if (s.ok()) { s = file->Close(); } @@ -51,6 +55,16 @@ Status WriteStringToFile(Env* env, const Slice& data, return s; } +Status WriteStringToFile(Env* env, const Slice& data, + const std::string& fname) { + return DoWriteStringToFile(env, data, fname, false); +} + +Status WriteStringToFileSync(Env* env, const Slice& data, + const std::string& fname) { + return DoWriteStringToFile(env, data, fname, true); +} + Status ReadFileToString(Env* env, const std::string& fname, std::string* data) { data->clear(); SequentialFile* file; |