fix bug in memcat
[m6w6/libmemcached] / src / memcp.c
index 88cbc351372588341757f1caecd46a4127ba7845..fc396ff1b09c4b4163bc3040802ccd8d42b8f5bb 100644 (file)
@@ -6,6 +6,7 @@
 #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
@@ -39,15 +40,20 @@ int main(int argc, char *argv[])
     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
@@ -55,6 +61,14 @@ int main(int argc, char *argv[])
     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
@@ -70,6 +84,11 @@ int main(int argc, char *argv[])
     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
@@ -102,21 +121,20 @@ void options_parse(int argc, char *argv[])
 \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