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