1179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// Use of this source code is governed by a BSD-style license that can be 3179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org// found in the LICENSE file. See the AUTHORS file for names of contributors. 4179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 5fbd97aa4c5325eace57d24b89845b9581bac9324jorlow@chromium.org#include "leveldb/env.h" 6179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 7179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgnamespace leveldb { 8179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 9179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgEnv::~Env() { 10179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 11179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 12179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgSequentialFile::~SequentialFile() { 13179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 14179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 15179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgRandomAccessFile::~RandomAccessFile() { 16179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 17179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 18179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgWritableFile::~WritableFile() { 19179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 20179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 21f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.comLogger::~Logger() { 22f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com} 23f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com 24179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgFileLock::~FileLock() { 25179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 26179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 27f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.comvoid Log(Logger* info_log, const char* format, ...) { 28f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com if (info_log != NULL) { 29f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com va_list ap; 30f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com va_start(ap, format); 31f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com info_log->Logv(format, ap); 32f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com va_end(ap); 33f65a55c8d0744b95be29a65d06b59b22b012f37bgabor@google.com } 34179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 35179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 36e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.comstatic Status DoWriteStringToFile(Env* env, const Slice& data, 37e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com const std::string& fname, 38e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com bool should_sync) { 39179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org WritableFile* file; 40179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org Status s = env->NewWritableFile(fname, &file); 41179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org if (!s.ok()) { 42179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org return s; 43179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org } 44179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org s = file->Append(data); 45e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com if (s.ok() && should_sync) { 46e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com s = file->Sync(); 47e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com } 48179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org if (s.ok()) { 49179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org s = file->Close(); 50179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org } 51179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org delete file; // Will auto-close if we did not close above 52179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org if (!s.ok()) { 53179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org env->DeleteFile(fname); 54179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org } 55179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org return s; 56179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 57179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 58e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.comStatus WriteStringToFile(Env* env, const Slice& data, 59e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com const std::string& fname) { 60e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com return DoWriteStringToFile(env, data, fname, false); 61e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com} 62e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com 63e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.comStatus WriteStringToFileSync(Env* env, const Slice& data, 64e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com const std::string& fname) { 65e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com return DoWriteStringToFile(env, data, fname, true); 66e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com} 67e05bd5cade19e5de0f763f4f122eef9f35de3d9csanjay@google.com 68179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgStatus ReadFileToString(Env* env, const std::string& fname, std::string* data) { 69179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org data->clear(); 70179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org SequentialFile* file; 71179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org Status s = env->NewSequentialFile(fname, &file); 72179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org if (!s.ok()) { 73179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org return s; 74179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org } 75179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org static const int kBufferSize = 8192; 76179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org char* space = new char[kBufferSize]; 77179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org while (true) { 78179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org Slice fragment; 79179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org s = file->Read(kBufferSize, &fragment, space); 80179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org if (!s.ok()) { 81179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org break; 82179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org } 83179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org data->append(fragment.data(), fragment.size()); 84179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org if (fragment.empty()) { 85179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org break; 86179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org } 87179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org } 88179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org delete[] space; 89179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org delete file; 90179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org return s; 91179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 92179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 93179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.orgEnvWrapper::~EnvWrapper() { 94179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org} 95179be588c25dccaa963df9c9c104fc6229435483jorlow@chromium.org 9645b9940be332834440bd5299419f396e38085ebehans@chromium.org} // namespace leveldb 97