- // 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 <cstdio>
-
- #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(); }
- };
-
- 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()) {
- std::fprintf(stderr, "%s\n", s.ToString().c_str());
- ok = false;
- }
- }
- return ok;
- }
-
- } // namespace
- } // namespace leveldb
-
- static void Usage() {
- std::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);
- }
|