X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fmemcat.cc;h=ef2877810d92de7ef9fd6f9c04a70c52ab0321b6;hb=2569efffe16042f47dc5d2c34528a9ec22fc18b0;hp=12df34799a160b16c066999c4e8937d915fd427f;hpb=67456d74f5bd4f354a360d70da503dc58cbe5971;p=awesomized%2Flibmemcached diff --git a/clients/memcat.cc b/clients/memcat.cc index 12df3479..ef287781 100644 --- a/clients/memcat.cc +++ b/clients/memcat.cc @@ -1,4 +1,5 @@ /* LibMemcached + * Copyright (C) 2011-2012 Data Differential, http://datadifferential.com/ * Copyright (C) 2006-2009 Brian Aker * All rights reserved. * @@ -9,14 +10,14 @@ * */ -#include "config.h" +#include -#include -#include -#include -#include +#include +#include #include -#include +#include +#include +#include #include "utilities.h" @@ -45,7 +46,7 @@ int main(int argc, char *argv[]) memcached_return_t rc; memcached_server_st *servers; - int return_code= 0; + int return_code= EXIT_SUCCESS; options_parse(argc, argv); initialize_sockets(); @@ -55,11 +56,13 @@ int main(int argc, char *argv[]) char *temp; if ((temp= getenv("MEMCACHED_SERVERS"))) + { opt_servers= strdup(temp); + } else { - fprintf(stderr, "No Servers provided\n"); - exit(1); + std::cerr << "No servers provied" << std::endl; + exit(EXIT_FAILURE); } } @@ -73,12 +76,24 @@ int main(int argc, char *argv[]) memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, (uint64_t)opt_binary); - if (!initialize_sasl(memc, opt_username, opt_passwd)) + if (opt_username and LIBMEMCACHED_WITH_SASL_SUPPORT == 0) { memcached_free(memc); + std::cerr << "--username was supplied, but binary was not built with SASL support." << std::endl; return EXIT_FAILURE; } + if (opt_username) + { + memcached_return_t ret; + if (memcached_failed(ret= memcached_set_sasl_auth_data(memc, opt_username, opt_passwd))) + { + std::cerr << memcached_last_error_message(memc) << std::endl; + memcached_free(memc); + return EXIT_FAILURE; + } + } + while (optind < argc) { string= memcached_get(memc, argv[optind], strlen(argv[optind]), @@ -88,69 +103,66 @@ int main(int argc, char *argv[]) if (opt_displayflag) { if (opt_verbose) - printf("key: %s\nflags: ", argv[optind]); - printf("%x\n", flags); + { + std::cout << "key: " << argv[optind] << std::endl << "flags: " << flags << std::endl; + } } else { if (opt_verbose) { - printf("key: %s\nflags: %x\nlength: %lu\nvalue: ", - argv[optind], flags, (unsigned long)string_length); + std::cout << "key: " << argv[optind] << std::endl << "flags: " << flags << "length: " << string_length << std::endl << "value: "; } if (opt_file) { - FILE *fp; - size_t written; - - fp= fopen(opt_file, "w"); - if (!fp) + FILE *fp= fopen(opt_file, "w"); + if (fp == NULL) { perror("fopen"); - return_code= -1; + return_code= EXIT_FAILURE; break; } - written= fwrite(string, 1, string_length, fp); + size_t written= fwrite(string, 1, string_length, fp); if (written != string_length) { - fprintf(stderr, "error writing file (written %lu, should be %lu)\n", (unsigned long)written, (unsigned long)string_length); - return_code= -1; + std::cerr << "error writing file to file " << opt_file << " wrote " << written << ", should have written" << string_length << std::endl; + return_code= EXIT_FAILURE; break; } if (fclose(fp)) { - fprintf(stderr, "error closing file\n"); - return_code= -1; + std::cerr << "error closing " << opt_file << std::endl; + return_code= EXIT_FAILURE; break; } } else { - printf("%.*s\n", (int)string_length, string); + std::cout.write(string, string_length); + std::cout << std::endl; } free(string); } } else if (rc != MEMCACHED_NOTFOUND) { - fprintf(stderr, "memcat: %s: memcache error %s", - argv[optind], memcached_strerror(memc, rc)); + std::cerr << "error on " << argv[optind] << "(" << memcached_strerror(memc, rc) << ")"; if (memcached_last_error_errno(memc)) { - fprintf(stderr, " system error %s", strerror(memcached_last_error_errno(memc))); + std::cerr << " system error (" << strerror(memcached_last_error_errno(memc)) << ")" << std::endl; } - fprintf(stderr, "\n"); + std::cerr << std::endl; - return_code= -1; + return_code= EXIT_FAILURE; break; } else // Unknown Issue { - fprintf(stderr, "memcat: %s not found\n", argv[optind]); - return_code= -1; + std::cerr << "error on " << argv[optind] << "("<< memcached_strerror(NULL, rc) << ")" << std::endl; + return_code= EXIT_FAILURE; } optind++; } @@ -158,11 +170,13 @@ int main(int argc, char *argv[]) memcached_free(memc); if (opt_servers) + { free(opt_servers); + } if (opt_hash) + { free(opt_hash); - - shutdown_sasl(); + } return return_code; } @@ -171,7 +185,6 @@ int main(int argc, char *argv[]) void options_parse(int argc, char *argv[]) { int option_index= 0; - int option_rv; memcached_programs_help_st help_options[]= { @@ -182,6 +195,7 @@ void options_parse(int argc, char *argv[]) { {(OPTIONSTRING)"version", no_argument, NULL, OPT_VERSION}, {(OPTIONSTRING)"help", no_argument, NULL, OPT_HELP}, + {(OPTIONSTRING)"quiet", no_argument, NULL, OPT_QUIET}, {(OPTIONSTRING)"verbose", no_argument, &opt_verbose, OPT_VERBOSE}, {(OPTIONSTRING)"debug", no_argument, &opt_verbose, OPT_DEBUG}, {(OPTIONSTRING)"servers", required_argument, NULL, OPT_SERVERS}, @@ -196,7 +210,7 @@ void options_parse(int argc, char *argv[]) while (1) { - option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index); + int option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index); if (option_rv == -1) break; switch (option_rv) { @@ -232,6 +246,11 @@ void options_parse(int argc, char *argv[]) case OPT_FILE: opt_file= optarg; break; + + case OPT_QUIET: + close_stdio(); + break; + case '?': /* getopt_long already printed an error message. */ exit(1);