1141a6263SVadim Macagon //===-- SBProcessInfo.cpp ---------------------------------------*- C++ -*-===//
2141a6263SVadim Macagon //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6141a6263SVadim Macagon //
7141a6263SVadim Macagon //===----------------------------------------------------------------------===//
8141a6263SVadim Macagon 
9141a6263SVadim Macagon #include "lldb/API/SBProcessInfo.h"
10*baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h"
11bd4bf82aSJonas Devlieghere #include "Utils.h"
12141a6263SVadim Macagon #include "lldb/API/SBFileSpec.h"
13805e7106SZachary Turner #include "lldb/Utility/ProcessInfo.h"
14141a6263SVadim Macagon 
15141a6263SVadim Macagon using namespace lldb;
16141a6263SVadim Macagon using namespace lldb_private;
17141a6263SVadim Macagon 
18*baf5664fSJonas Devlieghere SBProcessInfo::SBProcessInfo() : m_opaque_up() {
19*baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBProcessInfo);
20*baf5664fSJonas Devlieghere }
21141a6263SVadim Macagon 
22d5b44036SJonas Devlieghere SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_up() {
23*baf5664fSJonas Devlieghere   LLDB_RECORD_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &), rhs);
24*baf5664fSJonas Devlieghere 
25bd4bf82aSJonas Devlieghere   m_opaque_up = clone(rhs.m_opaque_up);
26141a6263SVadim Macagon }
27141a6263SVadim Macagon 
28141a6263SVadim Macagon SBProcessInfo::~SBProcessInfo() {}
29141a6263SVadim Macagon 
30141a6263SVadim Macagon SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
31*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD(lldb::SBProcessInfo &,
32*baf5664fSJonas Devlieghere                      SBProcessInfo, operator=,(const lldb::SBProcessInfo &),
33*baf5664fSJonas Devlieghere                      rhs);
34*baf5664fSJonas Devlieghere 
35bd4bf82aSJonas Devlieghere   if (this != &rhs)
36bd4bf82aSJonas Devlieghere     m_opaque_up = clone(rhs.m_opaque_up);
37141a6263SVadim Macagon   return *this;
38141a6263SVadim Macagon }
39141a6263SVadim Macagon 
40141a6263SVadim Macagon ProcessInstanceInfo &SBProcessInfo::ref() {
41d5b44036SJonas Devlieghere   if (m_opaque_up == nullptr) {
42d5b44036SJonas Devlieghere     m_opaque_up.reset(new ProcessInstanceInfo());
43141a6263SVadim Macagon   }
44d5b44036SJonas Devlieghere   return *m_opaque_up;
45141a6263SVadim Macagon }
46141a6263SVadim Macagon 
47141a6263SVadim Macagon void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
48141a6263SVadim Macagon   ref() = proc_info_ref;
49141a6263SVadim Macagon }
50141a6263SVadim Macagon 
51*baf5664fSJonas Devlieghere bool SBProcessInfo::IsValid() const {
52*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, IsValid);
53*baf5664fSJonas Devlieghere 
54*baf5664fSJonas Devlieghere   return m_opaque_up != nullptr;
55*baf5664fSJonas Devlieghere }
56141a6263SVadim Macagon 
57141a6263SVadim Macagon const char *SBProcessInfo::GetName() {
58*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBProcessInfo, GetName);
59*baf5664fSJonas Devlieghere 
60141a6263SVadim Macagon   const char *name = nullptr;
61d5b44036SJonas Devlieghere   if (m_opaque_up) {
62d5b44036SJonas Devlieghere     name = m_opaque_up->GetName();
63141a6263SVadim Macagon   }
64141a6263SVadim Macagon   return name;
65141a6263SVadim Macagon }
66141a6263SVadim Macagon 
67141a6263SVadim Macagon SBFileSpec SBProcessInfo::GetExecutableFile() {
68*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBProcessInfo,
69*baf5664fSJonas Devlieghere                              GetExecutableFile);
70*baf5664fSJonas Devlieghere 
71141a6263SVadim Macagon   SBFileSpec file_spec;
72d5b44036SJonas Devlieghere   if (m_opaque_up) {
73d5b44036SJonas Devlieghere     file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
74141a6263SVadim Macagon   }
75*baf5664fSJonas Devlieghere   return LLDB_RECORD_RESULT(file_spec);
76141a6263SVadim Macagon }
77141a6263SVadim Macagon 
78141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetProcessID() {
79*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetProcessID);
80*baf5664fSJonas Devlieghere 
81141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
82d5b44036SJonas Devlieghere   if (m_opaque_up) {
83d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetProcessID();
84141a6263SVadim Macagon   }
85141a6263SVadim Macagon   return proc_id;
86141a6263SVadim Macagon }
87141a6263SVadim Macagon 
88141a6263SVadim Macagon uint32_t SBProcessInfo::GetUserID() {
89*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetUserID);
90*baf5664fSJonas Devlieghere 
91141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
92d5b44036SJonas Devlieghere   if (m_opaque_up) {
93d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetUserID();
94141a6263SVadim Macagon   }
95141a6263SVadim Macagon   return user_id;
96141a6263SVadim Macagon }
97141a6263SVadim Macagon 
98141a6263SVadim Macagon uint32_t SBProcessInfo::GetGroupID() {
99*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetGroupID);
100*baf5664fSJonas Devlieghere 
101141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
102d5b44036SJonas Devlieghere   if (m_opaque_up) {
103d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetGroupID();
104141a6263SVadim Macagon   }
105141a6263SVadim Macagon   return group_id;
106141a6263SVadim Macagon }
107141a6263SVadim Macagon 
108141a6263SVadim Macagon bool SBProcessInfo::UserIDIsValid() {
109*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, UserIDIsValid);
110*baf5664fSJonas Devlieghere 
111141a6263SVadim Macagon   bool is_valid = false;
112d5b44036SJonas Devlieghere   if (m_opaque_up) {
113d5b44036SJonas Devlieghere     is_valid = m_opaque_up->UserIDIsValid();
114141a6263SVadim Macagon   }
115141a6263SVadim Macagon   return is_valid;
116141a6263SVadim Macagon }
117141a6263SVadim Macagon 
118141a6263SVadim Macagon bool SBProcessInfo::GroupIDIsValid() {
119*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, GroupIDIsValid);
120*baf5664fSJonas Devlieghere 
121141a6263SVadim Macagon   bool is_valid = false;
122d5b44036SJonas Devlieghere   if (m_opaque_up) {
123d5b44036SJonas Devlieghere     is_valid = m_opaque_up->GroupIDIsValid();
124141a6263SVadim Macagon   }
125141a6263SVadim Macagon   return is_valid;
126141a6263SVadim Macagon }
127141a6263SVadim Macagon 
128141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveUserID() {
129*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveUserID);
130*baf5664fSJonas Devlieghere 
131141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
132d5b44036SJonas Devlieghere   if (m_opaque_up) {
133d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetEffectiveUserID();
134141a6263SVadim Macagon   }
135141a6263SVadim Macagon   return user_id;
136141a6263SVadim Macagon }
137141a6263SVadim Macagon 
138141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveGroupID() {
139*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveGroupID);
140*baf5664fSJonas Devlieghere 
141141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
142d5b44036SJonas Devlieghere   if (m_opaque_up) {
143d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetEffectiveGroupID();
144141a6263SVadim Macagon   }
145141a6263SVadim Macagon   return group_id;
146141a6263SVadim Macagon }
147141a6263SVadim Macagon 
148141a6263SVadim Macagon bool SBProcessInfo::EffectiveUserIDIsValid() {
149*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveUserIDIsValid);
150*baf5664fSJonas Devlieghere 
151141a6263SVadim Macagon   bool is_valid = false;
152d5b44036SJonas Devlieghere   if (m_opaque_up) {
153d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveUserIDIsValid();
154141a6263SVadim Macagon   }
155141a6263SVadim Macagon   return is_valid;
156141a6263SVadim Macagon }
157141a6263SVadim Macagon 
158141a6263SVadim Macagon bool SBProcessInfo::EffectiveGroupIDIsValid() {
159*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveGroupIDIsValid);
160*baf5664fSJonas Devlieghere 
161141a6263SVadim Macagon   bool is_valid = false;
162d5b44036SJonas Devlieghere   if (m_opaque_up) {
163d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveGroupIDIsValid();
164141a6263SVadim Macagon   }
165141a6263SVadim Macagon   return is_valid;
166141a6263SVadim Macagon }
167141a6263SVadim Macagon 
168141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetParentProcessID() {
169*baf5664fSJonas Devlieghere   LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetParentProcessID);
170*baf5664fSJonas Devlieghere 
171141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
172d5b44036SJonas Devlieghere   if (m_opaque_up) {
173d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetParentProcessID();
174141a6263SVadim Macagon   }
175141a6263SVadim Macagon   return proc_id;
176141a6263SVadim Macagon }
177