X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Futilities.cc;h=ddc83eda82a8a42ec7bea163ec88ab5a9a6fa79c;hb=2569efffe16042f47dc5d2c34528a9ec22fc18b0;hp=97c3078377789040772bbe3b4176e9a19dc6d0a5;hpb=fd632c80c5d393253d394c9a8721339876602882;p=awesomized%2Flibmemcached diff --git a/clients/utilities.cc b/clients/utilities.cc index 97c30783..ddc83eda 100644 --- a/clients/utilities.cc +++ b/clients/utilities.cc @@ -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 #include + #include +#include +#include #include #include +#include +#include +#include +#include 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); } }