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