SBLaunchInfo.cpp revision 344779
1//===-- SBLaunchInfo.cpp ----------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/API/SBLaunchInfo.h" 11 12#include "lldb/API/SBFileSpec.h" 13#include "lldb/API/SBListener.h" 14#include "lldb/Target/ProcessLaunchInfo.h" 15 16using namespace lldb; 17using namespace lldb_private; 18 19class lldb_private::SBLaunchInfoImpl : public ProcessLaunchInfo { 20public: 21 SBLaunchInfoImpl() 22 : ProcessLaunchInfo(), m_envp(GetEnvironment().getEnvp()) {} 23 24 const char *const *GetEnvp() const { return m_envp; } 25 void RegenerateEnvp() { m_envp = GetEnvironment().getEnvp(); } 26 27 SBLaunchInfoImpl &operator=(const ProcessLaunchInfo &rhs) { 28 ProcessLaunchInfo::operator=(rhs); 29 RegenerateEnvp(); 30 return *this; 31 } 32 33private: 34 Environment::Envp m_envp; 35}; 36 37SBLaunchInfo::SBLaunchInfo(const char **argv) 38 : m_opaque_sp(new SBLaunchInfoImpl()) { 39 m_opaque_sp->GetFlags().Reset(eLaunchFlagDebug | eLaunchFlagDisableASLR); 40 if (argv && argv[0]) 41 m_opaque_sp->GetArguments().SetArguments(argv); 42} 43 44SBLaunchInfo::~SBLaunchInfo() {} 45 46const lldb_private::ProcessLaunchInfo &SBLaunchInfo::ref() const { 47 return *m_opaque_sp; 48} 49 50void SBLaunchInfo::set_ref(const ProcessLaunchInfo &info) { 51 *m_opaque_sp = info; 52} 53 54lldb::pid_t SBLaunchInfo::GetProcessID() { return m_opaque_sp->GetProcessID(); } 55 56uint32_t SBLaunchInfo::GetUserID() { return m_opaque_sp->GetUserID(); } 57 58uint32_t SBLaunchInfo::GetGroupID() { return m_opaque_sp->GetGroupID(); } 59 60bool SBLaunchInfo::UserIDIsValid() { return m_opaque_sp->UserIDIsValid(); } 61 62bool SBLaunchInfo::GroupIDIsValid() { return m_opaque_sp->GroupIDIsValid(); } 63 64void SBLaunchInfo::SetUserID(uint32_t uid) { m_opaque_sp->SetUserID(uid); } 65 66void SBLaunchInfo::SetGroupID(uint32_t gid) { m_opaque_sp->SetGroupID(gid); } 67 68SBFileSpec SBLaunchInfo::GetExecutableFile() { 69 return SBFileSpec(m_opaque_sp->GetExecutableFile()); 70} 71 72void SBLaunchInfo::SetExecutableFile(SBFileSpec exe_file, 73 bool add_as_first_arg) { 74 m_opaque_sp->SetExecutableFile(exe_file.ref(), add_as_first_arg); 75} 76 77SBListener SBLaunchInfo::GetListener() { 78 return SBListener(m_opaque_sp->GetListener()); 79} 80 81void SBLaunchInfo::SetListener(SBListener &listener) { 82 m_opaque_sp->SetListener(listener.GetSP()); 83} 84 85uint32_t SBLaunchInfo::GetNumArguments() { 86 return m_opaque_sp->GetArguments().GetArgumentCount(); 87} 88 89const char *SBLaunchInfo::GetArgumentAtIndex(uint32_t idx) { 90 return m_opaque_sp->GetArguments().GetArgumentAtIndex(idx); 91} 92 93void SBLaunchInfo::SetArguments(const char **argv, bool append) { 94 if (append) { 95 if (argv) 96 m_opaque_sp->GetArguments().AppendArguments(argv); 97 } else { 98 if (argv) 99 m_opaque_sp->GetArguments().SetArguments(argv); 100 else 101 m_opaque_sp->GetArguments().Clear(); 102 } 103} 104 105uint32_t SBLaunchInfo::GetNumEnvironmentEntries() { 106 return m_opaque_sp->GetEnvironment().size(); 107} 108 109const char *SBLaunchInfo::GetEnvironmentEntryAtIndex(uint32_t idx) { 110 if (idx > GetNumEnvironmentEntries()) 111 return nullptr; 112 return m_opaque_sp->GetEnvp()[idx]; 113} 114 115void SBLaunchInfo::SetEnvironmentEntries(const char **envp, bool append) { 116 Environment env(envp); 117 if (append) 118 m_opaque_sp->GetEnvironment().insert(env.begin(), env.end()); 119 else 120 m_opaque_sp->GetEnvironment() = env; 121 m_opaque_sp->RegenerateEnvp(); 122} 123 124void SBLaunchInfo::Clear() { m_opaque_sp->Clear(); } 125 126const char *SBLaunchInfo::GetWorkingDirectory() const { 127 return m_opaque_sp->GetWorkingDirectory().GetCString(); 128} 129 130void SBLaunchInfo::SetWorkingDirectory(const char *working_dir) { 131 m_opaque_sp->SetWorkingDirectory(FileSpec(working_dir)); 132} 133 134uint32_t SBLaunchInfo::GetLaunchFlags() { 135 return m_opaque_sp->GetFlags().Get(); 136} 137 138void SBLaunchInfo::SetLaunchFlags(uint32_t flags) { 139 m_opaque_sp->GetFlags().Reset(flags); 140} 141 142const char *SBLaunchInfo::GetProcessPluginName() { 143 return m_opaque_sp->GetProcessPluginName(); 144} 145 146void SBLaunchInfo::SetProcessPluginName(const char *plugin_name) { 147 return m_opaque_sp->SetProcessPluginName(plugin_name); 148} 149 150const char *SBLaunchInfo::GetShell() { 151 // Constify this string so that it is saved in the string pool. Otherwise it 152 // would be freed when this function goes out of scope. 153 ConstString shell(m_opaque_sp->GetShell().GetPath().c_str()); 154 return shell.AsCString(); 155} 156 157void SBLaunchInfo::SetShell(const char *path) { 158 m_opaque_sp->SetShell(FileSpec(path)); 159} 160 161bool SBLaunchInfo::GetShellExpandArguments() { 162 return m_opaque_sp->GetShellExpandArguments(); 163} 164 165void SBLaunchInfo::SetShellExpandArguments(bool expand) { 166 m_opaque_sp->SetShellExpandArguments(expand); 167} 168 169uint32_t SBLaunchInfo::GetResumeCount() { 170 return m_opaque_sp->GetResumeCount(); 171} 172 173void SBLaunchInfo::SetResumeCount(uint32_t c) { 174 m_opaque_sp->SetResumeCount(c); 175} 176 177bool SBLaunchInfo::AddCloseFileAction(int fd) { 178 return m_opaque_sp->AppendCloseFileAction(fd); 179} 180 181bool SBLaunchInfo::AddDuplicateFileAction(int fd, int dup_fd) { 182 return m_opaque_sp->AppendDuplicateFileAction(fd, dup_fd); 183} 184 185bool SBLaunchInfo::AddOpenFileAction(int fd, const char *path, bool read, 186 bool write) { 187 return m_opaque_sp->AppendOpenFileAction(fd, FileSpec(path), read, write); 188} 189 190bool SBLaunchInfo::AddSuppressFileAction(int fd, bool read, bool write) { 191 return m_opaque_sp->AppendSuppressFileAction(fd, read, write); 192} 193 194void SBLaunchInfo::SetLaunchEventData(const char *data) { 195 m_opaque_sp->SetLaunchEventData(data); 196} 197 198const char *SBLaunchInfo::GetLaunchEventData() const { 199 return m_opaque_sp->GetLaunchEventData(); 200} 201 202void SBLaunchInfo::SetDetachOnError(bool enable) { 203 m_opaque_sp->SetDetachOnError(enable); 204} 205 206bool SBLaunchInfo::GetDetachOnError() const { 207 return m_opaque_sp->GetDetachOnError(); 208} 209