1 //===-- SBProcessInfo.cpp ---------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "lldb/API/SBProcessInfo.h"
10 #include "SBReproducerPrivate.h"
11 #include "Utils.h"
12 #include "lldb/API/SBFileSpec.h"
13 #include "lldb/Utility/ProcessInfo.h"
14 
15 using namespace lldb;
16 using namespace lldb_private;
17 
18 SBProcessInfo::SBProcessInfo() : m_opaque_up() {
19   LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBProcessInfo);
20 }
21 
22 SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_up() {
23   LLDB_RECORD_CONSTRUCTOR(SBProcessInfo, (const lldb::SBProcessInfo &), rhs);
24 
25   m_opaque_up = clone(rhs.m_opaque_up);
26 }
27 
28 SBProcessInfo::~SBProcessInfo() {}
29 
30 SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
31   LLDB_RECORD_METHOD(lldb::SBProcessInfo &,
32                      SBProcessInfo, operator=,(const lldb::SBProcessInfo &),
33                      rhs);
34 
35   if (this != &rhs)
36     m_opaque_up = clone(rhs.m_opaque_up);
37   return *this;
38 }
39 
40 ProcessInstanceInfo &SBProcessInfo::ref() {
41   if (m_opaque_up == nullptr) {
42     m_opaque_up.reset(new ProcessInstanceInfo());
43   }
44   return *m_opaque_up;
45 }
46 
47 void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
48   ref() = proc_info_ref;
49 }
50 
51 bool SBProcessInfo::IsValid() const {
52   LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBProcessInfo, IsValid);
53 
54   return m_opaque_up != nullptr;
55 }
56 
57 const char *SBProcessInfo::GetName() {
58   LLDB_RECORD_METHOD_NO_ARGS(const char *, SBProcessInfo, GetName);
59 
60   const char *name = nullptr;
61   if (m_opaque_up) {
62     name = m_opaque_up->GetName();
63   }
64   return name;
65 }
66 
67 SBFileSpec SBProcessInfo::GetExecutableFile() {
68   LLDB_RECORD_METHOD_NO_ARGS(lldb::SBFileSpec, SBProcessInfo,
69                              GetExecutableFile);
70 
71   SBFileSpec file_spec;
72   if (m_opaque_up) {
73     file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
74   }
75   return LLDB_RECORD_RESULT(file_spec);
76 }
77 
78 lldb::pid_t SBProcessInfo::GetProcessID() {
79   LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetProcessID);
80 
81   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
82   if (m_opaque_up) {
83     proc_id = m_opaque_up->GetProcessID();
84   }
85   return proc_id;
86 }
87 
88 uint32_t SBProcessInfo::GetUserID() {
89   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetUserID);
90 
91   uint32_t user_id = UINT32_MAX;
92   if (m_opaque_up) {
93     user_id = m_opaque_up->GetUserID();
94   }
95   return user_id;
96 }
97 
98 uint32_t SBProcessInfo::GetGroupID() {
99   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetGroupID);
100 
101   uint32_t group_id = UINT32_MAX;
102   if (m_opaque_up) {
103     group_id = m_opaque_up->GetGroupID();
104   }
105   return group_id;
106 }
107 
108 bool SBProcessInfo::UserIDIsValid() {
109   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, UserIDIsValid);
110 
111   bool is_valid = false;
112   if (m_opaque_up) {
113     is_valid = m_opaque_up->UserIDIsValid();
114   }
115   return is_valid;
116 }
117 
118 bool SBProcessInfo::GroupIDIsValid() {
119   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, GroupIDIsValid);
120 
121   bool is_valid = false;
122   if (m_opaque_up) {
123     is_valid = m_opaque_up->GroupIDIsValid();
124   }
125   return is_valid;
126 }
127 
128 uint32_t SBProcessInfo::GetEffectiveUserID() {
129   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveUserID);
130 
131   uint32_t user_id = UINT32_MAX;
132   if (m_opaque_up) {
133     user_id = m_opaque_up->GetEffectiveUserID();
134   }
135   return user_id;
136 }
137 
138 uint32_t SBProcessInfo::GetEffectiveGroupID() {
139   LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBProcessInfo, GetEffectiveGroupID);
140 
141   uint32_t group_id = UINT32_MAX;
142   if (m_opaque_up) {
143     group_id = m_opaque_up->GetEffectiveGroupID();
144   }
145   return group_id;
146 }
147 
148 bool SBProcessInfo::EffectiveUserIDIsValid() {
149   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveUserIDIsValid);
150 
151   bool is_valid = false;
152   if (m_opaque_up) {
153     is_valid = m_opaque_up->EffectiveUserIDIsValid();
154   }
155   return is_valid;
156 }
157 
158 bool SBProcessInfo::EffectiveGroupIDIsValid() {
159   LLDB_RECORD_METHOD_NO_ARGS(bool, SBProcessInfo, EffectiveGroupIDIsValid);
160 
161   bool is_valid = false;
162   if (m_opaque_up) {
163     is_valid = m_opaque_up->EffectiveGroupIDIsValid();
164   }
165   return is_valid;
166 }
167 
168 lldb::pid_t SBProcessInfo::GetParentProcessID() {
169   LLDB_RECORD_METHOD_NO_ARGS(lldb::pid_t, SBProcessInfo, GetParentProcessID);
170 
171   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
172   if (m_opaque_up) {
173     proc_id = m_opaque_up->GetParentProcessID();
174   }
175   return proc_id;
176 }
177