libmemcachedutil: fix version check
[awesomized/libmemcached] / libmemcachedutil / version.cc
index abfd47f71cffef0f540c076c1d03776ec19f2656..75a8f60e897bbea14ced390539dba3f02cd01147 100644 (file)
@@ -37,6 +37,7 @@
 
 
 #include <libmemcachedutil/common.h>
+#include <cassert>
 
 struct local_context
 {
@@ -48,18 +49,26 @@ struct local_context
 };
 
 static memcached_return_t check_server_version(const memcached_st *,
-                                               const memcached_server_st *instance,
+                                               const memcached_instance_st * instance,
                                                void *context)
 {
   /* Do Nothing */
   struct local_context *check= (struct local_context *)context;
 
-  if (instance->major_version != UINT8_MAX &&
-      instance->major_version >= check->major_version &&
-      instance->minor_version >= check->minor_version &&
-      instance->micro_version >= check->micro_version )
-  {
-    return MEMCACHED_SUCCESS;
+  if (memcached_server_major_version(instance) != UINT8_MAX) {
+    uint32_t sv, cv;
+
+    sv = memcached_server_micro_version(instance)
+        |memcached_server_minor_version(instance) << 8
+        |memcached_server_major_version(instance) << 16
+        ;
+    cv = check->micro_version
+        |check->minor_version << 8
+        |check->major_version << 16;
+
+    if (sv >= cv) {
+      return MEMCACHED_SUCCESS;
+    }
   }
 
   check->truth= false;
@@ -72,8 +81,10 @@ bool libmemcached_util_version_check(memcached_st *memc,
                                      uint8_t minor_version,
                                      uint8_t micro_version)
 {
-  if (memcached_version(memc) != MEMCACHED_SUCCESS)
+  if (memcached_failed(memcached_version(memc)))
+  {
     return false;
+  }
 
   struct local_context check= { major_version, minor_version, micro_version, true };