git / moonbite-core / src/leveldb/db/leveldbutil.cc · raw

// 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:  Status Append(const Slice& data) override {    fwrite(data.data(), 1, data.size(), stdout);    return Status::OK();  }  Status Close() override { return Status::OK(); }  Status Flush() override { return Status::OK(); }  Status Sync() override { return Status::OK(); }  std::string GetName() const override { return "[stdout]"; }};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 leveldbstatic 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);}