Update all config.h usage.
[awesomized/libmemcached] / clients / utilities.cc
index ca109adcfa66bd1229e0dbaa9ee0640356451d1d..5f5958e2a193dbe8e15fe161e2a32c10067d1e38 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 <mem_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,121 +148,43 @@ 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);
-  }
-}
-
-#ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
-static char *username;
-static char *passwd;
-
-static int get_username(void *context, int id, const char **result, unsigned int *len)
-{
-  (void)context;
-  if (!result || (id != SASL_CB_USER && id != SASL_CB_AUTHNAME))
-    return SASL_BADPARAM;
-
-  *result= username;
-  if (len)
-     *len= (username == NULL) ? 0 : (unsigned int)strlen(username);
-
-  return SASL_OK;
-}
-
-static int get_password(sasl_conn_t *conn, void *context, int id,
-                        sasl_secret_t **psecret)
-{
-  (void)context;
-  static sasl_secret_t* ptr;
-
-  if (!conn || ! psecret || id != SASL_CB_PASS)
-    return SASL_BADPARAM;
-
-  if (passwd == NULL)
-  {
-     *psecret= NULL;
-     return SASL_OK;
-  }
-
-  size_t len= strlen(passwd);
-  ptr= (sasl_secret_t *)malloc(sizeof(sasl_secret_t) + len +1);
-  if (not ptr)
-    return SASL_NOMEM;
-
-  ptr->len= len;
-  memcpy(ptr->data, passwd, len);
-  ptr->data[len]= 0;
-
-  *psecret= ptr;
-  return SASL_OK;
-}
-
-typedef int (*local_sasl_fn)(void);
-
-/* callbacks we support */
-static sasl_callback_t sasl_callbacks[] = {
-  { SASL_CB_USER, (local_sasl_fn)get_username, NULL },
-  { SASL_CB_AUTHNAME, (local_sasl_fn)get_username, NULL },
-  { SASL_CB_PASS, (local_sasl_fn)get_password, NULL },
-  { SASL_CB_LIST_END, NULL, NULL }
-};
-#endif
-
-bool initialize_sasl(memcached_st *memc, char *user, char *password)
-{
-#ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
-  if (user != NULL && password != NULL)
-  {
-    username= user;
-    passwd= password;
-
-    if (sasl_client_init(NULL) != SASL_OK)
-    {
-      fprintf(stderr, "Failed to initialize sasl library!\n");
-      return false;
-    }
-    memcached_set_sasl_callbacks(memc, sasl_callbacks);
+    exit(EXIT_FAILURE);
   }
-#else
-  (void)memc;
-  (void)user;
-  (void)password;
-#endif
-
-  return true;
-}
-
-void shutdown_sasl(void)
-{
-#ifdef LIBMEMCACHED_WITH_SASL_SUPPORT
-  if (username != NULL || passwd != NULL)
-    sasl_done();
-#endif
 }
 
 void initialize_sockets(void)
 {
   /* Define the function for all platforms to avoid #ifdefs in each program */
-#ifdef WIN32
+#if defined(WIN32) && WIN32
   WSADATA wsaData;
   if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
   {