Fix for flags operation (aka not storing the final bit right). Updated
author <brian@gir-2.local> <>
Tue, 27 May 2008 04:19:13 +0000 (09:49 +0530)
committer <brian@gir-2.local> <>
Tue, 27 May 2008 04:19:13 +0000 (09:49 +0530)
version.

ChangeLog
configure.ac
libmemcached/memcached.h
libmemcached/memcached_auto.c
libmemcached/memcached_fetch.c
libmemcached/memcached_parse.c
libmemcached/memcached_storage.c
tests/function.c

index 546468636eff7b130bb14fe062114bc1a4f50e6f..50d087720e1dbd18f052bad7a631d125bf8e7b10 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+0.22
+  * Found a bug in Flags return (Jacek Ostrowski)
+  * Fixed issue with compiling on Visual Studio
+
 0.21 Fri May 23 18:34:09 PDT 2008
   * Change of char * to const char * for all key based functions.
   * New  MEMCACHED_CALLBACK_PREFIX_KEY added. You can now create domains for
index 3352a30b75e4e1c0eb1adb1fa26c30c4af2227f4..8215965b634b26ee11c3c04e46cd306ff52570b3 100644 (file)
@@ -7,7 +7,7 @@ MEMCACHED_LIBRARY_NAME=libmemcached
 
 #release versioning
 MEMCACHED_MAJOR_VERSION=0
-MEMCACHED_MINOR_VERSION=21
+MEMCACHED_MINOR_VERSION=22
 MEMCACHED_MICRO_VERSION=0
 
 #API version
index 4c0a420788a9ea20da7219f89aa564c58e43daaf..60c63b58565253cbc302ecb02941d70295671298 100644 (file)
@@ -37,7 +37,7 @@ struct memcached_continuum_item_st {
   uint32_t value;
 };
 
-#define LIBMEMCACHED_VERSION_STRING "0.21"
+#define LIBMEMCACHED_VERSION_STRING "0.22"
 
 struct memcached_stat_st {
   uint32_t pid;
index b3eae3b6119931ebe113882e8cddcaa82fe8bdf8..c847f9369e095391696cde34b66b8147021ac6bc 100644 (file)
@@ -55,7 +55,7 @@ static memcached_return memcached_auto(memcached_st *ptr,
   }
   else
   {
-    *value= (uint64_t)strtoll(buffer, (char **)NULL, 10);
+    *value= strtoull(buffer, (char **)NULL, 10);
     rc= MEMCACHED_SUCCESS;
   }
 
index 2cefe65f21828dd7e39fffbddb473174be647de9..93215fb89f5be8a055de96806b37eadbfcf7a1ca 100644 (file)
@@ -53,7 +53,7 @@ memcached_return value_fetch(memcached_server_st *ptr,
   if (end_ptr == string_ptr)
     goto read_error;
   for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-  result->flags= (uint32_t)strtol(next_ptr, &string_ptr, 10);
+  result->flags= strtoul(next_ptr, &string_ptr, 10);
 
   if (end_ptr == string_ptr)
     goto read_error;
@@ -64,7 +64,7 @@ memcached_return value_fetch(memcached_server_st *ptr,
     goto read_error;
 
   for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-  value_length= (size_t)strtoll(next_ptr, &string_ptr, 10);
+  value_length= (size_t)strtoull(next_ptr, &string_ptr, 10);
 
   if (end_ptr == string_ptr)
     goto read_error;
@@ -79,7 +79,7 @@ memcached_return value_fetch(memcached_server_st *ptr,
   {
     string_ptr++;
     for (next_ptr= string_ptr; isdigit(*string_ptr); string_ptr++);
-    result->cas= (size_t)strtoll(next_ptr, &string_ptr, 10);
+    result->cas= strtoull(next_ptr, &string_ptr, 10);
   }
 
   if (end_ptr < string_ptr)
index 366e77b55e6667b506baf4ff6bab6f72e9155e44..fc6a4cb1ecb19e08892afc84a024eac263118c4d 100644 (file)
@@ -51,7 +51,7 @@ memcached_server_st *memcached_servers_parse(char *server_strings)
 
       ptr++;
 
-      port= strtol(ptr, (char **)NULL, 10);
+      port= strtoul(ptr, (char **)NULL, 10);
     }
 
     servers= memcached_server_list_append(servers, buffer, port, &rc);
index 7dcc9b7a72b7d98a2f3be54c1221d13e91454b5f..04f281cc898417866159ed2af239a7f78eb43dd4 100644 (file)
@@ -36,6 +36,8 @@ static char *storage_op_string(memcached_storage_action verb)
     return "append";
   case CAS_OP:
     return "cas";
+  default:
+    return "tosserror"; /* This is impossible, fixes issue for compiler warning in VisualStudio */
   };
 
   return SET_OP;
index 5e37153783d90b2a404338f76ad2da12a9c5a5d6..015fa49ca377353dd05fb17eaf040977f1efba74 100644 (file)
@@ -2003,6 +2003,33 @@ test_return user_supplied_bug15(memcached_st *memc)
   return 0;
 }
 
+/* Check the return sizes on FLAGS to make sure it stores 32bit unsigned values correctly */
+test_return user_supplied_bug16(memcached_st *memc)
+{
+  uint32_t x;
+  memcached_return rc;
+  char *key= "mykey";
+  char *value;
+  size_t length;
+  uint32_t flags;
+
+  rc= memcached_set(memc, key, strlen(key), 
+                    NULL, 0,
+                    (time_t)0, UINT32_MAX);
+
+  assert(rc == MEMCACHED_SUCCESS);
+
+  value= memcached_get(memc, key, strlen(key),
+                       &length, &flags, &rc);
+
+  assert(rc == MEMCACHED_SUCCESS);
+  assert(value == NULL);
+  assert(length == 0);
+  assert(flags == UINT32_MAX);
+
+  return 0;
+}
+
 test_return result_static(memcached_st *memc)
 {
   memcached_result_st result;
@@ -2745,6 +2772,7 @@ test_st user_tests[] ={
   {"user_supplied_bug13", 1, user_supplied_bug13 },
   {"user_supplied_bug14", 1, user_supplied_bug14 },
   {"user_supplied_bug15", 1, user_supplied_bug15 },
+  {"user_supplied_bug16", 1, user_supplied_bug16 },
   {0, 0, 0}
 };