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