diff options
Diffstat (limited to 'lldb')
-rw-r--r-- | lldb/source/Utility/ProcessInfo.cpp | 37 | ||||
-rw-r--r-- | lldb/unittests/Target/ProcessInstanceInfoTest.cpp | 18 |
2 files changed, 44 insertions, 11 deletions
diff --git a/lldb/source/Utility/ProcessInfo.cpp b/lldb/source/Utility/ProcessInfo.cpp index cc1832ed3b0..986234dfdb7 100644 --- a/lldb/source/Utility/ProcessInfo.cpp +++ b/lldb/source/Utility/ProcessInfo.cpp @@ -189,24 +189,39 @@ void ProcessInstanceInfo::DumpAsTableRow(Stream &s, UserIDResolver &resolver, if (m_arch.IsValid()) m_arch.DumpTriple(arch_strm); - auto print = [&](UserIDResolver::id_t id, - llvm::Optional<llvm::StringRef> (UserIDResolver::*get)( + auto print = [&](bool (ProcessInstanceInfo::*isValid)() const, + uint32_t (ProcessInstanceInfo::*getID)() const, + llvm::Optional<llvm::StringRef> (UserIDResolver::*getName)( UserIDResolver::id_t id)) { - if (auto name = (resolver.*get)(id)) - s.Format("{0,-10} ", *name); + const char *format = "{0,-10} "; + if (!(this->*isValid)()) { + s.Format(format, ""); + return; + } + uint32_t id = (this->*getID)(); + if (auto name = (resolver.*getName)(id)) + s.Format(format, *name); else - s.Format("{0,-10} ", id); + s.Format(format, id); }; if (verbose) { - print(m_uid, &UserIDResolver::GetUserName); - print(m_gid, &UserIDResolver::GetGroupName); - print(m_euid, &UserIDResolver::GetUserName); - print(m_egid, &UserIDResolver::GetGroupName); + print(&ProcessInstanceInfo::UserIDIsValid, + &ProcessInstanceInfo::GetUserID, &UserIDResolver::GetUserName); + print(&ProcessInstanceInfo::GroupIDIsValid, + &ProcessInstanceInfo::GetGroupID, &UserIDResolver::GetGroupName); + print(&ProcessInstanceInfo::EffectiveUserIDIsValid, + &ProcessInstanceInfo::GetEffectiveUserID, + &UserIDResolver::GetUserName); + print(&ProcessInstanceInfo::EffectiveGroupIDIsValid, + &ProcessInstanceInfo::GetEffectiveGroupID, + &UserIDResolver::GetGroupName); s.Printf("%-24s ", arch_strm.GetData()); } else { - print(m_euid, &UserIDResolver::GetUserName); - s.Printf(" %-24s ", arch_strm.GetData()); + print(&ProcessInstanceInfo::EffectiveUserIDIsValid, + &ProcessInstanceInfo::GetEffectiveUserID, + &UserIDResolver::GetUserName); + s.Printf("%-24s ", arch_strm.GetData()); } if (verbose || show_args) { diff --git a/lldb/unittests/Target/ProcessInstanceInfoTest.cpp b/lldb/unittests/Target/ProcessInstanceInfoTest.cpp index 80be01d6153..334bab143c5 100644 --- a/lldb/unittests/Target/ProcessInstanceInfoTest.cpp +++ b/lldb/unittests/Target/ProcessInstanceInfoTest.cpp @@ -73,3 +73,21 @@ TEST(ProcessInstanceInfo, DumpTable) { )", s.GetData()); } + +TEST(ProcessInstanceInfo, DumpTable_invalidUID) { + ProcessInstanceInfo info("a.out", ArchSpec("x86_64-pc-linux"), 47); + + DummyUserIDResolver resolver; + StreamString s; + + const bool show_args = false; + const bool verbose = false; + ProcessInstanceInfo::DumpTableHeader(s, show_args, verbose); + info.DumpAsTableRow(s, resolver, show_args, verbose); + EXPECT_STREQ( + R"(PID PARENT USER TRIPLE NAME +====== ====== ========== ======================== ============================ +47 0 x86_64-pc-linux a.out +)", + s.GetData()); +} |