1*9507f98cSAndroid Build Coastguard Worker // Copyright (c) 2012 The LevelDB Authors. All rights reserved.
2*9507f98cSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*9507f98cSAndroid Build Coastguard Worker // found in the LICENSE file. See the AUTHORS file for names of contributors.
4*9507f98cSAndroid Build Coastguard Worker
5*9507f98cSAndroid Build Coastguard Worker #include <cstdio>
6*9507f98cSAndroid Build Coastguard Worker
7*9507f98cSAndroid Build Coastguard Worker #include "leveldb/dumpfile.h"
8*9507f98cSAndroid Build Coastguard Worker #include "leveldb/env.h"
9*9507f98cSAndroid Build Coastguard Worker #include "leveldb/status.h"
10*9507f98cSAndroid Build Coastguard Worker
11*9507f98cSAndroid Build Coastguard Worker namespace leveldb {
12*9507f98cSAndroid Build Coastguard Worker namespace {
13*9507f98cSAndroid Build Coastguard Worker
14*9507f98cSAndroid Build Coastguard Worker class StdoutPrinter : public WritableFile {
15*9507f98cSAndroid Build Coastguard Worker public:
Append(const Slice & data)16*9507f98cSAndroid Build Coastguard Worker Status Append(const Slice& data) override {
17*9507f98cSAndroid Build Coastguard Worker fwrite(data.data(), 1, data.size(), stdout);
18*9507f98cSAndroid Build Coastguard Worker return Status::OK();
19*9507f98cSAndroid Build Coastguard Worker }
Close()20*9507f98cSAndroid Build Coastguard Worker Status Close() override { return Status::OK(); }
Flush()21*9507f98cSAndroid Build Coastguard Worker Status Flush() override { return Status::OK(); }
Sync()22*9507f98cSAndroid Build Coastguard Worker Status Sync() override { return Status::OK(); }
23*9507f98cSAndroid Build Coastguard Worker };
24*9507f98cSAndroid Build Coastguard Worker
HandleDumpCommand(Env * env,char ** files,int num)25*9507f98cSAndroid Build Coastguard Worker bool HandleDumpCommand(Env* env, char** files, int num) {
26*9507f98cSAndroid Build Coastguard Worker StdoutPrinter printer;
27*9507f98cSAndroid Build Coastguard Worker bool ok = true;
28*9507f98cSAndroid Build Coastguard Worker for (int i = 0; i < num; i++) {
29*9507f98cSAndroid Build Coastguard Worker Status s = DumpFile(env, files[i], &printer);
30*9507f98cSAndroid Build Coastguard Worker if (!s.ok()) {
31*9507f98cSAndroid Build Coastguard Worker std::fprintf(stderr, "%s\n", s.ToString().c_str());
32*9507f98cSAndroid Build Coastguard Worker ok = false;
33*9507f98cSAndroid Build Coastguard Worker }
34*9507f98cSAndroid Build Coastguard Worker }
35*9507f98cSAndroid Build Coastguard Worker return ok;
36*9507f98cSAndroid Build Coastguard Worker }
37*9507f98cSAndroid Build Coastguard Worker
38*9507f98cSAndroid Build Coastguard Worker } // namespace
39*9507f98cSAndroid Build Coastguard Worker } // namespace leveldb
40*9507f98cSAndroid Build Coastguard Worker
Usage()41*9507f98cSAndroid Build Coastguard Worker static void Usage() {
42*9507f98cSAndroid Build Coastguard Worker std::fprintf(
43*9507f98cSAndroid Build Coastguard Worker stderr,
44*9507f98cSAndroid Build Coastguard Worker "Usage: leveldbutil command...\n"
45*9507f98cSAndroid Build Coastguard Worker " dump files... -- dump contents of specified files\n");
46*9507f98cSAndroid Build Coastguard Worker }
47*9507f98cSAndroid Build Coastguard Worker
main(int argc,char ** argv)48*9507f98cSAndroid Build Coastguard Worker int main(int argc, char** argv) {
49*9507f98cSAndroid Build Coastguard Worker leveldb::Env* env = leveldb::Env::Default();
50*9507f98cSAndroid Build Coastguard Worker bool ok = true;
51*9507f98cSAndroid Build Coastguard Worker if (argc < 2) {
52*9507f98cSAndroid Build Coastguard Worker Usage();
53*9507f98cSAndroid Build Coastguard Worker ok = false;
54*9507f98cSAndroid Build Coastguard Worker } else {
55*9507f98cSAndroid Build Coastguard Worker std::string command = argv[1];
56*9507f98cSAndroid Build Coastguard Worker if (command == "dump") {
57*9507f98cSAndroid Build Coastguard Worker ok = leveldb::HandleDumpCommand(env, argv + 2, argc - 2);
58*9507f98cSAndroid Build Coastguard Worker } else {
59*9507f98cSAndroid Build Coastguard Worker Usage();
60*9507f98cSAndroid Build Coastguard Worker ok = false;
61*9507f98cSAndroid Build Coastguard Worker }
62*9507f98cSAndroid Build Coastguard Worker }
63*9507f98cSAndroid Build Coastguard Worker return (ok ? 0 : 1);
64*9507f98cSAndroid Build Coastguard Worker }
65