diff --git a/src/fdb5/tools/fdb-patch.cc b/src/fdb5/tools/fdb-patch.cc index 7232d06ab..407b8a6b2 100644 --- a/src/fdb5/tools/fdb-patch.cc +++ b/src/fdb5/tools/fdb-patch.cc @@ -24,6 +24,7 @@ #include "fdb5/tools/FDBVisitTool.h" #include "metkit/codes/CodesContent.h" +#include "metkit/codes/api/CodesAPI.h" using namespace eckit; using namespace eckit::option; @@ -50,21 +51,13 @@ class PatchArchiver : public MessageArchiver { eckit::message::Message PatchArchiver::patch(const eckit::message::Message& msg) { - codes_handle* h = codes_handle_new_from_message(nullptr, msg.data(), msg.length()); - ASSERT(h); + auto h = metkit::codes::codesHandleFromMessage({reinterpret_cast(msg.data()), msg.length()}); - try { - for (Key::const_iterator j = key_.begin(); j != key_.end(); ++j) { - size_t len = j->second.size(); - ASSERT(grib_set_string(h, j->first.c_str(), j->second.c_str(), &len) == 0); - } - - return eckit::message::Message(new metkit::codes::CodesContent(h, true)); - } - catch (...) { - grib_handle_delete(h); - throw; + for (const auto& [key, value] : key_) { + h->set(key, value); } + + return eckit::message::Message(new metkit::codes::CodesContent(std::move(h))); } //----------------------------------------------------------------------------------------------------------------------