X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fmemrm.c;h=2a79933af89a6a83af0d88b83907c2d9574a0ea4;hb=285c6e033a3739a1733b8729d91c7f649220461e;hp=e07654f3cad4a7968c5c90ec3fcf97f0dfffe0c4;hpb=113160884d25c401dc352cfab093b5b7b1a4fde0;p=awesomized%2Flibmemcached diff --git a/src/memrm.c b/src/memrm.c index e07654f3..2a79933a 100644 --- a/src/memrm.c +++ b/src/memrm.c @@ -2,12 +2,17 @@ #include #include #include +#include #include "client_options.h" #include "utilities.h" static int opt_verbose= 0; static time_t opt_expire= 0; static char *opt_servers= NULL; +static char *opt_hash= NULL; + +#define PROGRAM_NAME "memrm" +#define PROGRAM_DESCRIPTION "Erase a key or set of keys from a memcached cluster." /* Prototypes */ void options_parse(int argc, char *argv[]); @@ -21,11 +26,19 @@ int main(int argc, char *argv[]) options_parse(argc, argv); if (!opt_servers) - return 0; + { + char *temp; + + if ((temp= getenv("MEMCACHED_SERVERS"))) + opt_servers= strdup(temp); + else + exit(1); + } - memc= memcached_init(NULL); + memc= memcached_create(NULL); + process_hash_option(memc, opt_hash); - servers= parse_opt_servers(opt_servers); + servers= memcached_servers_parse(opt_servers); memcached_server_push(memc, servers); memcached_server_list_free(servers); @@ -37,16 +50,22 @@ int main(int argc, char *argv[]) if (rc != MEMCACHED_SUCCESS) { - fprintf(stderr, "memrm: %s: memcache error %s\n", + fprintf(stderr, "memrm: %s: memcache error %s", argv[optind], memcached_strerror(memc, rc)); + if (memc->cached_errno) + fprintf(stderr, " system error %s", strerror(memc->cached_errno)); + fprintf(stderr, "\n"); } optind++; } - memcached_deinit(memc); + memcached_free(memc); - free(opt_servers); + if (opt_servers) + free(opt_servers); + if (opt_hash) + free(opt_hash); return 0; } @@ -54,6 +73,11 @@ int main(int argc, char *argv[]) void options_parse(int argc, char *argv[]) { + memcached_programs_help_st help_options[]= + { + {0}, + }; + static struct option long_options[]= { {"version", no_argument, NULL, OPT_VERSION}, @@ -62,6 +86,7 @@ void options_parse(int argc, char *argv[]) {"debug", no_argument, &opt_verbose, OPT_DEBUG}, {"servers", required_argument, NULL, OPT_SERVERS}, {"expire", required_argument, NULL, OPT_EXPIRE}, + {"hash", required_argument, NULL, OPT_HASH}, {0, 0, 0, 0}, }; int option_index= 0; @@ -82,12 +107,10 @@ void options_parse(int argc, char *argv[]) opt_verbose = OPT_DEBUG; break; case OPT_VERSION: /* --version or -V */ - printf("memcache tools, memrm, v1.0\n"); - exit(0); + version_command(PROGRAM_NAME); break; case OPT_HELP: /* --help or -h */ - printf("useful help messages go here\n"); - exit(0); + help_command(PROGRAM_NAME, PROGRAM_DESCRIPTION, long_options, help_options); break; case OPT_SERVERS: /* --servers or -s */ opt_servers= strdup(optarg); @@ -95,6 +118,9 @@ void options_parse(int argc, char *argv[]) case OPT_EXPIRE: /* --expire */ opt_expire= (time_t)strtoll(optarg, (char **)NULL, 10); break; + case OPT_HASH: + opt_hash= strdup(optarg); + break; case '?': /* getopt_long already printed an error message. */ exit(1);