lib/store: improve dirstamp / set_dirstamp code

Modernize.
This commit is contained in:
Dirk-Jan C. Binnema 2023-07-11 22:52:59 +03:00
parent 545494225a
commit 99a0eaaa76
1 changed files with 12 additions and 10 deletions

View File

@ -547,27 +547,29 @@ Store::move_message(Store::Id id,
time_t time_t
Store::dirstamp(const std::string& path) const Store::dirstamp(const std::string& path) const
{ {
constexpr auto epoch = static_cast<time_t>(0); std::string ts;
const auto ts{xapian_db().metadata(path)};
if (ts.empty()) {
return epoch; std::unique_lock lock{priv_->lock_};
else ts = xapian_db().metadata(path);
return static_cast<time_t>(strtoll(ts.c_str(), NULL, 16)); }
return ts.empty() ? 0 /*epoch*/ : ::strtoll(ts.c_str(), {}, 16);
} }
void void
Store::set_dirstamp(const std::string& path, time_t tstamp) Store::set_dirstamp(const std::string& path, time_t tstamp)
{ {
std::array<char, 2 * sizeof(tstamp) + 1> data{}; std::unique_lock lock{priv_->lock_};
const auto len = static_cast<size_t>(
g_snprintf(data.data(), data.size(), "%zx", tstamp));
xapian_db().set_metadata(path, std::string{data.data(), len}); xapian_db().set_metadata(path, mu_format("{:x}", tstamp));
} }
bool bool
Store::contains_message(const std::string& path) const Store::contains_message(const std::string& path) const
{ {
std::unique_lock lock{priv_->lock_};
return xapian_db().term_exists(field_from_id(Field::Id::Path).xapian_term(path)); return xapian_db().term_exists(field_from_id(Field::Id::Path).xapian_term(path));
} }