1cfca06d7SDimitry Andric //===-- UserIDResolver.cpp ------------------------------------------------===// 25f29bb8aSDimitry Andric // 35f29bb8aSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45f29bb8aSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 55f29bb8aSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65f29bb8aSDimitry Andric // 75f29bb8aSDimitry Andric //===----------------------------------------------------------------------===// 85f29bb8aSDimitry Andric 95f29bb8aSDimitry Andric #include "lldb/Utility/UserIDResolver.h" 105f29bb8aSDimitry Andric #include "llvm/Support/ManagedStatic.h" 11e3b55780SDimitry Andric #include <optional> 125f29bb8aSDimitry Andric 135f29bb8aSDimitry Andric using namespace lldb_private; 145f29bb8aSDimitry Andric 155f29bb8aSDimitry Andric UserIDResolver::~UserIDResolver() = default; 165f29bb8aSDimitry Andric Get(id_t id,Map & cache,std::optional<std::string> (UserIDResolver::* do_get)(id_t))17e3b55780SDimitry Andricstd::optional<llvm::StringRef> UserIDResolver::Get( 185f29bb8aSDimitry Andric id_t id, Map &cache, 19e3b55780SDimitry Andric std::optional<std::string> (UserIDResolver::*do_get)(id_t)) { 205f29bb8aSDimitry Andric 215f29bb8aSDimitry Andric std::lock_guard<std::mutex> guard(m_mutex); 22e3b55780SDimitry Andric auto iter_bool = cache.try_emplace(id, std::nullopt); 235f29bb8aSDimitry Andric if (iter_bool.second) 245f29bb8aSDimitry Andric iter_bool.first->second = (this->*do_get)(id); 255f29bb8aSDimitry Andric if (iter_bool.first->second) 265f29bb8aSDimitry Andric return llvm::StringRef(*iter_bool.first->second); 27e3b55780SDimitry Andric return std::nullopt; 285f29bb8aSDimitry Andric } 295f29bb8aSDimitry Andric 305f29bb8aSDimitry Andric namespace { 315f29bb8aSDimitry Andric class NoopResolver : public UserIDResolver { 325f29bb8aSDimitry Andric protected: DoGetUserName(id_t uid)33e3b55780SDimitry Andric std::optional<std::string> DoGetUserName(id_t uid) override { 34e3b55780SDimitry Andric return std::nullopt; 355f29bb8aSDimitry Andric } 365f29bb8aSDimitry Andric DoGetGroupName(id_t gid)37e3b55780SDimitry Andric std::optional<std::string> DoGetGroupName(id_t gid) override { 38e3b55780SDimitry Andric return std::nullopt; 395f29bb8aSDimitry Andric } 405f29bb8aSDimitry Andric }; 415f29bb8aSDimitry Andric } // namespace 425f29bb8aSDimitry Andric 435f29bb8aSDimitry Andric static llvm::ManagedStatic<NoopResolver> g_noop_resolver; 445f29bb8aSDimitry Andric GetNoopResolver()455f29bb8aSDimitry AndricUserIDResolver &UserIDResolver::GetNoopResolver() { return *g_noop_resolver; } 46