1 //===-- ProcessInfo.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/Target/ProcessInfo.h"
11
12 // C Includes
13 #include <limits.h>
14
15 using namespace lldb;
16 using namespace lldb_private;
17
ProcessInfo()18 ProcessInfo::ProcessInfo () :
19 m_executable (),
20 m_arguments (),
21 m_environment (),
22 m_uid (UINT32_MAX),
23 m_gid (UINT32_MAX),
24 m_arch(),
25 m_pid (LLDB_INVALID_PROCESS_ID)
26 {
27 }
28
ProcessInfo(const char * name,const ArchSpec & arch,lldb::pid_t pid)29 ProcessInfo::ProcessInfo (const char *name, const ArchSpec &arch, lldb::pid_t pid) :
30 m_executable (name, false),
31 m_arguments (),
32 m_environment(),
33 m_uid (UINT32_MAX),
34 m_gid (UINT32_MAX),
35 m_arch (arch),
36 m_pid (pid)
37 {
38 }
39
40 void
Clear()41 ProcessInfo::Clear ()
42 {
43 m_executable.Clear();
44 m_arguments.Clear();
45 m_environment.Clear();
46 m_uid = UINT32_MAX;
47 m_gid = UINT32_MAX;
48 m_arch.Clear();
49 m_pid = LLDB_INVALID_PROCESS_ID;
50 }
51
52 const char *
GetName() const53 ProcessInfo::GetName() const
54 {
55 return m_executable.GetFilename().GetCString();
56 }
57
58 size_t
GetNameLength() const59 ProcessInfo::GetNameLength() const
60 {
61 return m_executable.GetFilename().GetLength();
62 }
63
64 void
SetExecutableFile(const FileSpec & exe_file,bool add_exe_file_as_first_arg)65 ProcessInfo::SetExecutableFile (const FileSpec &exe_file, bool add_exe_file_as_first_arg)
66 {
67 if (exe_file)
68 {
69 m_executable = exe_file;
70 if (add_exe_file_as_first_arg)
71 {
72 char filename[PATH_MAX];
73 if (exe_file.GetPath(filename, sizeof(filename)))
74 m_arguments.InsertArgumentAtIndex (0, filename);
75 }
76 }
77 else
78 {
79 m_executable.Clear();
80 }
81 }
82
83 const char *
GetArg0() const84 ProcessInfo::GetArg0 () const
85 {
86 if (m_arg0.empty())
87 return NULL;
88 return m_arg0.c_str();
89 }
90
91 void
SetArg0(const char * arg)92 ProcessInfo::SetArg0 (const char *arg)
93 {
94 if (arg && arg[0])
95 m_arg0 = arg;
96 else
97 m_arg0.clear();
98 }
99
100 void
SetArguments(char const ** argv,bool first_arg_is_executable)101 ProcessInfo::SetArguments (char const **argv, bool first_arg_is_executable)
102 {
103 m_arguments.SetArguments (argv);
104
105 // Is the first argument the executable?
106 if (first_arg_is_executable)
107 {
108 const char *first_arg = m_arguments.GetArgumentAtIndex (0);
109 if (first_arg)
110 {
111 // Yes the first argument is an executable, set it as the executable
112 // in the launch options. Don't resolve the file path as the path
113 // could be a remote platform path
114 const bool resolve = false;
115 m_executable.SetFile(first_arg, resolve);
116 }
117 }
118 }
119 void
SetArguments(const Args & args,bool first_arg_is_executable)120 ProcessInfo::SetArguments (const Args& args, bool first_arg_is_executable)
121 {
122 // Copy all arguments
123 m_arguments = args;
124
125 // Is the first argument the executable?
126 if (first_arg_is_executable)
127 {
128 const char *first_arg = m_arguments.GetArgumentAtIndex (0);
129 if (first_arg)
130 {
131 // Yes the first argument is an executable, set it as the executable
132 // in the launch options. Don't resolve the file path as the path
133 // could be a remote platform path
134 const bool resolve = false;
135 m_executable.SetFile(first_arg, resolve);
136 }
137 }
138 }
139