X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fbin%2Fcommon%2Fchecks.hpp;h=a78a3e86957d6338cfd2d63e4ef3cfd5b5d089c8;hb=refs%2Fheads%2Fv1.x;hp=470b4b4a9e1da73701e46abdc7d2da4adc7c2d87;hpb=2c5690e3e3384b98c1b4dc78c076ae9d59eb7d22;p=awesomized%2Flibmemcached diff --git a/src/bin/common/checks.hpp b/src/bin/common/checks.hpp index 470b4b4a..a78a3e86 100644 --- a/src/bin/common/checks.hpp +++ b/src/bin/common/checks.hpp @@ -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/ | +--------------------------------------------------------------------+ */ @@ -18,6 +18,8 @@ #include "options.hpp" #include "libmemcached/common.h" +#include +#include #include bool check_buffering(const client_options &opt, memcached_st &memc) { @@ -52,6 +54,22 @@ bool check_memcached(const client_options &opt, memcached_st &memc) { return true; } +bool check_return(const client_options &opt, memcached_st &memc, memcached_return_t rc) { + if (!memcached_success(rc)) { + if (!opt.isset("quiet")) { + if (!memcached_fatal(rc)) { + if (opt.isset("verbose")) { + std::cerr << "Failed: " << memcached_strerror(&memc, rc) << "\n";; + } + } else { + std::cerr << "Fatal error: " << memcached_last_error_message(&memc) << "\n"; + } + } + return false; + } + return true; +} + bool check_return(const client_options &opt, memcached_st &memc, const char *key, memcached_return_t rc) { if (!memcached_success(rc)) { @@ -76,12 +94,32 @@ std::ostream *check_ostream(const client_options &opt, const char *file, std::of if (opt.isset("debug")) { std::cerr << "Opening '" << file << "' for writing.\n"; } - stream.open(file); + errno = 0; + stream.open(file, std::ios::binary | std::ios::out); if (stream.is_open()) { return &stream; } else if (!opt.isset("quiet")) { - std::cerr << "Failed to open '" << file << "' for writing.\n"; + std::cerr << "Failed to open '" << file << "' for writing: " << strerror(errno) << ".\n"; } } return &std::cout; } + +std::istream *check_istream(const client_options &opt, const char *file, std::ifstream &stream) { + if (file && *file) { + if (file[0] != '-' || file[1] != 0) { + if (opt.isset("debug")) { + std::cerr << "Opening '" << file << "' for reading.\n"; + } + errno = 0; + stream.open(file, std::ios::binary | std::ios::in); + if (stream.is_open()) { + return &stream; + } else if (!opt.isset("quiet")) { + std::cerr << "Failed to open '" << file << "' for reading: " << strerror(errno) << ".\n"; + } + return nullptr; + } + } + return &std::cin; +}