cpack: NSIS
[awesomized/libmemcached] / src / bin / memerror.cc
index 208e013dd6a0d3b915865fcbea8af7abc25b1f04..3948ff3e79d074db5d7c35941b13c2506a7f73a4 100644 (file)
@@ -20,6 +20,7 @@
 #define PROGRAM_VERSION     "1.1"
 
 #include "common/options.hpp"
+#include "common/checks.hpp"
 
 int main(int argc, char *argv[]) {
   client_options opt{PROGRAM_NAME, PROGRAM_VERSION, PROGRAM_DESCRIPTION, "code [code ...]"};
@@ -30,6 +31,7 @@ int main(int argc, char *argv[]) {
     case 'V': // --version
     case 'v': // --verbose
     case 'd': // --debug
+    case 'q': // --quiet
       opt.add(def);
       break;
     default:
@@ -42,24 +44,30 @@ int main(int argc, char *argv[]) {
     exit(EXIT_FAILURE);
   }
 
-  opt.apply(nullptr);
+  if (!opt.apply(nullptr)) {
+    exit(EXIT_FAILURE);
+  }
 
-  if (!*argp) {
-    std::cerr << "No error codes provided.\n";
+  if (!check_argp(opt, argp, "No error code(s) provided.")) {
     exit(EXIT_FAILURE);
   }
 
+  auto exit_code = EXIT_SUCCESS;
   for (auto arg = argp; *arg; ++arg) {
     auto code = std::stoul(*arg);
     auto rc = static_cast<memcached_return_t>(code);
 
     if (opt.isset("verbose")) {
       std::cout << "code: " << code << "\n";
-      std::cout << "name: " << memcached_strerror(nullptr, rc) << "\n";
+      std::cout << "name: ";
+    }
+    if (rc >= MEMCACHED_MAXIMUM_RETURN) {
+      exit_code = EXIT_FAILURE;
+      std::cerr << memcached_strerror(nullptr, rc) << std::endl;
     } else {
-      std::cout << memcached_strerror(nullptr, rc) << "\n";
+      std::cout << memcached_strerror(nullptr, rc) << std::endl;
     }
   }
 
-  exit(EXIT_SUCCESS);
+  exit(exit_code);
 }