11ef7b2c8SOleksiy Vyalov //===-- SBLaunchInfo.cpp ----------------------------------------*- C++ -*-===// 21ef7b2c8SOleksiy Vyalov // 31ef7b2c8SOleksiy Vyalov // The LLVM Compiler Infrastructure 41ef7b2c8SOleksiy Vyalov // 51ef7b2c8SOleksiy Vyalov // This file is distributed under the University of Illinois Open Source 61ef7b2c8SOleksiy Vyalov // License. See LICENSE.TXT for details. 71ef7b2c8SOleksiy Vyalov // 81ef7b2c8SOleksiy Vyalov //===----------------------------------------------------------------------===// 91ef7b2c8SOleksiy Vyalov 101ef7b2c8SOleksiy Vyalov #include "lldb/API/SBLaunchInfo.h" 111ef7b2c8SOleksiy Vyalov 121ef7b2c8SOleksiy Vyalov #include "lldb/API/SBFileSpec.h" 131ef7b2c8SOleksiy Vyalov #include "lldb/API/SBListener.h" 141ef7b2c8SOleksiy Vyalov #include "lldb/Target/ProcessLaunchInfo.h" 151ef7b2c8SOleksiy Vyalov 161ef7b2c8SOleksiy Vyalov using namespace lldb; 171ef7b2c8SOleksiy Vyalov using namespace lldb_private; 181ef7b2c8SOleksiy Vyalov 191ef7b2c8SOleksiy Vyalov SBLaunchInfo::SBLaunchInfo (const char **argv) : 201ef7b2c8SOleksiy Vyalov m_opaque_sp(new ProcessLaunchInfo()) 211ef7b2c8SOleksiy Vyalov { 221ef7b2c8SOleksiy Vyalov m_opaque_sp->GetFlags().Reset (eLaunchFlagDebug | eLaunchFlagDisableASLR); 231ef7b2c8SOleksiy Vyalov if (argv && argv[0]) 241ef7b2c8SOleksiy Vyalov m_opaque_sp->GetArguments().SetArguments(argv); 251ef7b2c8SOleksiy Vyalov } 261ef7b2c8SOleksiy Vyalov 271ef7b2c8SOleksiy Vyalov SBLaunchInfo::~SBLaunchInfo() 281ef7b2c8SOleksiy Vyalov { 291ef7b2c8SOleksiy Vyalov } 301ef7b2c8SOleksiy Vyalov 311ef7b2c8SOleksiy Vyalov lldb_private::ProcessLaunchInfo & 321ef7b2c8SOleksiy Vyalov SBLaunchInfo::ref () 331ef7b2c8SOleksiy Vyalov { 341ef7b2c8SOleksiy Vyalov return *m_opaque_sp; 351ef7b2c8SOleksiy Vyalov } 361ef7b2c8SOleksiy Vyalov 378f37ca56SIlia K const lldb_private::ProcessLaunchInfo & 388f37ca56SIlia K SBLaunchInfo::ref () const 398f37ca56SIlia K { 408f37ca56SIlia K return *m_opaque_sp; 418f37ca56SIlia K } 428f37ca56SIlia K 431ef7b2c8SOleksiy Vyalov lldb::pid_t 441ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetProcessID() 451ef7b2c8SOleksiy Vyalov { 461ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetProcessID(); 471ef7b2c8SOleksiy Vyalov } 481ef7b2c8SOleksiy Vyalov 491ef7b2c8SOleksiy Vyalov uint32_t 501ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetUserID() 511ef7b2c8SOleksiy Vyalov { 521ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetUserID(); 531ef7b2c8SOleksiy Vyalov } 541ef7b2c8SOleksiy Vyalov 551ef7b2c8SOleksiy Vyalov uint32_t 561ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetGroupID() 571ef7b2c8SOleksiy Vyalov { 581ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetGroupID(); 591ef7b2c8SOleksiy Vyalov } 601ef7b2c8SOleksiy Vyalov 611ef7b2c8SOleksiy Vyalov bool 621ef7b2c8SOleksiy Vyalov SBLaunchInfo::UserIDIsValid () 631ef7b2c8SOleksiy Vyalov { 641ef7b2c8SOleksiy Vyalov return m_opaque_sp->UserIDIsValid(); 651ef7b2c8SOleksiy Vyalov } 661ef7b2c8SOleksiy Vyalov 671ef7b2c8SOleksiy Vyalov bool 681ef7b2c8SOleksiy Vyalov SBLaunchInfo::GroupIDIsValid () 691ef7b2c8SOleksiy Vyalov { 701ef7b2c8SOleksiy Vyalov return m_opaque_sp->GroupIDIsValid(); 711ef7b2c8SOleksiy Vyalov } 721ef7b2c8SOleksiy Vyalov 731ef7b2c8SOleksiy Vyalov void 741ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetUserID (uint32_t uid) 751ef7b2c8SOleksiy Vyalov { 761ef7b2c8SOleksiy Vyalov m_opaque_sp->SetUserID (uid); 771ef7b2c8SOleksiy Vyalov } 781ef7b2c8SOleksiy Vyalov 791ef7b2c8SOleksiy Vyalov void 801ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetGroupID (uint32_t gid) 811ef7b2c8SOleksiy Vyalov { 821ef7b2c8SOleksiy Vyalov m_opaque_sp->SetGroupID (gid); 831ef7b2c8SOleksiy Vyalov } 841ef7b2c8SOleksiy Vyalov 851ef7b2c8SOleksiy Vyalov SBFileSpec 861ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetExecutableFile () 871ef7b2c8SOleksiy Vyalov { 881ef7b2c8SOleksiy Vyalov return SBFileSpec (m_opaque_sp->GetExecutableFile()); 891ef7b2c8SOleksiy Vyalov } 901ef7b2c8SOleksiy Vyalov 911ef7b2c8SOleksiy Vyalov void 921ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetExecutableFile (SBFileSpec exe_file, bool add_as_first_arg) 931ef7b2c8SOleksiy Vyalov { 941ef7b2c8SOleksiy Vyalov m_opaque_sp->SetExecutableFile(exe_file.ref(), add_as_first_arg); 951ef7b2c8SOleksiy Vyalov } 961ef7b2c8SOleksiy Vyalov 971ef7b2c8SOleksiy Vyalov SBListener 981ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetListener () 991ef7b2c8SOleksiy Vyalov { 1001ef7b2c8SOleksiy Vyalov return SBListener(m_opaque_sp->GetListener()); 1011ef7b2c8SOleksiy Vyalov } 1021ef7b2c8SOleksiy Vyalov 1031ef7b2c8SOleksiy Vyalov void 1041ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetListener (SBListener &listener) 1051ef7b2c8SOleksiy Vyalov { 1061ef7b2c8SOleksiy Vyalov m_opaque_sp->SetListener(listener.GetSP()); 1071ef7b2c8SOleksiy Vyalov } 1081ef7b2c8SOleksiy Vyalov 1091ef7b2c8SOleksiy Vyalov uint32_t 1101ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetNumArguments () 1111ef7b2c8SOleksiy Vyalov { 1121ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetArguments().GetArgumentCount(); 1131ef7b2c8SOleksiy Vyalov } 1141ef7b2c8SOleksiy Vyalov 1151ef7b2c8SOleksiy Vyalov const char * 1161ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetArgumentAtIndex (uint32_t idx) 1171ef7b2c8SOleksiy Vyalov { 1181ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetArguments().GetArgumentAtIndex(idx); 1191ef7b2c8SOleksiy Vyalov } 1201ef7b2c8SOleksiy Vyalov 1211ef7b2c8SOleksiy Vyalov void 1221ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetArguments (const char **argv, bool append) 1231ef7b2c8SOleksiy Vyalov { 1241ef7b2c8SOleksiy Vyalov if (append) 1251ef7b2c8SOleksiy Vyalov { 1261ef7b2c8SOleksiy Vyalov if (argv) 1271ef7b2c8SOleksiy Vyalov m_opaque_sp->GetArguments().AppendArguments(argv); 1281ef7b2c8SOleksiy Vyalov } 1291ef7b2c8SOleksiy Vyalov else 1301ef7b2c8SOleksiy Vyalov { 1311ef7b2c8SOleksiy Vyalov if (argv) 1321ef7b2c8SOleksiy Vyalov m_opaque_sp->GetArguments().SetArguments(argv); 1331ef7b2c8SOleksiy Vyalov else 1341ef7b2c8SOleksiy Vyalov m_opaque_sp->GetArguments().Clear(); 1351ef7b2c8SOleksiy Vyalov } 1361ef7b2c8SOleksiy Vyalov } 1371ef7b2c8SOleksiy Vyalov 1381ef7b2c8SOleksiy Vyalov uint32_t 1391ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetNumEnvironmentEntries () 1401ef7b2c8SOleksiy Vyalov { 1411ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetEnvironmentEntries().GetArgumentCount(); 1421ef7b2c8SOleksiy Vyalov } 1431ef7b2c8SOleksiy Vyalov 1441ef7b2c8SOleksiy Vyalov const char * 1451ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetEnvironmentEntryAtIndex (uint32_t idx) 1461ef7b2c8SOleksiy Vyalov { 1471ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetEnvironmentEntries().GetArgumentAtIndex(idx); 1481ef7b2c8SOleksiy Vyalov } 1491ef7b2c8SOleksiy Vyalov 1501ef7b2c8SOleksiy Vyalov void 1511ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetEnvironmentEntries (const char **envp, bool append) 1521ef7b2c8SOleksiy Vyalov { 1531ef7b2c8SOleksiy Vyalov if (append) 1541ef7b2c8SOleksiy Vyalov { 1551ef7b2c8SOleksiy Vyalov if (envp) 1561ef7b2c8SOleksiy Vyalov m_opaque_sp->GetEnvironmentEntries().AppendArguments(envp); 1571ef7b2c8SOleksiy Vyalov } 1581ef7b2c8SOleksiy Vyalov else 1591ef7b2c8SOleksiy Vyalov { 1601ef7b2c8SOleksiy Vyalov if (envp) 1611ef7b2c8SOleksiy Vyalov m_opaque_sp->GetEnvironmentEntries().SetArguments(envp); 1621ef7b2c8SOleksiy Vyalov else 1631ef7b2c8SOleksiy Vyalov m_opaque_sp->GetEnvironmentEntries().Clear(); 1641ef7b2c8SOleksiy Vyalov } 1651ef7b2c8SOleksiy Vyalov } 1661ef7b2c8SOleksiy Vyalov 1671ef7b2c8SOleksiy Vyalov void 1681ef7b2c8SOleksiy Vyalov SBLaunchInfo::Clear () 1691ef7b2c8SOleksiy Vyalov { 1701ef7b2c8SOleksiy Vyalov m_opaque_sp->Clear(); 1711ef7b2c8SOleksiy Vyalov } 1721ef7b2c8SOleksiy Vyalov 1731ef7b2c8SOleksiy Vyalov const char * 1741ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetWorkingDirectory () const 1751ef7b2c8SOleksiy Vyalov { 176*d3173f34SChaoren Lin return m_opaque_sp->GetWorkingDirectory().GetCString(); 1771ef7b2c8SOleksiy Vyalov } 1781ef7b2c8SOleksiy Vyalov 1791ef7b2c8SOleksiy Vyalov void 1801ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetWorkingDirectory (const char *working_dir) 1811ef7b2c8SOleksiy Vyalov { 182*d3173f34SChaoren Lin m_opaque_sp->SetWorkingDirectory(FileSpec{working_dir, false}); 1831ef7b2c8SOleksiy Vyalov } 1841ef7b2c8SOleksiy Vyalov 1851ef7b2c8SOleksiy Vyalov uint32_t 1861ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetLaunchFlags () 1871ef7b2c8SOleksiy Vyalov { 1881ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetFlags().Get(); 1891ef7b2c8SOleksiy Vyalov } 1901ef7b2c8SOleksiy Vyalov 1911ef7b2c8SOleksiy Vyalov void 1921ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetLaunchFlags (uint32_t flags) 1931ef7b2c8SOleksiy Vyalov { 1941ef7b2c8SOleksiy Vyalov m_opaque_sp->GetFlags().Reset(flags); 1951ef7b2c8SOleksiy Vyalov } 1961ef7b2c8SOleksiy Vyalov 1971ef7b2c8SOleksiy Vyalov const char * 1981ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetProcessPluginName () 1991ef7b2c8SOleksiy Vyalov { 2001ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetProcessPluginName(); 2011ef7b2c8SOleksiy Vyalov } 2021ef7b2c8SOleksiy Vyalov 2031ef7b2c8SOleksiy Vyalov void 2041ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetProcessPluginName (const char *plugin_name) 2051ef7b2c8SOleksiy Vyalov { 2061ef7b2c8SOleksiy Vyalov return m_opaque_sp->SetProcessPluginName (plugin_name); 2071ef7b2c8SOleksiy Vyalov } 2081ef7b2c8SOleksiy Vyalov 2091ef7b2c8SOleksiy Vyalov const char * 2101ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetShell () 2111ef7b2c8SOleksiy Vyalov { 2121ef7b2c8SOleksiy Vyalov // Constify this string so that it is saved in the string pool. Otherwise 2131ef7b2c8SOleksiy Vyalov // it would be freed when this function goes out of scope. 2141ef7b2c8SOleksiy Vyalov ConstString shell(m_opaque_sp->GetShell().GetPath().c_str()); 2151ef7b2c8SOleksiy Vyalov return shell.AsCString(); 2161ef7b2c8SOleksiy Vyalov } 2171ef7b2c8SOleksiy Vyalov 2181ef7b2c8SOleksiy Vyalov void 2191ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetShell (const char * path) 2201ef7b2c8SOleksiy Vyalov { 2211ef7b2c8SOleksiy Vyalov m_opaque_sp->SetShell (FileSpec(path, false)); 2221ef7b2c8SOleksiy Vyalov } 2231ef7b2c8SOleksiy Vyalov 224c11b101fSEnrico Granata bool 225b38ef8c2SEnrico Granata SBLaunchInfo::GetShellExpandArguments () 226c11b101fSEnrico Granata { 227b38ef8c2SEnrico Granata return m_opaque_sp->GetShellExpandArguments(); 228c11b101fSEnrico Granata } 229c11b101fSEnrico Granata 230c11b101fSEnrico Granata void 231b38ef8c2SEnrico Granata SBLaunchInfo::SetShellExpandArguments (bool expand) 232c11b101fSEnrico Granata { 233b38ef8c2SEnrico Granata m_opaque_sp->SetShellExpandArguments(expand); 234c11b101fSEnrico Granata } 235c11b101fSEnrico Granata 2361ef7b2c8SOleksiy Vyalov uint32_t 2371ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetResumeCount () 2381ef7b2c8SOleksiy Vyalov { 2391ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetResumeCount(); 2401ef7b2c8SOleksiy Vyalov } 2411ef7b2c8SOleksiy Vyalov 2421ef7b2c8SOleksiy Vyalov void 2431ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetResumeCount (uint32_t c) 2441ef7b2c8SOleksiy Vyalov { 2451ef7b2c8SOleksiy Vyalov m_opaque_sp->SetResumeCount (c); 2461ef7b2c8SOleksiy Vyalov } 2471ef7b2c8SOleksiy Vyalov 2481ef7b2c8SOleksiy Vyalov bool 2491ef7b2c8SOleksiy Vyalov SBLaunchInfo::AddCloseFileAction (int fd) 2501ef7b2c8SOleksiy Vyalov { 2511ef7b2c8SOleksiy Vyalov return m_opaque_sp->AppendCloseFileAction(fd); 2521ef7b2c8SOleksiy Vyalov } 2531ef7b2c8SOleksiy Vyalov 2541ef7b2c8SOleksiy Vyalov bool 2551ef7b2c8SOleksiy Vyalov SBLaunchInfo::AddDuplicateFileAction (int fd, int dup_fd) 2561ef7b2c8SOleksiy Vyalov { 2571ef7b2c8SOleksiy Vyalov return m_opaque_sp->AppendDuplicateFileAction(fd, dup_fd); 2581ef7b2c8SOleksiy Vyalov } 2591ef7b2c8SOleksiy Vyalov 2601ef7b2c8SOleksiy Vyalov bool 2611ef7b2c8SOleksiy Vyalov SBLaunchInfo::AddOpenFileAction (int fd, const char *path, bool read, bool write) 2621ef7b2c8SOleksiy Vyalov { 263*d3173f34SChaoren Lin return m_opaque_sp->AppendOpenFileAction(fd, FileSpec{path, false}, read, write); 2641ef7b2c8SOleksiy Vyalov } 2651ef7b2c8SOleksiy Vyalov 2661ef7b2c8SOleksiy Vyalov bool 2671ef7b2c8SOleksiy Vyalov SBLaunchInfo::AddSuppressFileAction (int fd, bool read, bool write) 2681ef7b2c8SOleksiy Vyalov { 2691ef7b2c8SOleksiy Vyalov return m_opaque_sp->AppendSuppressFileAction(fd, read, write); 2701ef7b2c8SOleksiy Vyalov } 2711ef7b2c8SOleksiy Vyalov 2721ef7b2c8SOleksiy Vyalov void 2731ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetLaunchEventData (const char *data) 2741ef7b2c8SOleksiy Vyalov { 2751ef7b2c8SOleksiy Vyalov m_opaque_sp->SetLaunchEventData (data); 2761ef7b2c8SOleksiy Vyalov } 2771ef7b2c8SOleksiy Vyalov 2781ef7b2c8SOleksiy Vyalov const char * 2791ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetLaunchEventData () const 2801ef7b2c8SOleksiy Vyalov { 2811ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetLaunchEventData (); 2821ef7b2c8SOleksiy Vyalov } 2831ef7b2c8SOleksiy Vyalov 2841ef7b2c8SOleksiy Vyalov void 2851ef7b2c8SOleksiy Vyalov SBLaunchInfo::SetDetachOnError (bool enable) 2861ef7b2c8SOleksiy Vyalov { 2871ef7b2c8SOleksiy Vyalov m_opaque_sp->SetDetachOnError (enable); 2881ef7b2c8SOleksiy Vyalov } 2891ef7b2c8SOleksiy Vyalov 2901ef7b2c8SOleksiy Vyalov bool 2911ef7b2c8SOleksiy Vyalov SBLaunchInfo::GetDetachOnError () const 2921ef7b2c8SOleksiy Vyalov { 2931ef7b2c8SOleksiy Vyalov return m_opaque_sp->GetDetachOnError (); 2941ef7b2c8SOleksiy Vyalov } 295