Fix all include location, and drop versions of the library that were never shipped.
[awesomized/libmemcached] / clients / utilities.cc
index 97c3078377789040772bbe3b4176e9a19dc6d0a5..ddc83eda82a8a42ec7bea163ec88ab5a9a6fa79c 100644 (file)
@@ -1,4 +1,5 @@
 /* LibMemcached
+ * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/
  * Copyright (C) 2006-2009 Brian Aker
  * All rights reserved.
  *
@@ -8,12 +9,19 @@
  * Summary:
  *
  */
-#include "config.h"
+#include <config.h>
 
 #include <clients/utilities.h>
+
 #include <cstdio>
+#include <cassert>
+#include <cstdlib>
 #include <cstring>
 #include <ctype.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
 
 
 long int timedif(struct timeval a, struct timeval b)
@@ -30,9 +38,41 @@ long int timedif(struct timeval a, struct timeval b)
 void version_command(const char *command_name)
 {
   printf("%s v%u.%u\n", command_name, 1U, 0U);
-  exit(0);
+  exit(EXIT_SUCCESS);
+}
+
+void close_stdio(void)
+{
+  int fd;
+  if ((fd = open("/dev/null", O_RDWR, 0)) < 0)
+  {
+    return;
+  }
+  else
+  {
+    if (dup2(fd, STDIN_FILENO) < 0)
+    {
+      return;
+    }
+
+    if (dup2(fd, STDOUT_FILENO) < 0)
+    {
+      return;
+    }
+
+    if (dup2(fd, STDERR_FILENO) < 0)
+    {
+      return;
+    }
+
+    if (fd > STDERR_FILENO)
+    {
+      close(fd);
+    }
+  }
 }
 
+
 static const char *lookup_help(memcached_options option)
 {
   switch (option)
@@ -41,6 +81,7 @@ static const char *lookup_help(memcached_options option)
   case OPT_VERSION: return("Display the version of the application and then exit.");
   case OPT_HELP: return("Display this message and then exit.");
   case OPT_VERBOSE: return("Give more details on the progression of the application.");
+  case OPT_QUIET: return("stderr and stdin will be closed at application startup.");
   case OPT_DEBUG: return("Provide output only useful for debugging.");
   case OPT_FLAG: return("Provide flag information for storage operation.");
   case OPT_EXPIRE: return("Set the expire option for the object.");
@@ -58,14 +99,17 @@ static const char *lookup_help(memcached_options option)
   case OPT_BINARY: return("Switch to binary protocol.");
   case OPT_ANALYZE: return("Analyze the provided servers.");
   case OPT_UDP: return("Use UDP protocol when communicating with server.");
+  case OPT_BUFFER: return("Enable request buffering.");
   case OPT_USERNAME: return "Username to use for SASL authentication";
   case OPT_PASSWD: return "Password to use for SASL authentication";
   case OPT_FILE: return "Path to file in which to save result";
   case OPT_STAT_ARGS: return "Argument for statistics";
-  default: WATCHPOINT_ASSERT(0);
+  case OPT_SERVER_VERSION: return "Memcached daemon software version";
+  default:
+                      break;
   };
 
-  WATCHPOINT_ASSERT(0);
+  assert(0);
   return "forgot to document this function :)";
 }
 
@@ -91,7 +135,7 @@ void help_command(const char *command_name, const char *description,
   }
 
   printf("\n");
-  exit(0);
+  exit(EXIT_SUCCESS);
 }
 
 void process_hash_option(memcached_st *memc, char *opt_hash)
@@ -104,26 +148,36 @@ void process_hash_option(memcached_st *memc, char *opt_hash)
 
   set= MEMCACHED_HASH_DEFAULT; /* Just here to solve warning */
   if (!strcasecmp(opt_hash, "CRC"))
+  {
     set= MEMCACHED_HASH_CRC;
+  }
   else if (!strcasecmp(opt_hash, "FNV1_64"))
+  {
     set= MEMCACHED_HASH_FNV1_64;
+  }
   else if (!strcasecmp(opt_hash, "FNV1A_64"))
+  {
     set= MEMCACHED_HASH_FNV1A_64;
+  }
   else if (!strcasecmp(opt_hash, "FNV1_32"))
+  {
     set= MEMCACHED_HASH_FNV1_32;
+  }
   else if (!strcasecmp(opt_hash, "FNV1A_32"))
+  {
     set= MEMCACHED_HASH_FNV1A_32;
+  }
   else
   {
     fprintf(stderr, "hash: type not recognized %s\n", opt_hash);
-    exit(1);
+    exit(EXIT_FAILURE);
   }
 
   rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, set);
   if (rc != MEMCACHED_SUCCESS)
   {
     fprintf(stderr, "hash: memcache error %s\n", memcached_strerror(memc, rc));
-    exit(1);
+    exit(EXIT_FAILURE);
   }
 }