You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.1 KiB
96 lines
2.1 KiB
// Copyright (c) 2011 The LevelDB Authors. All rights reserved. |
|
// Use of this source code is governed by a BSD-style license that can be |
|
// found in the LICENSE file. See the AUTHORS file for names of contributors. |
|
|
|
#include "leveldb/env.h" |
|
|
|
namespace leveldb { |
|
|
|
Env::~Env() { |
|
} |
|
|
|
SequentialFile::~SequentialFile() { |
|
} |
|
|
|
RandomAccessFile::~RandomAccessFile() { |
|
} |
|
|
|
WritableFile::~WritableFile() { |
|
} |
|
|
|
Logger::~Logger() { |
|
} |
|
|
|
FileLock::~FileLock() { |
|
} |
|
|
|
void Log(Logger* info_log, const char* format, ...) { |
|
if (info_log != NULL) { |
|
va_list ap; |
|
va_start(ap, format); |
|
info_log->Logv(format, ap); |
|
va_end(ap); |
|
} |
|
} |
|
|
|
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(); |
|
} |
|
delete file; // Will auto-close if we did not close above |
|
if (!s.ok()) { |
|
env->DeleteFile(fname); |
|
} |
|
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; |
|
Status s = env->NewSequentialFile(fname, &file); |
|
if (!s.ok()) { |
|
return s; |
|
} |
|
static const int kBufferSize = 8192; |
|
char* space = new char[kBufferSize]; |
|
while (true) { |
|
Slice fragment; |
|
s = file->Read(kBufferSize, &fragment, space); |
|
if (!s.ok()) { |
|
break; |
|
} |
|
data->append(fragment.data(), fragment.size()); |
|
if (fragment.empty()) { |
|
break; |
|
} |
|
} |
|
delete[] space; |
|
delete file; |
|
return s; |
|
} |
|
|
|
EnvWrapper::~EnvWrapper() { |
|
} |
|
|
|
} // namespace leveldb
|
|
|