diff --git a/include/opendht/utils.h b/include/opendht/utils.h index d7c1783c0d9f2efe8b3794b5bec921f9d6311fbb..4df44f6bca6bdc856f746c465ebd111ae020b342 100644 --- a/include/opendht/utils.h +++ b/include/opendht/utils.h @@ -154,5 +154,6 @@ unpackMsg(Blob b) { msgpack::unpacked unpackMsg(Blob b); msgpack::object* findMapValue(const msgpack::object& map, const char* key); +msgpack::object* findMapValue(const msgpack::object& map, const std::string& key); } // namespace dht diff --git a/src/utils.cpp b/src/utils.cpp index e27f2ced02ebe2647e63a3a4d579e2becc505814..3d6576e912673a6f2f7bb64fd03f3e9a8896f64e 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -274,7 +274,21 @@ findMapValue(const msgpack::object& map, const char* key) { if (map.type != msgpack::type::MAP) throw msgpack::type_error(); for (unsigned i = 0; i < map.via.map.size; i++) { auto& o = map.via.map.ptr[i]; - if (o.key.type == msgpack::type::STR && std::strncmp(o.key.via.str.ptr, key, o.key.via.str.size) == 0) + if (o.key.type == msgpack::type::STR + && std::strncmp(o.key.via.str.ptr, key, o.key.via.str.size) == 0) + return &o.val; + } + return nullptr; +} + +msgpack::object* +findMapValue(const msgpack::object& map, const std::string& key) { + if (map.type != msgpack::type::MAP) throw msgpack::type_error(); + for (unsigned i = 0; i < map.via.map.size; i++) { + auto& o = map.via.map.ptr[i]; + if (o.key.type == msgpack::type::STR + && key.size() == o.key.via.str.size + && std::strncmp(o.key.via.str.ptr, key.data(), o.key.via.str.size) == 0) return &o.val; } return nullptr;