X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fbin%2Fmemcat.cc;h=3938bf134406b65384ca31d9157932dc55b6f74a;hb=26dd4e6e3d500ce8f8865db4071e2508e604864e;hp=9e2704af5b0aef0fbe11e6abf943745218c4c18a;hpb=8734a061ef5bafbbe46523a0729898008d479dbf;p=awesomized%2Flibmemcached diff --git a/src/bin/memcat.cc b/src/bin/memcat.cc index 9e2704af..3938bf13 100644 --- a/src/bin/memcat.cc +++ b/src/bin/memcat.cc @@ -1,6 +1,6 @@ /* +--------------------------------------------------------------------+ - | libmemcached - C/C++ Client Library for memcached | + | libmemcached-awesome - C/C++ Client Library for memcached | +--------------------------------------------------------------------+ | Redistribution and use in source and binary forms, with or without | | modification, are permitted under the terms of the BSD license. | @@ -9,7 +9,7 @@ | the terms online at: https://opensource.org/licenses/BSD-3-Clause | +--------------------------------------------------------------------+ | Copyright (c) 2006-2014 Brian Aker https://datadifferential.com/ | - | Copyright (c) 2020 Michael Wallner | + | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ | +--------------------------------------------------------------------+ */ @@ -37,12 +37,22 @@ memcached_return_t memcat(const client_options &opt, memcached_st *memc, const c *ref << "key: " << key << "\n"; } if (opt.isset("flags")) { - *ref << "flags: " << flags << "\n"; + if (verbose) { + *ref << "flags: "; + } + *ref << flags << "\n"; } if (verbose) { *ref << "value: "; } - ref->write(val, len) << std::endl; + + ref->write(val, len); + + if (verbose || !opt.isset("file")) { + *ref << std::endl; + } + + ref->flush(); } if (val) { @@ -52,13 +62,14 @@ memcached_return_t memcat(const client_options &opt, memcached_st *memc, const c } int main(int argc, char *argv[]) { - client_options opt{PROGRAM_NAME, PROGRAM_VERSION, PROGRAM_DESCRIPTION, "key [ key ... ]"}; + client_options opt{PROGRAM_NAME, PROGRAM_VERSION, PROGRAM_DESCRIPTION, "key [key ...]"}; for (const auto &def : opt.defaults) { opt.add(def); } opt.add("flags", 'F', no_argument, "Display key flags, too."); - opt.add("file", 'f', required_argument, "Output to file instead of standard output."); + opt.add("file", 'f', optional_argument, "Output to file instead of standard output." + "\n\t\t# NOTE: defaults to if no argument was provided."); char **argp = nullptr; if (!opt.parse(argc, argv, &argp)) { @@ -85,26 +96,18 @@ int main(int argc, char *argv[]) { exit(EXIT_FAILURE); } + auto file_flag = opt.isset("file"); + auto file = opt.argof("file"); auto exit_code = EXIT_SUCCESS; for (auto arg = argp; *arg; ++arg) { auto key = *arg; if (*key) { + if (!file && file_flag) { + file = key; + } std::ofstream fstream{}; - std::ostream *ostream = check_ostream(opt, opt.argof("file"), fstream); - - auto file = opt.argof("file"); - if (file && *file) { - fstream.open(file, std::ios::binary | std::ios::out); - if (!fstream.is_open()) { - exit_code = EXIT_FAILURE; - if (!opt.isset("quiet")) { - std::cerr << "Failed to open " << file << " for writing.\n"; - } - continue; - } - ostream = &fstream; - } + std::ostream *ostream = check_ostream(opt, file, fstream); if (!check_return(opt, memc, key, memcat(opt, &memc, key, ostream))) { exit_code = EXIT_FAILURE;