memacapable: warn about FLUSH
[awesomized/libmemcached] / src / bin / common / checks.hpp
index 470b4b4a9e1da73701e46abdc7d2da4adc7c2d87..9c963522390e078c6a001d2406a513657cda84af 100644 (file)
@@ -18,6 +18,8 @@
 #include "options.hpp"
 #include "libmemcached/common.h"
 
+#include <cerrno>
+#include <cstring>
 #include <fstream>
 
 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;
+}