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.
64 lines
1.5 KiB
64 lines
1.5 KiB
// Copyright (c) 2012 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 <stdio.h> |
|
#include "leveldb/dumpfile.h" |
|
#include "leveldb/env.h" |
|
#include "leveldb/status.h" |
|
|
|
namespace leveldb { |
|
namespace { |
|
|
|
class StdoutPrinter : public WritableFile { |
|
public: |
|
virtual Status Append(const Slice& data) { |
|
fwrite(data.data(), 1, data.size(), stdout); |
|
return Status::OK(); |
|
} |
|
virtual Status Close() { return Status::OK(); } |
|
virtual Status Flush() { return Status::OK(); } |
|
virtual Status Sync() { return Status::OK(); } |
|
}; |
|
|
|
bool HandleDumpCommand(Env* env, char** files, int num) { |
|
StdoutPrinter printer; |
|
bool ok = true; |
|
for (int i = 0; i < num; i++) { |
|
Status s = DumpFile(env, files[i], &printer); |
|
if (!s.ok()) { |
|
fprintf(stderr, "%s\n", s.ToString().c_str()); |
|
ok = false; |
|
} |
|
} |
|
return ok; |
|
} |
|
|
|
} // namespace |
|
} // namespace leveldb |
|
|
|
static void Usage() { |
|
fprintf( |
|
stderr, |
|
"Usage: leveldbutil command...\n" |
|
" dump files... -- dump contents of specified files\n" |
|
); |
|
} |
|
|
|
int main(int argc, char** argv) { |
|
leveldb::Env* env = leveldb::Env::Default(); |
|
bool ok = true; |
|
if (argc < 2) { |
|
Usage(); |
|
ok = false; |
|
} else { |
|
std::string command = argv[1]; |
|
if (command == "dump") { |
|
ok = leveldb::HandleDumpCommand(env, argv+2, argc-2); |
|
} else { |
|
Usage(); |
|
ok = false; |
|
} |
|
} |
|
return (ok ? 0 : 1); |
|
}
|
|
|