Made sure memory was freed after calling memcached_get.
[awesomized/libmemcached] / libmemcached / memcached_version.c
index 182ff14e316da66983f75cc4625379645c67f622..9c070eaf2ec744339b3cb499050cacbf359cba3d 100644 (file)
@@ -10,6 +10,9 @@ static inline memcached_return memcached_version_textual(memcached_st *ptr);
 
 memcached_return memcached_version(memcached_st *ptr)
 {
+   if (ptr->flags & MEM_USE_UDP)
+    return MEMCACHED_NOT_SUPPORTED;
+
    if (ptr->flags & MEM_BINARY_PROTOCOL)
      return memcached_version_binary(ptr);
    else
@@ -23,7 +26,7 @@ static inline memcached_return memcached_version_textual(memcached_st *ptr)
   memcached_return rc;
   char buffer[MEMCACHED_DEFAULT_COMMAND_SIZE];
   char *response_ptr;
-  char *command= "version\r\n";
+  const char *command= "version\r\n";
 
   send_length= strlen(command);
 
@@ -41,7 +44,10 @@ static inline memcached_return memcached_version_textual(memcached_st *ptr)
 
     rrc= memcached_response(&ptr->hosts[x], buffer, MEMCACHED_DEFAULT_COMMAND_SIZE, NULL);
     if (rrc != MEMCACHED_SUCCESS)
+    {
       rc= MEMCACHED_SOME_ERRORS;
+      continue;
+    }
 
     /* Find the space, and then move one past it to copy version */
     response_ptr= index(buffer, ' ');
@@ -63,7 +69,7 @@ static inline memcached_return memcached_version_binary(memcached_st *ptr)
 {
   memcached_return rc;
   unsigned int x;
-  protocol_binary_request_version request= {0};
+  protocol_binary_request_version request= { .bytes= {0}};
   request.message.header.request.magic= PROTOCOL_BINARY_REQ;
   request.message.header.request.opcode= PROTOCOL_BINARY_CMD_VERSION;
   request.message.header.request.datatype= PROTOCOL_BINARY_RAW_BYTES;
@@ -94,6 +100,7 @@ static inline memcached_return memcached_version_binary(memcached_st *ptr)
       {
         memcached_io_reset(&ptr->hosts[x]);
         rc= MEMCACHED_SOME_ERRORS;
+        continue;
       }
 
       ptr->hosts[x].major_version= (uint8_t)strtol(buffer, &p, 10);