]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: fix entity_inst_t comparators
authorSage Weil <sage@newdream.net>
Wed, 2 Sep 2009 23:05:40 +0000 (16:05 -0700)
committerSage Weil <sage@newdream.net>
Wed, 2 Sep 2009 23:10:06 +0000 (16:10 -0700)
Do not use memcmp on unpacked type entity_inst_t!

src/msg/msg_types.h

index 8767e811fcad9c373a9e704ac0ac902c58cdb541..83f38defab98cc04bb4d83767e1ca81fa17f0bf0 100644 (file)
@@ -224,12 +224,20 @@ inline void decode(entity_inst_t &i, bufferlist::iterator& p) {
   decode(i.addr, p);
 }
 
-inline bool operator==(const entity_inst_t& a, const entity_inst_t& b) { return memcmp(&a, &b, sizeof(a)) == 0; }
-inline bool operator!=(const entity_inst_t& a, const entity_inst_t& b) { return memcmp(&a, &b, sizeof(a)) != 0; }
-inline bool operator<(const entity_inst_t& a, const entity_inst_t& b) { return memcmp(&a, &b, sizeof(a)) < 0; }
-inline bool operator<=(const entity_inst_t& a, const entity_inst_t& b) { return memcmp(&a, &b, sizeof(a)) <= 0; }
-inline bool operator>(const entity_inst_t& a, const entity_inst_t& b) { return memcmp(&a, &b, sizeof(a)) > 0; }
-inline bool operator>=(const entity_inst_t& a, const entity_inst_t& b) { return memcmp(&a, &b, sizeof(a)) >= 0; }
+inline bool operator==(const entity_inst_t& a, const entity_inst_t& b) { 
+  return a.name == b.name && a.addr == b.addr;
+}
+inline bool operator!=(const entity_inst_t& a, const entity_inst_t& b) { 
+  return a.name != b.name || a.addr != b.addr;
+}
+inline bool operator<(const entity_inst_t& a, const entity_inst_t& b) { 
+  return a.name < b.name || (a.name == b.name && a.addr < b.addr);
+}
+inline bool operator<=(const entity_inst_t& a, const entity_inst_t& b) {
+  return a.name < b.name || (a.name == b.name && a.addr <= b.addr);
+}
+inline bool operator>(const entity_inst_t& a, const entity_inst_t& b) { return b < a; }
+inline bool operator>=(const entity_inst_t& a, const entity_inst_t& b) { return b <= a; }
 
 namespace __gnu_cxx {
   template<> struct hash< entity_inst_t >