/* LibMemcached
+ * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/
* Copyright (C) 2006-2009 Brian Aker
* All rights reserved.
*
* 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)
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)
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.");
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 :)";
}
}
printf("\n");
- exit(0);
+ exit(EXIT_SUCCESS);
}
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);
}
}
void initialize_sockets(void)
{
/* Define the function for all platforms to avoid #ifdefs in each program */
-#if defined(WIN32) && WIN32
+#if defined(_WIN32)
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
fprintf(stderr, "Socket Initialization Error. Program aborted\n");
exit(EXIT_FAILURE);
}
-#endif
+#endif // #if defined(_WIN32)
}