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 Env::~Env() { 10 } 11 12 SequentialFile::~SequentialFile() { 13 } 14 15 RandomAccessFile::~RandomAccessFile() { 16 } 17 18 WritableFile::~WritableFile() { 19 } 20 21 Logger::~Logger() { 22 } 23 24 FileLock::~FileLock() { 25 } 26 27 void Log(Logger* info_log, const char* format, ...) { 28 if (info_log != NULL) { 29 va_list ap; 30 va_start(ap, format); 31 info_log->Logv(format, ap); 32 va_end(ap); 33 } 34 } 35 36 static Status DoWriteStringToFile(Env* env, const Slice& data, 37 const std::string& fname, 38 bool should_sync) { 39 WritableFile* file; 40 Status s = env->NewWritableFile(fname, &file); 41 if (!s.ok()) { 42 return s; 43 } 44 s = file->Append(data); 45 if (s.ok() && should_sync) { 46 s = file->Sync(); 47 } 48 if (s.ok()) { 49 s = file->Close(); 50 } 51 delete file; // Will auto-close if we did not close above 52 if (!s.ok()) { 53 env->DeleteFile(fname); 54 } 55 return s; 56 } 57 58 Status WriteStringToFile(Env* env, const Slice& data, 59 const std::string& fname) { 60 return DoWriteStringToFile(env, data, fname, false); 61 } 62 63 Status WriteStringToFileSync(Env* env, const Slice& data, 64 const std::string& fname) { 65 return DoWriteStringToFile(env, data, fname, true); 66 } 67 68 Status ReadFileToString(Env* env, const std::string& fname, std::string* data) { 69 data->clear(); 70 SequentialFile* file; 71 Status s = env->NewSequentialFile(fname, &file); 72 if (!s.ok()) { 73 return s; 74 } 75 static const int kBufferSize = 8192; 76 char* space = new char[kBufferSize]; 77 while (true) { 78 Slice fragment; 79 s = file->Read(kBufferSize, &fragment, space); 80 if (!s.ok()) { 81 break; 82 } 83 data->append(fragment.data(), fragment.size()); 84 if (fragment.empty()) { 85 break; 86 } 87 } 88 delete[] space; 89 delete file; 90 return s; 91 } 92 93 EnvWrapper::~EnvWrapper() { 94 } 95 96 } // namespace leveldb 97