X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fbin%2Fmemcat.cc;h=b8e49486f2812b044a77ec854639a3597bc8e457;hb=fcb03482e2d61dfe66ebac4d198bba1b41dd954b;hp=56b5a46c9e9ee76bdc889beeb4a3a559d7b14cb4;hpb=2e9eb0803f1fc81bfe6c3e2dda0ed2cbe1aa6a76;p=awesomized%2Flibmemcached diff --git a/src/bin/memcat.cc b/src/bin/memcat.cc index 56b5a46c..b8e49486 100644 --- a/src/bin/memcat.cc +++ b/src/bin/memcat.cc @@ -20,28 +20,39 @@ #define PROGRAM_VERSION "1.1" #include "common/options.hpp" +#include "common/checks.hpp" #include #include -memcached_return_t memcat(const client_options &opt, memcached_st *memc, const char *key, std::ostream &ref) { +memcached_return_t memcat(const client_options &opt, memcached_st *memc, const char *key, std::ostream *ref) { memcached_return_t rc; uint32_t flags; size_t len; auto val = memcached_get(memc, key, strlen(key), &len, &flags, &rc); + auto verbose = opt.isset("verbose"); if (MEMCACHED_SUCCESS == rc) { - if (opt.isset("verbose")) { - ref << "key: " << key << "\n"; + if (verbose) { + *ref << "key: " << key << "\n"; } if (opt.isset("flags")) { - ref << "flags: " << flags << "\n"; + if (verbose) { + *ref << "flags: "; + } + *ref << flags << "\n"; + } + if (verbose) { + *ref << "value: "; } - if (opt.isset("verbose")) { - ref << "value: "; + + ref->write(val, len); + + if (verbose || !opt.isset("file")) { + *ref << std::endl; } - ref.write(val, len); - ref << std::endl; + + ref->flush(); } if (val) { @@ -51,9 +62,7 @@ memcached_return_t memcat(const client_options &opt, memcached_st *memc, const c } int main(int argc, char *argv[]) { - char **argp = nullptr; - memcached_st memc; - 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); @@ -61,6 +70,7 @@ int main(int argc, char *argv[]) { opt.add("flags", 'F', no_argument, "Display key flags, too."); opt.add("file", 'f', required_argument, "Output to file instead of standard output."); + char **argp = nullptr; if (!opt.parse(argc, argv, &argp)) { exit(EXIT_FAILURE); } @@ -70,10 +80,8 @@ int main(int argc, char *argv[]) { exit(EXIT_FAILURE); } - if (!memcached_create(&memc)) { - if (!opt.isset("quiet")) { - std::cerr << "Failed to initialize memcached client.\n"; - } + memcached_st memc; + if (!check_memcached(opt, memc)) { exit(EXIT_FAILURE); } @@ -82,10 +90,7 @@ int main(int argc, char *argv[]) { exit(EXIT_FAILURE); } - if (!*argp) { - if (!opt.isset("quiet")) { - std::cerr << "No key(s) provided.\n"; - } + if (!check_argp(opt, argp, "No key(s) provided.")) { memcached_free(&memc); exit(EXIT_FAILURE); } @@ -94,28 +99,11 @@ int main(int argc, char *argv[]) { for (auto arg = argp; *arg; ++arg) { auto key = *arg; if (*key) { - memcached_return_t rc; - auto file = opt.argof("file"); - if (file && *file) { - std::ofstream stream{file, std::ios::binary}; - rc = memcat(opt, &memc, key, stream); - } else { - rc = memcat(opt, &memc, key, std::cout); - } - if (MEMCACHED_SUCCESS != rc) { - exit_code = EXIT_FAILURE; + std::ofstream fstream{}; + std::ostream *ostream = check_ostream(opt, opt.argof("file"), fstream); - if (MEMCACHED_NOTFOUND == rc) { - if (opt.isset("verbose")) { - std::cerr << "not found: " << key << "\n"; - } - // continue; - } else { - if (!opt.isset("quiet")) { - std::cerr << memcached_last_error_message(&memc) << "\n"; - } - break; - } + if (!check_return(opt, memc, key, memcat(opt, &memc, key, ostream))) { + exit_code = EXIT_FAILURE; } } }