/*
+--------------------------------------------------------------------+
- | 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. |
| 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 <mike@php.net> |
+ | Copyright (c) 2020-2021 Michael Wallner https://awesome.co/ |
+--------------------------------------------------------------------+
*/
*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) {
}
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 <key> if no argument was provided.");
char **argp = nullptr;
if (!opt.parse(argc, argv, &argp)) {
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;