#include "auth/KeyRing.h"
#include "auth/cephx/CephxKeyServer.h"
#include "global/global_init.h"
+#include "include/scope_guard.h"
#include "include/stringify.h"
#include "mgr/mgr_commands.h"
#include "mon/AuthMonitor.h"
namespace po = boost::program_options;
+using namespace std;
+
class TraceIter {
int fd;
unsigned idx;
}
}
+ auto close_store = make_scope_guard([&] {
+ st.close();
+ });
+
if (cmd == "dump-keys") {
KeyValueDB::WholeSpaceIterator iter = st.get_iterator();
while (iter->valid()) {
int r = parse_cmd_args(&op_desc, &hidden_op_desc, &op_positional,
subcmds, &op_vm);
if (r < 0) {
- err = -r;
- goto done;
+ return -r;
}
if (op_vm.count("help") || map_type.empty()) {
usage(argv[0], op_desc);
- err = 0;
- goto done;
+ return 0;
}
if (v == 0) {
if (fd < 0) {
std::cerr << "error opening output file: "
<< cpp_strerror(errno) << std::endl;
- err = EINVAL;
- goto done;
+ return EINVAL;
}
}
- BOOST_SCOPE_EXIT((&r) (&fd) (&outpath)) {
+ auto close_fd = make_scope_guard([&] {
::close(fd);
if (r < 0 && fd != STDOUT_FILENO) {
::remove(outpath.c_str());
}
- } BOOST_SCOPE_EXIT_END
+ });
bufferlist bl;
r = 0;
}
if (r < 0) {
std::cerr << "Error getting map: " << cpp_strerror(r) << std::endl;
- err = EINVAL;
- goto done;
+ return EINVAL;
}
if (op_vm.count("readable")) {
int r = parse_cmd_args(&op_desc, NULL, &op_positional,
subcmds, &op_vm);
if (r < 0) {
- err = -r;
- goto done;
+ return -r;
}
if (op_vm.count("help") || map_type.empty()) {
usage(argv[0], op_desc);
- err = 0;
- goto done;
+ return 0;
}
unsigned int v_first = 0;
int r = parse_cmd_args(&op_desc, NULL, NULL,
subcmds, &op_vm);
if (r < 0) {
- err = -r;
- goto done;
+ return -r;
}
if (op_vm.count("help")) {
usage(argv[0], op_desc);
- err = 0;
- goto done;
+ return 0;
}
if (dstart > dstop) {
std::cerr << "error: 'start' version (value: " << dstart << ") "
<< " is greater than 'end' version (value: " << dstop << ")"
<< std::endl;
- err = EINVAL;
- goto done;
+ return EINVAL;
}
version_t v = dstart;
int r = parse_cmd_args(&op_desc, &hidden_op_desc, &op_positional,
subcmds, &op_vm);
if (r < 0) {
- err = -r;
- goto done;
+ return -r;
}
if (op_vm.count("help")) {
usage(argv[0], op_desc);
- err = 0;
- goto done;
+ return 0;
}
if (outpath.empty()) {
usage(argv[0], op_desc);
- err = EINVAL;
- goto done;
+ return EINVAL;
}
if (dstart > dstop) {
std::cerr << "error: 'start' version (value: " << dstart << ") "
<< " is greater than 'stop' version (value: " << dstop << ")"
<< std::endl;
- err = EINVAL;
- goto done;
+ return EINVAL;
}
TraceIter iter(outpath.c_str());
po::notify(op_vm);
} catch (po::error &e) {
std::cerr << "error: " << e.what() << std::endl;
- err = EINVAL;
- goto done;
+ return EINVAL;
}
if (op_vm.count("help")) {
usage(argv[0], op_desc);
- err = 0;
- goto done;
+ return 0;
}
if (inpath.empty()) {
usage(argv[0], op_desc);
- err = EINVAL;
- goto done;
+ return EINVAL;
}
unsigned num = 0;
po::notify(op_vm);
} catch (po::error &e) {
std::cerr << "error: " << e.what() << std::endl;
- err = EINVAL;
- goto done;
+ return EINVAL;
}
if (op_vm.count("help")) {
usage(argv[0], op_desc);
- err = 0;
- goto done;
+ return 0;
}
unsigned num = 0;
} else if (cmd == "store-copy") {
if (subcmds.size() < 1 || subcmds[0].empty()) {
usage(argv[0], desc);
- err = EINVAL;
- goto done;
+ return EINVAL;
}
string out_path = subcmds[0];
int r = out_store.create_and_open(ss);
if (r < 0) {
std::cerr << ss.str() << std::endl;
- goto done;
+ return err;
}
}
} else {
std::cerr << "Unrecognized command: " << cmd << std::endl;
usage(argv[0], desc);
- goto done;
+ return err;
}
-
- done:
- st.close();
- return err;
}