#include <sys/types.h>\r
#include <sys/mman.h>\r
#include <fcntl.h>\r
+#include <errno.h>\r
\r
#include <memcached.h>\r
#include "client_options.h"\r
char *ptr;\r
\r
fd= open(argv[optind], O_RDONLY);\r
-\r
- if (fd == -1)\r
+ if (fd < 0)\r
{\r
- fprintf(stderr, "Failed opening %s\n", argv[optind]);\r
+ fprintf(stderr, "memcp: %s: %s\n", argv[optind], strerror(errno));\r
+ optind++;\r
continue;\r
}\r
\r
(void)fstat(fd, &sbuf);\r
mptr= mmap(NULL, sbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);\r
+ if (mptr == MAP_FAILED)\r
+ {\r
+ fprintf(stderr, "memcp: %s: %s\n", argv[optind], strerror(errno));\r
+ close(fd);\r
+ optind++;\r
+ continue;\r
+ }\r
\r
ptr= rindex(argv[optind], '/');\r
if (ptr)\r
else\r
ptr= argv[optind];\r
\r
+ if (opt_verbose)\r
+ {\r
+ static char *opstr[]= { "set", "add", "replace" };\r
+ printf("op: %s\nsource file: %s\nlength: %zu\n"\r
+ "key: %s\nflags: %x\n expires: %ld\n",\r
+ opstr[opt_replace], argv[optind], sbuf.st_size,\r
+ ptr, opt_flags, opt_expires);\r
+ }\r
+\r
if (opt_replace == 0)\r
rc= memcached_set(memc, ptr, strlen(ptr),\r
mptr, sbuf.st_size,\r
else\r
abort();\r
\r
+ if (rc != MEMCACHED_SUCCESS)\r
+ {\r
+ fprintf(stderr, "memcp: %s: memcache error %s\n", \r
+ ptr, memcached_strerror(memc, rc));\r
+ }\r
+\r
munmap(mptr, sbuf.st_size);\r
close(fd);\r
optind++;\r
memcached_deinit(memc);\r
\r
return 0;\r
-};\r
+}\r
\r
void options_parse(int argc, char *argv[])\r
{\r
int option_index= 0;\r
int option_rv;\r
\r
- static struct option long_options[] =\r
+ static struct option long_options[]=\r
{\r
{"version", no_argument, NULL, OPT_VERSION},\r
{"help", no_argument, NULL, OPT_HELP},\r
\r
while (1) \r
{\r
- option_rv= getopt_long(argc, argv, "", long_options, &option_index);\r
+ option_rv= getopt_long(argc, argv, "Vhvds:", long_options, &option_index);\r
\r
if (option_rv == -1) break;\r
\r
- switch (option_rv) {\r
+ switch (option_rv)\r
+ {\r
case 0:\r
- if (long_options[option_index].name)\r
break;\r
- case OPT_VERSION: /* --version */\r
+ case OPT_VERSION: /* --version or -V */\r
printf("memcache tools, memcp, v1.0\n");\r
exit(0);\r
- case OPT_HELP: /* --help */\r
+ case OPT_HELP: /* --help or -h */\r
printf("useful help messages go here\n");\r
exit(0);\r
- case OPT_SERVERS: /* --servers */\r
+ case OPT_SERVERS: /* --servers or -s */\r
opt_servers= optarg;\r
break;\r
case OPT_FLAG: /* --flag */\r
- opt_flags= (uint16_t)strtol(optarg, (char **)NULL, 10);\r
+ opt_flags= (uint16_t)strtol(optarg, (char **)NULL, 16);\r
break;\r
case OPT_EXPIRE: /* --expire */\r
opt_expires= (time_t)strtol(optarg, (char **)NULL, 10);\r