blob: 22da2c6a2a29e3cbfffa90acf3fa7da560193f45 [file] [log] [blame]
Todd Fiala6d6b55d2014-06-30 00:30:53 +00001//===-- 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
15using namespace lldb;
16using namespace lldb_private;
17
18ProcessInfo::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
29ProcessInfo::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
40void
41ProcessInfo::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
52const char *
53ProcessInfo::GetName() const
54{
55 return m_executable.GetFilename().GetCString();
56}
57
58size_t
59ProcessInfo::GetNameLength() const
60{
61 return m_executable.GetFilename().GetLength();
62}
63
64void
65ProcessInfo::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
83const char *
84ProcessInfo::GetArg0 () const
85{
86 if (m_arg0.empty())
87 return NULL;
88 return m_arg0.c_str();
89}
90
91void
92ProcessInfo::SetArg0 (const char *arg)
93{
94 if (arg && arg[0])
95 m_arg0 = arg;
96 else
97 m_arg0.clear();
98}
99
100void
101ProcessInfo::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}
119void
120ProcessInfo::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}