1*141a6263SVadim Macagon //===-- SBProcessInfo.cpp ---------------------------------------*- C++ -*-===//
2*141a6263SVadim Macagon //
3*141a6263SVadim Macagon //                     The LLVM Compiler Infrastructure
4*141a6263SVadim Macagon //
5*141a6263SVadim Macagon // This file is distributed under the University of Illinois Open Source
6*141a6263SVadim Macagon // License. See LICENSE.TXT for details.
7*141a6263SVadim Macagon //
8*141a6263SVadim Macagon //===----------------------------------------------------------------------===//
9*141a6263SVadim Macagon 
10*141a6263SVadim Macagon #include "lldb/API/SBProcessInfo.h"
11*141a6263SVadim Macagon 
12*141a6263SVadim Macagon #include "lldb/API/SBFileSpec.h"
13*141a6263SVadim Macagon #include "lldb/Target/Process.h"
14*141a6263SVadim Macagon 
15*141a6263SVadim Macagon using namespace lldb;
16*141a6263SVadim Macagon using namespace lldb_private;
17*141a6263SVadim Macagon 
18*141a6263SVadim Macagon SBProcessInfo::SBProcessInfo() : m_opaque_ap() {}
19*141a6263SVadim Macagon 
20*141a6263SVadim Macagon SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_ap() {
21*141a6263SVadim Macagon   if (rhs.IsValid()) {
22*141a6263SVadim Macagon     ref() = *rhs.m_opaque_ap;
23*141a6263SVadim Macagon   }
24*141a6263SVadim Macagon }
25*141a6263SVadim Macagon 
26*141a6263SVadim Macagon SBProcessInfo::~SBProcessInfo() {}
27*141a6263SVadim Macagon 
28*141a6263SVadim Macagon SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
29*141a6263SVadim Macagon   if (this != &rhs) {
30*141a6263SVadim Macagon     if (rhs.IsValid())
31*141a6263SVadim Macagon       ref() = *rhs.m_opaque_ap;
32*141a6263SVadim Macagon     else
33*141a6263SVadim Macagon       m_opaque_ap.reset();
34*141a6263SVadim Macagon   }
35*141a6263SVadim Macagon   return *this;
36*141a6263SVadim Macagon }
37*141a6263SVadim Macagon 
38*141a6263SVadim Macagon ProcessInstanceInfo &SBProcessInfo::ref() {
39*141a6263SVadim Macagon   if (m_opaque_ap.get() == nullptr) {
40*141a6263SVadim Macagon     m_opaque_ap.reset(new ProcessInstanceInfo());
41*141a6263SVadim Macagon   }
42*141a6263SVadim Macagon   return *m_opaque_ap;
43*141a6263SVadim Macagon }
44*141a6263SVadim Macagon 
45*141a6263SVadim Macagon void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
46*141a6263SVadim Macagon   ref() = proc_info_ref;
47*141a6263SVadim Macagon }
48*141a6263SVadim Macagon 
49*141a6263SVadim Macagon bool SBProcessInfo::IsValid() const { return m_opaque_ap.get() != nullptr; }
50*141a6263SVadim Macagon 
51*141a6263SVadim Macagon const char *SBProcessInfo::GetName() {
52*141a6263SVadim Macagon   const char *name = nullptr;
53*141a6263SVadim Macagon   if (m_opaque_ap) {
54*141a6263SVadim Macagon     name = m_opaque_ap->GetName();
55*141a6263SVadim Macagon   }
56*141a6263SVadim Macagon   return name;
57*141a6263SVadim Macagon }
58*141a6263SVadim Macagon 
59*141a6263SVadim Macagon SBFileSpec SBProcessInfo::GetExecutableFile() {
60*141a6263SVadim Macagon   SBFileSpec file_spec;
61*141a6263SVadim Macagon   if (m_opaque_ap) {
62*141a6263SVadim Macagon     file_spec.SetFileSpec(m_opaque_ap->GetExecutableFile());
63*141a6263SVadim Macagon   }
64*141a6263SVadim Macagon   return file_spec;
65*141a6263SVadim Macagon }
66*141a6263SVadim Macagon 
67*141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetProcessID() {
68*141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
69*141a6263SVadim Macagon   if (m_opaque_ap) {
70*141a6263SVadim Macagon     proc_id = m_opaque_ap->GetProcessID();
71*141a6263SVadim Macagon   }
72*141a6263SVadim Macagon   return proc_id;
73*141a6263SVadim Macagon }
74*141a6263SVadim Macagon 
75*141a6263SVadim Macagon uint32_t SBProcessInfo::GetUserID() {
76*141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
77*141a6263SVadim Macagon   if (m_opaque_ap) {
78*141a6263SVadim Macagon     user_id = m_opaque_ap->GetUserID();
79*141a6263SVadim Macagon   }
80*141a6263SVadim Macagon   return user_id;
81*141a6263SVadim Macagon }
82*141a6263SVadim Macagon 
83*141a6263SVadim Macagon uint32_t SBProcessInfo::GetGroupID() {
84*141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
85*141a6263SVadim Macagon   if (m_opaque_ap) {
86*141a6263SVadim Macagon     group_id = m_opaque_ap->GetGroupID();
87*141a6263SVadim Macagon   }
88*141a6263SVadim Macagon   return group_id;
89*141a6263SVadim Macagon }
90*141a6263SVadim Macagon 
91*141a6263SVadim Macagon bool SBProcessInfo::UserIDIsValid() {
92*141a6263SVadim Macagon   bool is_valid = false;
93*141a6263SVadim Macagon   if (m_opaque_ap) {
94*141a6263SVadim Macagon     is_valid = m_opaque_ap->UserIDIsValid();
95*141a6263SVadim Macagon   }
96*141a6263SVadim Macagon   return is_valid;
97*141a6263SVadim Macagon }
98*141a6263SVadim Macagon 
99*141a6263SVadim Macagon bool SBProcessInfo::GroupIDIsValid() {
100*141a6263SVadim Macagon   bool is_valid = false;
101*141a6263SVadim Macagon   if (m_opaque_ap) {
102*141a6263SVadim Macagon     is_valid = m_opaque_ap->GroupIDIsValid();
103*141a6263SVadim Macagon   }
104*141a6263SVadim Macagon   return is_valid;
105*141a6263SVadim Macagon }
106*141a6263SVadim Macagon 
107*141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveUserID() {
108*141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
109*141a6263SVadim Macagon   if (m_opaque_ap) {
110*141a6263SVadim Macagon     user_id = m_opaque_ap->GetEffectiveUserID();
111*141a6263SVadim Macagon   }
112*141a6263SVadim Macagon   return user_id;
113*141a6263SVadim Macagon }
114*141a6263SVadim Macagon 
115*141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveGroupID() {
116*141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
117*141a6263SVadim Macagon   if (m_opaque_ap) {
118*141a6263SVadim Macagon     group_id = m_opaque_ap->GetEffectiveGroupID();
119*141a6263SVadim Macagon   }
120*141a6263SVadim Macagon   return group_id;
121*141a6263SVadim Macagon }
122*141a6263SVadim Macagon 
123*141a6263SVadim Macagon bool SBProcessInfo::EffectiveUserIDIsValid() {
124*141a6263SVadim Macagon   bool is_valid = false;
125*141a6263SVadim Macagon   if (m_opaque_ap) {
126*141a6263SVadim Macagon     is_valid = m_opaque_ap->EffectiveUserIDIsValid();
127*141a6263SVadim Macagon   }
128*141a6263SVadim Macagon   return is_valid;
129*141a6263SVadim Macagon }
130*141a6263SVadim Macagon 
131*141a6263SVadim Macagon bool SBProcessInfo::EffectiveGroupIDIsValid() {
132*141a6263SVadim Macagon   bool is_valid = false;
133*141a6263SVadim Macagon   if (m_opaque_ap) {
134*141a6263SVadim Macagon     is_valid = m_opaque_ap->EffectiveGroupIDIsValid();
135*141a6263SVadim Macagon   }
136*141a6263SVadim Macagon   return is_valid;
137*141a6263SVadim Macagon }
138*141a6263SVadim Macagon 
139*141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetParentProcessID() {
140*141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
141*141a6263SVadim Macagon   if (m_opaque_ap) {
142*141a6263SVadim Macagon     proc_id = m_opaque_ap->GetParentProcessID();
143*141a6263SVadim Macagon   }
144*141a6263SVadim Macagon   return proc_id;
145*141a6263SVadim Macagon }
146