Branch data Line data Source code
# 1 : : // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
# 2 : : // Use of this source code is governed by a BSD-style license that can be
# 3 : : // found in the LICENSE file. See the AUTHORS file for names of contributors.
# 4 : :
# 5 : : #include "leveldb/env.h"
# 6 : :
# 7 : : namespace leveldb {
# 8 : :
# 9 : 355 : Env::~Env() = default;
# 10 : :
# 11 : 0 : Status Env::NewAppendableFile(const std::string& fname, WritableFile** result) {
# 12 : 0 : return Status::NotSupported("NewAppendableFile", fname);
# 13 : 0 : }
# 14 : :
# 15 : 4044 : SequentialFile::~SequentialFile() = default;
# 16 : :
# 17 : 1439 : RandomAccessFile::~RandomAccessFile() = default;
# 18 : :
# 19 : 7532 : WritableFile::~WritableFile() = default;
# 20 : :
# 21 : 1641 : Logger::~Logger() = default;
# 22 : :
# 23 : 1666 : FileLock::~FileLock() = default;
# 24 : :
# 25 : 5266 : void Log(Logger* info_log, const char* format, ...) {
# 26 [ + - ]: 5266 : if (info_log != nullptr) {
# 27 : 5266 : va_list ap;
# 28 : 5266 : va_start(ap, format);
# 29 : 5266 : info_log->Logv(format, ap);
# 30 : 5266 : va_end(ap);
# 31 : 5266 : }
# 32 : 5266 : }
# 33 : :
# 34 : : static Status DoWriteStringToFile(Env* env, const Slice& data,
# 35 : 2520 : const std::string& fname, bool should_sync) {
# 36 : 2520 : WritableFile* file;
# 37 : 2520 : Status s = env->NewWritableFile(fname, &file);
# 38 [ - + ]: 2520 : if (!s.ok()) {
# 39 : 0 : return s;
# 40 : 0 : }
# 41 : 2520 : s = file->Append(data);
# 42 [ + - ][ + - ]: 2520 : if (s.ok() && should_sync) {
# 43 : 2520 : s = file->Sync();
# 44 : 2520 : }
# 45 [ + - ]: 2520 : if (s.ok()) {
# 46 : 2520 : s = file->Close();
# 47 : 2520 : }
# 48 : 2520 : delete file; // Will auto-close if we did not close above
# 49 [ - + ]: 2520 : if (!s.ok()) {
# 50 : 0 : env->DeleteFile(fname);
# 51 : 0 : }
# 52 : 2520 : return s;
# 53 : 2520 : }
# 54 : :
# 55 : : Status WriteStringToFile(Env* env, const Slice& data,
# 56 : 0 : const std::string& fname) {
# 57 : 0 : return DoWriteStringToFile(env, data, fname, false);
# 58 : 0 : }
# 59 : :
# 60 : : Status WriteStringToFileSync(Env* env, const Slice& data,
# 61 : 2520 : const std::string& fname) {
# 62 : 2520 : return DoWriteStringToFile(env, data, fname, true);
# 63 : 2520 : }
# 64 : :
# 65 : 1641 : Status ReadFileToString(Env* env, const std::string& fname, std::string* data) {
# 66 : 1641 : data->clear();
# 67 : 1641 : SequentialFile* file;
# 68 : 1641 : Status s = env->NewSequentialFile(fname, &file);
# 69 [ - + ]: 1641 : if (!s.ok()) {
# 70 : 0 : return s;
# 71 : 0 : }
# 72 : 1641 : static const int kBufferSize = 8192;
# 73 : 1641 : char* space = new char[kBufferSize];
# 74 : 3282 : while (true) {
# 75 : 3282 : Slice fragment;
# 76 : 3282 : s = file->Read(kBufferSize, &fragment, space);
# 77 [ - + ]: 3282 : if (!s.ok()) {
# 78 : 0 : break;
# 79 : 0 : }
# 80 : 3282 : data->append(fragment.data(), fragment.size());
# 81 [ + + ]: 3282 : if (fragment.empty()) {
# 82 : 1641 : break;
# 83 : 1641 : }
# 84 : 3282 : }
# 85 : 1641 : delete[] space;
# 86 : 1641 : delete file;
# 87 : 1641 : return s;
# 88 : 1641 : }
# 89 : :
# 90 : 355 : EnvWrapper::~EnvWrapper() {}
# 91 : :
# 92 : : } // namespace leveldb
|