X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=clients%2Fmemcp.c;h=617057b32d4f54dfb836154498051ce7d6278459;hb=98c99981e0ebe7f716bea2e4d95434d159103fcd;hp=780514c1bc56b7bf7daac5878f85cd8449a9af5f;hpb=26c1a71921b1468d56f6edaa7e6e3855ec1c879f;p=awesomized%2Flibmemcached diff --git a/clients/memcp.c b/clients/memcp.c index 780514c1..617057b3 100644 --- a/clients/memcp.c +++ b/clients/memcp.c @@ -1,6 +1,18 @@ +/* LibMemcached + * Copyright (C) 2006-2009 Brian Aker + * All rights reserved. + * + * Use and distribution licensed under the BSD license. See + * the COPYING file in the parent directory for full text. + * + * Summary: + * + */ + +#include "libmemcached/common.h" #include #include -#include +#include #include #include #include @@ -10,7 +22,6 @@ #include #include #include -#include #include @@ -21,8 +32,9 @@ #define PROGRAM_DESCRIPTION "Copy a set of files to a memcached cluster." /* Prototypes */ -void options_parse(int argc, char *argv[]); +static void options_parse(int argc, char *argv[]); +static int opt_binary=0; static int opt_verbose= 0; static char *opt_servers= NULL; static char *opt_hash= NULL; @@ -33,7 +45,7 @@ static time_t opt_expires= 0; int main(int argc, char *argv[]) { memcached_st *memc; - memcached_return rc; + memcached_return_t rc; memcached_server_st *servers; options_parse(argc, argv); @@ -61,8 +73,10 @@ int main(int argc, char *argv[]) memcached_server_push(memc, servers); memcached_server_list_free(servers); + memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_BINARY_PROTOCOL, + (uint64_t)opt_binary); - while (optind < argc) + while (optind < argc) { struct stat sbuf; int fd; @@ -86,44 +100,49 @@ int main(int argc, char *argv[]) else ptr= argv[optind]; - if (opt_verbose) + if (opt_verbose) { - static char *opstr[] = { "set", "add", "replace" }; + static const char *opstr[] = { "set", "add", "replace" }; printf("op: %s\nsource file: %s\nlength: %zu\n" "key: %s\nflags: %x\nexpires: %llu\n", opstr[opt_method - OPT_SET], argv[optind], (size_t)sbuf.st_size, ptr, opt_flags, (unsigned long long)opt_expires); } - if ((file_buffer_ptr= (char *)malloc(sizeof(char) * sbuf.st_size)) == NULL) + if ((file_buffer_ptr= (char *)malloc(sizeof(char) * (size_t)sbuf.st_size)) == NULL) { - fprintf(stderr, "malloc: %s\n", strerror(errno)); + fprintf(stderr, "malloc: %s\n", strerror(errno)); exit(1); } - if ((read_length= read(fd, file_buffer_ptr, sbuf.st_size)) == -1) + if ((read_length= read(fd, file_buffer_ptr, (size_t)sbuf.st_size)) == -1) { - fprintf(stderr, "read: %s\n", strerror(errno)); + fprintf(stderr, "read: %s\n", strerror(errno)); + exit(1); + } + + if (read_length != sbuf.st_size) + { + fprintf(stderr, "Failure reading from file\n"); exit(1); } - assert(read_length == sbuf.st_size); if (opt_method == OPT_ADD) rc= memcached_add(memc, ptr, strlen(ptr), - file_buffer_ptr, sbuf.st_size, + file_buffer_ptr, (size_t)sbuf.st_size, opt_expires, opt_flags); else if (opt_method == OPT_REPLACE) rc= memcached_replace(memc, ptr, strlen(ptr), - file_buffer_ptr, sbuf.st_size, + file_buffer_ptr, (size_t)sbuf.st_size, opt_expires, opt_flags); else rc= memcached_set(memc, ptr, strlen(ptr), - file_buffer_ptr, sbuf.st_size, + file_buffer_ptr, (size_t)sbuf.st_size, opt_expires, opt_flags); if (rc != MEMCACHED_SUCCESS) { - fprintf(stderr, "memcp: %s: memcache error %s", + fprintf(stderr, "memcp: %s: memcache error %s", ptr, memcached_strerror(memc, rc)); if (memc->cached_errno) fprintf(stderr, " system error %s", strerror(memc->cached_errno)); @@ -145,7 +164,7 @@ int main(int argc, char *argv[]) return 0; } -void options_parse(int argc, char *argv[]) +static void options_parse(int argc, char *argv[]) { int option_index= 0; int option_rv; @@ -157,21 +176,22 @@ void options_parse(int argc, char *argv[]) static struct option long_options[]= { - {"version", no_argument, NULL, OPT_VERSION}, - {"help", no_argument, NULL, OPT_HELP}, - {"verbose", no_argument, &opt_verbose, OPT_VERBOSE}, - {"debug", no_argument, &opt_verbose, OPT_DEBUG}, - {"servers", required_argument, NULL, OPT_SERVERS}, - {"flag", required_argument, NULL, OPT_FLAG}, - {"expire", required_argument, NULL, OPT_EXPIRE}, - {"set", no_argument, NULL, OPT_SET}, - {"add", no_argument, NULL, OPT_ADD}, - {"replace", no_argument, NULL, OPT_REPLACE}, - {"hash", required_argument, NULL, OPT_HASH}, + {(OPTIONSTRING)"version", no_argument, NULL, OPT_VERSION}, + {(OPTIONSTRING)"help", no_argument, NULL, OPT_HELP}, + {(OPTIONSTRING)"verbose", no_argument, &opt_verbose, OPT_VERBOSE}, + {(OPTIONSTRING)"debug", no_argument, &opt_verbose, OPT_DEBUG}, + {(OPTIONSTRING)"servers", required_argument, NULL, OPT_SERVERS}, + {(OPTIONSTRING)"flag", required_argument, NULL, OPT_FLAG}, + {(OPTIONSTRING)"expire", required_argument, NULL, OPT_EXPIRE}, + {(OPTIONSTRING)"set", no_argument, NULL, OPT_SET}, + {(OPTIONSTRING)"add", no_argument, NULL, OPT_ADD}, + {(OPTIONSTRING)"replace", no_argument, NULL, OPT_REPLACE}, + {(OPTIONSTRING)"hash", required_argument, NULL, OPT_HASH}, + {(OPTIONSTRING)"binary", no_argument, NULL, OPT_BINARY}, {0, 0, 0, 0}, }; - while (1) + while (1) { option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index); @@ -181,6 +201,9 @@ void options_parse(int argc, char *argv[]) { case 0: break; + case OPT_BINARY: + opt_binary = 1; + break; case OPT_VERBOSE: /* --verbose or -v */ opt_verbose = OPT_VERBOSE; break; @@ -210,6 +233,7 @@ void options_parse(int argc, char *argv[]) break; case OPT_ADD: opt_method= OPT_ADD; + break; case OPT_HASH: opt_hash= strdup(optarg); break;