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*bd4bf82aSJonas Devlieghere #include "Utils.h"
11141a6263SVadim Macagon #include "lldb/API/SBFileSpec.h"
12805e7106SZachary Turner #include "lldb/Utility/ProcessInfo.h"
13141a6263SVadim Macagon 
14141a6263SVadim Macagon using namespace lldb;
15141a6263SVadim Macagon using namespace lldb_private;
16141a6263SVadim Macagon 
17d5b44036SJonas Devlieghere SBProcessInfo::SBProcessInfo() : m_opaque_up() {}
18141a6263SVadim Macagon 
19d5b44036SJonas Devlieghere SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_up() {
20*bd4bf82aSJonas Devlieghere   m_opaque_up = clone(rhs.m_opaque_up);
21141a6263SVadim Macagon }
22141a6263SVadim Macagon 
23141a6263SVadim Macagon SBProcessInfo::~SBProcessInfo() {}
24141a6263SVadim Macagon 
25141a6263SVadim Macagon SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
26*bd4bf82aSJonas Devlieghere   if (this != &rhs)
27*bd4bf82aSJonas Devlieghere     m_opaque_up = clone(rhs.m_opaque_up);
28141a6263SVadim Macagon   return *this;
29141a6263SVadim Macagon }
30141a6263SVadim Macagon 
31141a6263SVadim Macagon ProcessInstanceInfo &SBProcessInfo::ref() {
32d5b44036SJonas Devlieghere   if (m_opaque_up == nullptr) {
33d5b44036SJonas Devlieghere     m_opaque_up.reset(new ProcessInstanceInfo());
34141a6263SVadim Macagon   }
35d5b44036SJonas Devlieghere   return *m_opaque_up;
36141a6263SVadim Macagon }
37141a6263SVadim Macagon 
38141a6263SVadim Macagon void SBProcessInfo::SetProcessInfo(const ProcessInstanceInfo &proc_info_ref) {
39141a6263SVadim Macagon   ref() = proc_info_ref;
40141a6263SVadim Macagon }
41141a6263SVadim Macagon 
42d5b44036SJonas Devlieghere bool SBProcessInfo::IsValid() const { return m_opaque_up != nullptr; }
43141a6263SVadim Macagon 
44141a6263SVadim Macagon const char *SBProcessInfo::GetName() {
45141a6263SVadim Macagon   const char *name = nullptr;
46d5b44036SJonas Devlieghere   if (m_opaque_up) {
47d5b44036SJonas Devlieghere     name = m_opaque_up->GetName();
48141a6263SVadim Macagon   }
49141a6263SVadim Macagon   return name;
50141a6263SVadim Macagon }
51141a6263SVadim Macagon 
52141a6263SVadim Macagon SBFileSpec SBProcessInfo::GetExecutableFile() {
53141a6263SVadim Macagon   SBFileSpec file_spec;
54d5b44036SJonas Devlieghere   if (m_opaque_up) {
55d5b44036SJonas Devlieghere     file_spec.SetFileSpec(m_opaque_up->GetExecutableFile());
56141a6263SVadim Macagon   }
57141a6263SVadim Macagon   return file_spec;
58141a6263SVadim Macagon }
59141a6263SVadim Macagon 
60141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetProcessID() {
61141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
62d5b44036SJonas Devlieghere   if (m_opaque_up) {
63d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetProcessID();
64141a6263SVadim Macagon   }
65141a6263SVadim Macagon   return proc_id;
66141a6263SVadim Macagon }
67141a6263SVadim Macagon 
68141a6263SVadim Macagon uint32_t SBProcessInfo::GetUserID() {
69141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
70d5b44036SJonas Devlieghere   if (m_opaque_up) {
71d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetUserID();
72141a6263SVadim Macagon   }
73141a6263SVadim Macagon   return user_id;
74141a6263SVadim Macagon }
75141a6263SVadim Macagon 
76141a6263SVadim Macagon uint32_t SBProcessInfo::GetGroupID() {
77141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
78d5b44036SJonas Devlieghere   if (m_opaque_up) {
79d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetGroupID();
80141a6263SVadim Macagon   }
81141a6263SVadim Macagon   return group_id;
82141a6263SVadim Macagon }
83141a6263SVadim Macagon 
84141a6263SVadim Macagon bool SBProcessInfo::UserIDIsValid() {
85141a6263SVadim Macagon   bool is_valid = false;
86d5b44036SJonas Devlieghere   if (m_opaque_up) {
87d5b44036SJonas Devlieghere     is_valid = m_opaque_up->UserIDIsValid();
88141a6263SVadim Macagon   }
89141a6263SVadim Macagon   return is_valid;
90141a6263SVadim Macagon }
91141a6263SVadim Macagon 
92141a6263SVadim Macagon bool SBProcessInfo::GroupIDIsValid() {
93141a6263SVadim Macagon   bool is_valid = false;
94d5b44036SJonas Devlieghere   if (m_opaque_up) {
95d5b44036SJonas Devlieghere     is_valid = m_opaque_up->GroupIDIsValid();
96141a6263SVadim Macagon   }
97141a6263SVadim Macagon   return is_valid;
98141a6263SVadim Macagon }
99141a6263SVadim Macagon 
100141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveUserID() {
101141a6263SVadim Macagon   uint32_t user_id = UINT32_MAX;
102d5b44036SJonas Devlieghere   if (m_opaque_up) {
103d5b44036SJonas Devlieghere     user_id = m_opaque_up->GetEffectiveUserID();
104141a6263SVadim Macagon   }
105141a6263SVadim Macagon   return user_id;
106141a6263SVadim Macagon }
107141a6263SVadim Macagon 
108141a6263SVadim Macagon uint32_t SBProcessInfo::GetEffectiveGroupID() {
109141a6263SVadim Macagon   uint32_t group_id = UINT32_MAX;
110d5b44036SJonas Devlieghere   if (m_opaque_up) {
111d5b44036SJonas Devlieghere     group_id = m_opaque_up->GetEffectiveGroupID();
112141a6263SVadim Macagon   }
113141a6263SVadim Macagon   return group_id;
114141a6263SVadim Macagon }
115141a6263SVadim Macagon 
116141a6263SVadim Macagon bool SBProcessInfo::EffectiveUserIDIsValid() {
117141a6263SVadim Macagon   bool is_valid = false;
118d5b44036SJonas Devlieghere   if (m_opaque_up) {
119d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveUserIDIsValid();
120141a6263SVadim Macagon   }
121141a6263SVadim Macagon   return is_valid;
122141a6263SVadim Macagon }
123141a6263SVadim Macagon 
124141a6263SVadim Macagon bool SBProcessInfo::EffectiveGroupIDIsValid() {
125141a6263SVadim Macagon   bool is_valid = false;
126d5b44036SJonas Devlieghere   if (m_opaque_up) {
127d5b44036SJonas Devlieghere     is_valid = m_opaque_up->EffectiveGroupIDIsValid();
128141a6263SVadim Macagon   }
129141a6263SVadim Macagon   return is_valid;
130141a6263SVadim Macagon }
131141a6263SVadim Macagon 
132141a6263SVadim Macagon lldb::pid_t SBProcessInfo::GetParentProcessID() {
133141a6263SVadim Macagon   lldb::pid_t proc_id = LLDB_INVALID_PROCESS_ID;
134d5b44036SJonas Devlieghere   if (m_opaque_up) {
135d5b44036SJonas Devlieghere     proc_id = m_opaque_up->GetParentProcessID();
136141a6263SVadim Macagon   }
137141a6263SVadim Macagon   return proc_id;
138141a6263SVadim Macagon }
139