Feathercoin  0.5.0
P2P Digital Currency
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
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 
13 }
14 
16 }
17 
19 }
20 
22 }
23 
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 
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 
94 }
95 
96 } // namespace leveldb
Status WriteStringToFileSync(Env *env, const Slice &data, const std::string &fname)
Definition: env.cc:63
virtual ~SequentialFile()
Definition: env.cc:12
virtual ~Logger()
Definition: env.cc:21
Status WriteStringToFile(Env *env, const Slice &data, const std::string &fname)
Definition: env.cc:58
virtual ~FileLock()
Definition: env.cc:24
const char * data() const
Definition: slice.h:40
virtual ~WritableFile()
Definition: env.cc:18
void Log(Logger *info_log, const char *format,...)
Definition: env.cc:27
virtual ~EnvWrapper()
Definition: env.cc:93
bool empty() const
Definition: slice.h:46
virtual ~Env()
Definition: env.cc:9
virtual void Logv(const char *format, va_list ap)=0
virtual ~RandomAccessFile()
Definition: env.cc:15
size_t size() const
Definition: slice.h:43
virtual Status NewSequentialFile(const std::string &fname, SequentialFile **result)=0
virtual Status Read(size_t n, Slice *result, char *scratch)=0
bool ok() const
Definition: status.h:52
Status ReadFileToString(Env *env, const std::string &fname, std::string *data)
Definition: env.cc:68