X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbin%2Fcommon%2Fchecks.hpp;fp=src%2Fbin%2Fcommon%2Fchecks.hpp;h=dc0ed92cb976d243d3318adbae9ae78945a23ae7;hb=f2d0ed355899d265edbcc7156dace706df2f160a;hp=470b4b4a9e1da73701e46abdc7d2da4adc7c2d87;hpb=2c5690e3e3384b98c1b4dc78c076ae9d59eb7d22;p=awesomized%2Flibmemcached diff --git a/src/bin/common/checks.hpp b/src/bin/common/checks.hpp index 470b4b4a..dc0ed92c 100644 --- a/src/bin/common/checks.hpp +++ b/src/bin/common/checks.hpp @@ -18,6 +18,8 @@ #include "options.hpp" #include "libmemcached/common.h" +#include +#include #include bool check_buffering(const client_options &opt, memcached_st &memc) { @@ -76,12 +78,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; +}