#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
- {\r
- fprintf(stderr, "Failed opening %s\n", argv[optind]);\r
+ if (fd < 0) {\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
+ 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
+ static char *opstr[] = { "set", "add", "replace" };\r
+ printf("op: %s\nsource file: %s\nlength: %d\n"\r
+ "key: %s\nflags: %d\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
+ 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
\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
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