Fixed all warnings in code.
author <brian@gir.local> <>
Sat, 22 Sep 2007 05:26:29 +0000 (07:26 +0200)
committer <brian@gir.local> <>
Sat, 22 Sep 2007 05:26:29 +0000 (07:26 +0200)
17 files changed:
lib/Makefile.am
lib/memcached.c
lib/memcached_auto.c
lib/memcached_connect.c
lib/memcached_delete.c
lib/memcached_flush.c
lib/memcached_get.c
lib/memcached_stats.c
lib/memcached_storage.c
lib/memcached_strerror.c
lib/memcached_verbosity.c
src/Makefile.am
src/memcat.c
src/memcp.c
src/memrm.c
src/utilities.c
src/utilities.h

index b9072cf2843070757de91234ef920b6cd6b42600..93ab95edcc26e2f154ec28952f08e3c337e52b11 100644 (file)
@@ -1,4 +1,4 @@
-INCLUDES = -I$(top_builddir)/include\r
+INCLUDES = -I$(top_builddir)/include -Wall\r
 LIBS =\r
 \r
 lib_LTLIBRARIES = libmemcached.la\r
index 6a7715de06cfac8251c7d56a049a1bc5717cb525..8122e1e837876156fe8dc5d4a192d5fdadb26d7e 100644 (file)
@@ -26,7 +26,6 @@ memcached_st *memcached_init(memcached_st *ptr)
 void memcached_deinit(memcached_st *ptr)
 {
   unsigned int x;
-  memcached_host_st *host_ptr;
 
   if (ptr->hosts)
   {
index 268f95b8b5b6474c4a5505f56c62233fe7b88a45..7122dc90096e6db4659dfc2120d0e32660e6085a 100644 (file)
@@ -20,15 +20,11 @@ static memcached_return memcached_auto(memcached_st *ptr,
 
   send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
                         "%s %.*s %u\r\n", verb, 
-                        key_length, key,
+                        (int)key_length, key,
                         offset);
 
-  if ((send(ptr->hosts[server_key].fd, buffer, send_length, 0) == -1))
-  {
-    fprintf(stderr, "failed set on %.*s TCP\n", key_length+1, key);
-
+  if ((write(ptr->hosts[server_key].fd, buffer, send_length) == -1))
     return MEMCACHED_WRITE_FAILURE;
-  }
 
   memset(buffer, 0, MEMCACHED_DEFAULT_COMMAND_SIZE);
   send_length= read(ptr->hosts[server_key].fd, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE);
index 592ede44e804e4dad5b0511f37927b0d1c3d746a..a0c8737c31df48e6e6b7b98e5549d06344408e42 100644 (file)
@@ -10,7 +10,6 @@ memcached_return memcached_server_add(memcached_st *ptr, char *hostname, unsigne
 
 
   ptr->hosts= (memcached_host_st *)realloc(ptr->hosts, sizeof(memcached_host_st) * (ptr->number_of_hosts+1));
-  memset(ptr->hosts, 0, sizeof(memcached_host_st) * (size_t)ptr->number_of_hosts);
   ptr->hosts[ptr->number_of_hosts].hostname=
     (char *)malloc(sizeof(char) * (strlen(hostname)+1));
   memset(ptr->hosts[ptr->number_of_hosts].hostname, 0, strlen(hostname)+1);
@@ -27,7 +26,6 @@ memcached_return memcached_connect(memcached_st *ptr)
   unsigned int x;
   struct sockaddr_in localAddr, servAddr;
   struct hostent *h;
-  memcached_host_st *host_ptr;
 
   if (ptr->connected)
     return MEMCACHED_SUCCESS;
@@ -45,10 +43,7 @@ memcached_return memcached_connect(memcached_st *ptr)
   for (x= 0; x < ptr->number_of_hosts; x++)
   {
     if ((h= gethostbyname(ptr->hosts[x].hostname)) == NULL)
-    {
-      fprintf(stderr, "unknown host '%s'\n", ptr->hosts[x].hostname);
       return MEMCACHED_HOST_LOCKUP_FAILURE;
-    }
 
     servAddr.sin_family= h->h_addrtype;
     memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length);
@@ -56,10 +51,7 @@ memcached_return memcached_connect(memcached_st *ptr)
 
     /* Create the socket */
     if ((ptr->hosts[0].fd= socket(AF_INET, SOCK_STREAM, 0)) < 0)
-    {
-      fprintf(stderr, "cannot open socket");
       return MEMCACHED_CONNECTION_SOCKET_CREATE_FAILURE;
-    }
 
 
     /* bind any port number */
@@ -68,19 +60,11 @@ memcached_return memcached_connect(memcached_st *ptr)
     localAddr.sin_port = htons(0);
 
     if (bind(ptr->hosts[0].fd, (struct sockaddr *) &localAddr, sizeof(localAddr)) < 0)
-    {
-      fprintf(stderr, "cannot bind port TCP %u\n", ptr->hosts[x].port);
       return(MEMCACHED_CONNECTION_BIND_FAILURE);
-    }
 
     /* connect to server */
     if (connect(ptr->hosts[0].fd, (struct sockaddr *) &servAddr, sizeof(servAddr)) < 0)
-    {
-      fprintf(stderr, "cannot connect to host '%s' (%u)  (error: %s)\n", ptr->hosts[x].hostname, 
-              ptr->hosts[x].port,
-              strerror(errno));
       return MEMCACHED_HOST_LOCKUP_FAILURE;
-    }
   }
 
   ptr->connected= 1;
index e601e6fa969fca32cbb4a6e9c879edb6215cec75..d24c0f82a0b7d16ffff58e922a09a05f97817010 100644 (file)
@@ -17,16 +17,14 @@ memcached_return memcached_delete(memcached_st *ptr, char *key, size_t key_lengt
 
   if (expiration)
     send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
-                          "delete %.*s %u\r\n", key_length, key, expiration);
+                          "delete %.*s %llu\r\n", (int)key_length, key, 
+                          (unsigned long long)expiration);
   else
     send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
-                          "delete %.*s\r\n", key_length, key);
-  if ((write(ptr->hosts[server_key].fd, buffer, send_length) == -1))
-  {
-    fprintf(stderr, "failed set on %.*s TCP\n", key_length+1, key);
+                          "delete %.*s\r\n", (int)key_length, key);
 
+  if ((write(ptr->hosts[server_key].fd, buffer, send_length) == -1))
     return MEMCACHED_WRITE_FAILURE;
-  }
 
   return memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, server_key);
 }
index f7527a7c31eb42ebfc3070ea0118ab3a70e2f745..8c51cdf1f85f8e9e44d3fa7a67fb673aac42aa52 100644 (file)
@@ -16,16 +16,12 @@ memcached_return memcached_flush(memcached_st *ptr, time_t expiration)
   {
     if (expiration)
       send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
-                            "flush_all %u\r\n", expiration);
+                            "flush_all %llu\r\n", (unsigned long long)expiration);
     else
       send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
                             "flush_all\r\n");
-    if ((send(ptr->hosts[x].fd, buffer, send_length, 0) == -1))
-    {
-      fprintf(stderr, "failed flush_all TCP\n");
-
+    if ((write(ptr->hosts[x].fd, buffer, send_length) == -1))
       return MEMCACHED_WRITE_FAILURE;
-    }
 
     rc= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, x);
 
index c688af34639684f8931d54c00e5db1b4a9c19946..a18854506d4743b9fb7d404786adbd16434c34e1 100644 (file)
@@ -19,13 +19,12 @@ char *memcached_get(memcached_st *ptr, char *key, size_t key_length,
   server_key= memcached_generate_hash(key, key_length) % ptr->number_of_hosts;
 
   send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, "get %.*s\r\n", 
-                        key_length, key);
+                        (int)key_length, key);
   if (*error != MEMCACHED_SUCCESS)
     return NULL;
 
-  if ((send(ptr->hosts[server_key].fd, buffer, send_length, 0) == -1))
+  if ((write(ptr->hosts[server_key].fd, buffer, send_length) == -1))
   {
-    fprintf(stderr, "failed fetch on %.*s TCP\n", key_length+1, key);
     *error= MEMCACHED_WRITE_FAILURE;
     return NULL;
   }
index 2511532c26f7db2754cf1081ebc221980acb0517..d7f948faad31c99ec4999b110c987982e750367f 100644 (file)
@@ -136,7 +136,7 @@ static memcached_return memcached_stats_fetch(memcached_st *ptr,
     send_length= snprintf(buffer, HUGE_STRING_LEN, 
                           "stats\r\n");
 
-  if ((send(ptr->hosts[server_key].fd, buffer, send_length, 0) == -1))
+  if ((write(ptr->hosts[server_key].fd, buffer, send_length) == -1))
   {
     fprintf(stderr, "failed on stats\n");
 
@@ -207,9 +207,7 @@ memcached_stat_st *memcached_stat(memcached_st *ptr, char *args, memcached_retur
 memcached_return memcached_stat_hostname(memcached_stat_st *stat, char *args, 
                                          char *hostname, unsigned int port)
 {
-  size_t send_length;
   memcached_return rc;
-  char buffer[HUGE_STRING_LEN];
   memcached_st memc;
 
   memcached_init(&memc);
index 3df4913ad10fb23cb06d9b61a9c0ef4246bd3ec6..484341c842c286ad2dd8fd106cc5ebfe328f70e7 100644 (file)
@@ -16,43 +16,42 @@ static memcached_return memcached_send(memcached_st *ptr,
                                        uint16_t  flags,
                                        char *verb)
 {
-  size_t send_length;
+  size_t write_length;
+  ssize_t sent_length;
   memcached_return rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
   unsigned int server_key;
 
   rc= memcached_connect(ptr);
+  assert(value);
+  assert(value_length);
 
   if (rc != MEMCACHED_SUCCESS)
     return rc;
 
   server_key= memcached_generate_hash(key, key_length) % ptr->number_of_hosts;
 
-  send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
-                        "%s %.*s %u %u %u\r\n", verb,
-                        key_length, key, flags, expiration, value_length);
-  if ((send(ptr->hosts[server_key].fd, buffer, send_length, 0) == -1))
-  {
-    fprintf(stderr, "failed set on %.*s TCP\n", key_length+1, key);
-
+  write_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
+                        "%s %.*s %x %llu %zu\r\n", verb,
+                        (int)key_length, key, flags, 
+                        (unsigned long long)expiration, value_length);
+  if ((sent_length= write(ptr->hosts[server_key].fd, buffer, write_length)) == -1)
     return MEMCACHED_WRITE_FAILURE;
-  }
+  assert(write_length == sent_length);
 
-  send_length= snprintf(buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, 
-                        "%.*s\r\n", 
-                        value_length, value);
-  if ((send(ptr->hosts[server_key].fd, buffer, send_length, 0) == -1))
-  {
-    fprintf(stderr, "failed set on %.*s TCP\n", key_length+1, key);
+  if ((sent_length= write(ptr->hosts[server_key].fd, value, value_length)) == -1)
+    return MEMCACHED_WRITE_FAILURE;
+  assert(value_length == sent_length);
 
+  if ((sent_length= write(ptr->hosts[server_key].fd, "\r\n", 2)) == -1)
     return MEMCACHED_WRITE_FAILURE;
-  }
-  
-  send_length= read(ptr->hosts[server_key].fd, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE);
+  assert(2 == sent_length);
+
+  sent_length= read(ptr->hosts[server_key].fd, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE);
 
-  if (send_length && buffer[0] == 'S')  /* STORED */
+  if (sent_length && buffer[0] == 'S')  /* STORED */
     return MEMCACHED_SUCCESS;
-  else if (send_length && buffer[0] == 'N')  /* NOT_STORED */
+  else if (write_length && buffer[0] == 'N')  /* NOT_STORED */
     return MEMCACHED_NOTSTORED;
   else
     return MEMCACHED_READ_FAILURE;
index f6d9105ec2958a6bded17bada4dda05505fbe7d2..335ec26c83dd19dd9e0ddf2815963b2870f8cba7 100644 (file)
@@ -41,6 +41,8 @@ char *memcached_strerror(memcached_st *ptr, memcached_return rc)
   case MEMCACHED_PARTIAL_READ:
     return "PARTIAL READ";
   case MEMCACHED_SOME_ERRORS:
-    return "SOME ERRORS WERE REPORTED ";
+    return "SOME ERRORS WERE REPORTED";
   };
+
+  return "COMPLETELY UNKNOWN ERROR, SOMEONE FORGOT TO UPDATE ERROR MESSAGES";
 }
index 4e586cfb7b7b219410b9ee7d35929f5ba300213a..506dbb07a6f5760a663f7d849e785fed7deaff97 100644 (file)
@@ -19,12 +19,8 @@ memcached_return memcached_verbosity(memcached_st *ptr, unsigned int verbosity)
   {
     memcached_return rc;
 
-    if ((send(ptr->hosts[x].fd, buffer, send_length, 0) == -1))
-    {
-      fprintf(stderr, "failed verbosity\n");
-
+    if ((write(ptr->hosts[x].fd, buffer, send_length) == -1))
       return MEMCACHED_WRITE_FAILURE;
-    }
 
     rc= memcached_response(ptr, buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, x);
 
index 3f003d7c6e25a4758b3cd4e7773b3b971216d496..57386faee3b6cf2fd54a2e010f1add5f35cac5ea 100644 (file)
@@ -1,4 +1,4 @@
-INCLUDES = -I$(top_builddir)/include\r
+INCLUDES = -I$(top_builddir)/include -Wall\r
 LDADDS = ../lib/libmemcached.la\r
 \r
 bin_PROGRAMS = memcat memcp memstat memrm\r
index ed540abb0c54b7eadcd0eabb2e869e4fdb4af39f..1e7f5bf7821131aa1c63c371dc46c6caa53d7332 100644 (file)
@@ -10,8 +10,8 @@
 /* Prototypes */\r
 void options_parse(int argc, char *argv[]);\r
 \r
-static int opt_verbose;\r
-static int opt_displayflag;\r
+static int opt_verbose= 0;\r
+static int opt_displayflag= 0;\r
 static char *opt_servers;\r
 \r
 int main(int argc, char *argv[])\r
@@ -26,7 +26,8 @@ int main(int argc, char *argv[])
 \r
   options_parse(argc, argv);\r
 \r
-  parse_opt_servers(memc, opt_servers);\r
+  if (opt_servers)\r
+    parse_opt_servers(memc, opt_servers);\r
 \r
   while (optind <= argc) \r
   {\r
@@ -36,29 +37,31 @@ int main(int argc, char *argv[])
     {\r
       if (opt_displayflag)\r
       {\r
-       if (opt_verbose)\r
-         printf("key: %s\nflags: ", argv[optind]);\r
-       printf("%x\n", flags);\r
+        if (opt_verbose)\r
+          printf("key: %s\nflags: ", argv[optind]);\r
+        printf("%x\n", flags);\r
       }\r
       else \r
       {\r
-       if (opt_verbose)\r
-         printf("key: %s\nflags: %x\nlength: %zu\nvalue: ",\r
-                argv[optind], flags, string_length);\r
-        printf("%.*s\n", string_length, string);\r
+        if (opt_verbose)\r
+          printf("key: %s\nflags: %x\nlength: %zu\nvalue: ",\r
+                 argv[optind], flags, string_length);\r
+        printf("%.*s\n", (int)string_length, string);\r
         free(string);\r
       }\r
     }\r
     else\r
     {\r
       fprintf(stderr, "memcat: %s: memcache error %s\n", \r
-             argv[optind], memcached_strerror(memc, rc));\r
+              argv[optind], memcached_strerror(memc, rc));\r
     }\r
     optind++;\r
   }\r
 \r
   memcached_deinit(memc);\r
 \r
+  free(opt_servers);\r
+\r
   return 0;\r
 };\r
 \r
@@ -72,8 +75,8 @@ void options_parse(int argc, char *argv[])
     {\r
       {"version", no_argument, NULL, OPT_VERSION},\r
       {"help", no_argument, NULL, OPT_HELP},\r
-      {"verbose", no_argument, &opt_verbose, 1},\r
-      {"debug", no_argument, &opt_verbose, 2},\r
+      {"verbose", no_argument, &opt_verbose, OPT_VERBOSE},\r
+      {"debug", no_argument, &opt_verbose, OPT_DEBUG},\r
       {"servers", required_argument, NULL, OPT_SERVERS},\r
       {"flag", no_argument, &opt_displayflag, OPT_FLAG},\r
       {0, 0, 0, 0},\r
@@ -96,7 +99,7 @@ void options_parse(int argc, char *argv[])
       exit(0);\r
       break;\r
     case OPT_SERVERS: /* --servers or -s */\r
-      opt_servers= optarg;\r
+      opt_servers= strdup(optarg);\r
       break;\r
     case '?':\r
       /* getopt_long already printed an error message. */\r
index 3a76049a1429fbeb0dfcace4b13baa684157a9a7..ec9a2fafb12a2b1bf88389cb4c6d6585c7ef5b32 100644 (file)
@@ -4,40 +4,43 @@
 #include <sys/types.h>\r
 #include <sys/stat.h>\r
 #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
+#include "utilities.h"\r
 \r
 /* Prototypes */\r
 void options_parse(int argc, char *argv[]);\r
 \r
-static int opt_verbose;\r
-static char *opt_servers;\r
-static int opt_replace;\r
-uint16_t opt_flags= 0;\r
-time_t opt_expires= 0;\r
+static int opt_verbose= 0;\r
+static char *opt_servers= NULL;\r
+static int opt_method= OPT_SET;\r
+static uint16_t opt_flags= 0;\r
+static time_t opt_expires= 0;\r
 \r
 int main(int argc, char *argv[])\r
 {\r
   memcached_st *memc;\r
-  char *string;\r
-  size_t string_length;\r
   memcached_return rc;\r
 \r
   options_parse(argc, argv);\r
 \r
   memc= memcached_init(NULL);\r
-  parse_opt_servers(memc, opt_servers);\r
 \r
-  while (optind <= argc) \r
+  if (opt_servers)\r
+    parse_opt_servers(memc, opt_servers);\r
+  else\r
+    parse_opt_servers(memc, argv[--argc]);\r
+\r
+  while (optind < argc) \r
   {\r
-    char *mptr;\r
     struct stat sbuf;\r
     int fd;\r
     char *ptr;\r
+    ssize_t read_length;\r
+    char *file_buffer_ptr;\r
 \r
     fd= open(argv[optind], O_RDONLY);\r
     if (fd < 0)\r
@@ -48,14 +51,6 @@ int main(int argc, char *argv[])
     }\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
@@ -63,43 +58,55 @@ int main(int argc, char *argv[])
     else\r
       ptr= argv[optind];\r
 \r
-    if (opt_verbose)\r
+    if (opt_verbose) \r
     {\r
-      static char *opstr[]= { "set", "add", "replace" };\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
+            "key: %s\nflags: %x\n expires: %llu\n",\r
+            opstr[opt_method], argv[optind], (size_t)sbuf.st_size,\r
+            ptr, opt_flags, (unsigned long long)opt_expires);\r
     }\r
 \r
-    if (opt_replace == 0)\r
-      rc= memcached_set(memc, ptr, strlen(ptr),\r
-                       mptr, sbuf.st_size,\r
-                       opt_expires, opt_flags);\r
-    else if (opt_replace == 1)\r
+    if ((file_buffer_ptr= (char *)malloc(sizeof(char) * sbuf.st_size)) == NULL)\r
+    {\r
+      fprintf(stderr, "malloc: %s\n", strerror(errno)); \r
+      exit(1);\r
+    }\r
+\r
+    if ((read_length= read(fd, file_buffer_ptr, sbuf.st_size)) == -1)\r
+    {\r
+      fprintf(stderr, "read: %s\n", strerror(errno)); \r
+      exit(1);\r
+    }\r
+    assert(read_length == sbuf.st_size);\r
+\r
+    if (opt_method == OPT_ADD)\r
       rc= memcached_add(memc, ptr, strlen(ptr),\r
-                       mptr, sbuf.st_size,\r
+                        file_buffer_ptr, sbuf.st_size,\r
                        opt_expires, opt_flags);\r
-    else if (opt_replace == 2)\r
+    else if (opt_method == OPT_REPLACE)\r
       rc= memcached_replace(memc, ptr, strlen(ptr),\r
-                           mptr, sbuf.st_size,\r
+                           file_buffer_ptr, sbuf.st_size,\r
                            opt_expires, opt_flags);\r
     else\r
-      abort();\r
+      rc= memcached_set(memc, ptr, strlen(ptr),\r
+                        file_buffer_ptr, sbuf.st_size,\r
+                        opt_expires, opt_flags);\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
+    WATCHPOINT;\r
+    free(file_buffer_ptr);\r
     close(fd);\r
     optind++;\r
   }\r
 \r
   memcached_deinit(memc);\r
 \r
+  free(opt_servers);\r
+\r
   return 0;\r
 }\r
 \r
@@ -117,9 +124,9 @@ void options_parse(int argc, char *argv[])
       {"servers", required_argument, NULL, OPT_SERVERS},\r
       {"flag", required_argument, NULL, OPT_FLAG},\r
       {"expire", required_argument, NULL, OPT_EXPIRE},\r
-      {"set",  no_argument, &opt_replace, OPT_SET},\r
-      {"add",  no_argument, &opt_replace, OPT_ADD},\r
-      {"replace",  no_argument, &opt_replace, OPT_REPLACE},\r
+      {"set",  no_argument, NULL, OPT_SET},\r
+      {"add",  no_argument, NULL, OPT_ADD},\r
+      {"replace",  no_argument, NULL, OPT_REPLACE},\r
       {0, 0, 0, 0},\r
     };\r
 \r
@@ -140,13 +147,22 @@ void options_parse(int argc, char *argv[])
       printf("useful help messages go here\n");\r
       exit(0);\r
     case OPT_SERVERS: /* --servers or -s */\r
-      opt_servers= optarg;\r
+      opt_servers= strdup(optarg);\r
       break;\r
     case OPT_FLAG: /* --flag */\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
+      opt_expires= (time_t)strtoll(optarg, (char **)NULL, 10);\r
+      break;\r
+    case OPT_SET:\r
+      opt_method= OPT_SET;\r
+      break;\r
+    case OPT_REPLACE:\r
+      opt_method= OPT_REPLACE;\r
+      break;\r
+    case OPT_ADD:\r
+      opt_method= OPT_ADD;\r
       break;\r
     case '?':\r
       /* getopt_long already printed an error message. */\r
index f49444e85f4219e6e1187b5a31bf68dd9822feb9..3e468a3d875d6619621386bc2a9d5c1505c5717c 100644 (file)
@@ -3,28 +3,64 @@
 #include <getopt.h>\r
 #include <memcached.h>\r
 #include "client_options.h"\r
+#include "utilities.h"\r
 \r
-static int opt_verbose;\r
-static char *opt_servers;\r
+static int opt_verbose= 0;\r
+static time_t opt_expire= 0;\r
+static char *opt_servers= NULL;\r
+\r
+/* Prototypes */\r
+void options_parse(int argc, char *argv[]);\r
 \r
 int main(int argc, char *argv[])\r
 {\r
   memcached_st *memc;\r
-  char *string;\r
-  size_t string_length;\r
-  time_t expires= 0;\r
   memcached_return rc;\r
 \r
-  static struct option long_options[]=\r
+  options_parse(argc, argv);\r
+\r
+  memc= memcached_init(NULL);\r
+\r
+  parse_opt_servers(memc, opt_servers);\r
+\r
+  if (opt_servers)\r
+    parse_opt_servers(memc, opt_servers);\r
+  \r
+  while (optind <= argc) \r
+  {\r
+    if (opt_verbose) \r
+      printf("key: %s\nexpires: %llu\n", argv[optind], (unsigned long long)opt_expire);\r
+    rc = memcached_delete(memc, argv[optind], strlen(argv[optind]), opt_expire);\r
+\r
+    if (rc != MEMCACHED_SUCCESS) \r
     {\r
-      {"version", no_argument, NULL, OPT_VERSION},\r
-      {"help", no_argument, NULL, OPT_HELP},\r
-      {"verbose", no_argument, &opt_verbose, 1},\r
-      {"debug", no_argument, &opt_verbose, 2},\r
-      {"servers", required_argument, NULL, OPT_SERVERS},\r
-      {"expire", required_argument, NULL, OPT_EXPIRE},\r
-      {0, 0, 0, 0},\r
-    };\r
+      fprintf(stderr, "memrm: %s: memcache error %s\n", \r
+             argv[optind], memcached_strerror(memc, rc));\r
+    }\r
+\r
+    optind++;\r
+  }\r
+\r
+  memcached_deinit(memc);\r
+\r
+  free(opt_servers);\r
+\r
+  return 0;\r
+}\r
+\r
+\r
+void options_parse(int argc, char *argv[])\r
+{\r
+  static struct option long_options[]=\r
+  {\r
+    {"version", no_argument, NULL, OPT_VERSION},\r
+    {"help", no_argument, NULL, OPT_HELP},\r
+    {"verbose", no_argument, &opt_verbose, OPT_VERBOSE},\r
+    {"debug", no_argument, &opt_verbose, OPT_DEBUG},\r
+    {"servers", required_argument, NULL, OPT_SERVERS},\r
+    {"expire", required_argument, NULL, OPT_EXPIRE},\r
+    {0, 0, 0, 0},\r
+  };\r
   int option_index= 0;\r
   int option_rv;\r
 \r
@@ -45,10 +81,10 @@ int main(int argc, char *argv[])
       exit(0);\r
       break;\r
     case OPT_SERVERS: /* --servers or -s */\r
-      opt_servers= optarg;\r
+      opt_servers= strdup(optarg);\r
       break;\r
     case OPT_EXPIRE: /* --expire */\r
-      expires= (time_t)strtol(optarg, (char **)NULL, 10);\r
+      opt_expire= (time_t)strtoll(optarg, (char **)NULL, 10);\r
       break;\r
     case '?':\r
       /* getopt_long already printed an error message. */\r
@@ -57,25 +93,4 @@ int main(int argc, char *argv[])
       abort();\r
     }\r
   }\r
-\r
-  memc= memcached_init(NULL);\r
-  parse_opt_servers(memc, opt_servers);\r
-  \r
-  while (optind <= argc) \r
-  {\r
-    if (opt_verbose)\r
-      printf("key: %s\nexpires: %ld\n", argv[optind], expires);\r
-\r
-    rc= memcached_delete(memc, argv[optind], strlen(argv[optind]), expires);\r
-\r
-    if (rc != MEMCACHED_SUCCESS)\r
-      fprintf(stderr, "memrm: %s: memcache error %s\n", \r
-             argv[optind], memcached_strerror(memc, rc));\r
-\r
-    optind++;\r
-  }\r
-\r
-  memcached_deinit(memc);\r
-\r
-  return 0;\r
 }\r
index 5dd66f62731d871651d16eb7a5232bc39797a006..c866dd54038f00960107b789786e4cdff4dbbe3a 100644 (file)
@@ -1,14 +1,20 @@
 #include <memcached.h>
 
 void parse_opt_servers(memcached_st *memc,
-                       char *opt_servers)
+                       char *server_strings)
 {
   char *string;
   unsigned int port;
   char *begin_ptr;
+  char *end_ptr;
 
-  for (begin_ptr= opt_servers, string= index(opt_servers, ','); 
-       begin_ptr[0]; 
+  end_ptr= server_strings + strlen(server_strings);
+
+  assert(server_strings);
+  assert(memc);
+
+  for (begin_ptr= server_strings, string= index(server_strings, ','); 
+       begin_ptr == end_ptr; 
        begin_ptr= ++string, string= index(begin_ptr, ','))
   {
     char buffer[HUGE_STRING_LEN];
@@ -21,9 +27,9 @@ void parse_opt_servers(memcached_st *memc,
     }
     else
     {
-      size_t length= strlen(opt_servers);
+      size_t length= strlen(server_strings);
       memcpy(buffer, begin_ptr, length);
-      string= opt_servers+length;
+      string= server_strings+length;
     }
 
     ptr= index(buffer, ':');
@@ -44,4 +50,3 @@ void parse_opt_servers(memcached_st *memc,
     }
   }
 }
-
index fe79781797816ddd7d85314d5c7eb96af982c366..7d442f23661c0a9627224c9735951f7db68c2335 100644 (file)
@@ -2,3 +2,5 @@
 
 void parse_opt_servers (memcached_st *ptr,
                         char *opt_servers);
+char *strdup_cleanup(const char *str);
+void cleanup(void);