From: Peter van Dijk Date: Thu, 6 Apr 2023 12:25:50 +0000 (+0200) Subject: lmdb: add interface to get timestamp from LS header X-Git-Tag: auth-4.8.0-beta1~1^2~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=547e9b51eb77581aadce79a89d9f623d7b223822;p=thirdparty%2Fpdns.git lmdb: add interface to get timestamp from LS header --- diff --git a/ext/lmdb-safe/lmdb-safe.cc b/ext/lmdb-safe/lmdb-safe.cc index 4aa6d313a7..d4b820e737 100644 --- a/ext/lmdb-safe/lmdb-safe.cc +++ b/ext/lmdb-safe/lmdb-safe.cc @@ -68,6 +68,11 @@ namespace LMDBLS { return (lsh->d_flags & LS_FLAG_DELETED) != 0; } + uint64_t LSgetTimestamp(std::string_view val) { + const LSheader* lsh = LSassertFixedHeaderSize(val); + + return lsh->getTimestamp(); + } bool s_flag_deleted{false}; bool s_handle_dups{false}; } diff --git a/ext/lmdb-safe/lmdb-safe.hh b/ext/lmdb-safe/lmdb-safe.hh index 79c3c82dd3..b10b4568ec 100644 --- a/ext/lmdb-safe/lmdb-safe.hh +++ b/ext/lmdb-safe/lmdb-safe.hh @@ -140,13 +140,16 @@ namespace LMDBLS { return std::string((char*)this, sizeof(*this)) + std::string(ntohs(d_numextra)*8, '\0'); } - + uint64_t getTimestamp() const { + return _LMDB_SAFE_BSWAP64MAYBE(d_timestamp); + } }; static_assert(sizeof(LSheader)==24, "LSheader size is wrong"); const size_t LS_MIN_HEADER_SIZE = sizeof(LSheader); const size_t LS_BLOCK_SIZE = 8; + const size_t LS_TIMESTAMP_OFFSET = 0; const size_t LS_NUMEXTRA_OFFSET = 22; const uint8_t LS_FLAG_DELETED = 0x01; @@ -154,6 +157,7 @@ namespace LMDBLS { size_t LScheckHeaderAndGetSize(std::string_view val, size_t datasize=0); size_t LScheckHeaderAndGetSize(const MDBOutVal *val, size_t datasize=0); bool LSisDeleted(std::string_view val); + uint64_t LSgetTimestamp(std::string_view val); extern bool s_flag_deleted; extern bool s_handle_dups;