blob: 9aa3f8ace8f2a0fafe62304b5f9687c06914c908 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001//===-- SBFileSpec.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/SBFileSpec.h"
Caroline Tice98f930f2010-09-20 05:20:02 +000011#include "lldb/API/SBStream.h"
Chris Lattner24943d22010-06-08 16:52:24 +000012#include "lldb/Core/FileSpec.h"
Caroline Tice7826c882010-10-26 03:11:13 +000013#include "lldb/Core/Log.h"
Chris Lattner24943d22010-06-08 16:52:24 +000014
15using namespace lldb;
16using namespace lldb_private;
17
18
19
20SBFileSpec::SBFileSpec () :
Greg Clayton63094e02010-06-23 01:19:29 +000021 m_opaque_ap()
Chris Lattner24943d22010-06-08 16:52:24 +000022{
23}
24
25SBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
Greg Clayton63094e02010-06-23 01:19:29 +000026 m_opaque_ap()
Chris Lattner24943d22010-06-08 16:52:24 +000027{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000028 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
29
30 if (rhs.m_opaque_ap.get())
31 m_opaque_ap.reset (new FileSpec (rhs.get()));
Caroline Tice7826c882010-10-26 03:11:13 +000032
33 if (log)
34 {
35 SBStream sstr;
Caroline Tice61ba7ec2010-10-26 23:49:36 +000036 GetDescription (sstr);
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000037 log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec rhs.ap=%p) => SBFileSpec(%p) ('%s')",
Caroline Tice61ba7ec2010-10-26 23:49:36 +000038 rhs.m_opaque_ap.get(), m_opaque_ap.get(), sstr.GetData());
Caroline Tice7826c882010-10-26 03:11:13 +000039 }
Chris Lattner24943d22010-06-08 16:52:24 +000040}
41
Greg Clayton537a7a82010-10-20 20:54:39 +000042// Deprected!!!
Chris Lattner24943d22010-06-08 16:52:24 +000043SBFileSpec::SBFileSpec (const char *path) :
Greg Clayton537a7a82010-10-20 20:54:39 +000044 m_opaque_ap(new FileSpec (path, true))
45{
46}
47
48SBFileSpec::SBFileSpec (const char *path, bool resolve) :
49 m_opaque_ap(new FileSpec (path, resolve))
Chris Lattner24943d22010-06-08 16:52:24 +000050{
Caroline Tice61ba7ec2010-10-26 23:49:36 +000051 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +000052
53 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000054 log->Printf ("SBFileSpec::SBFileSpec (path='%s', resolve=%i) => SBFileSpec(%p)", path,
55 resolve, m_opaque_ap.get());
Chris Lattner24943d22010-06-08 16:52:24 +000056}
57
58SBFileSpec::~SBFileSpec ()
59{
60}
61
62const SBFileSpec &
63SBFileSpec::operator = (const SBFileSpec &rhs)
64{
65 if (this != &rhs)
66 {
67 if (rhs.IsValid())
Greg Clayton63094e02010-06-23 01:19:29 +000068 m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get()));
Chris Lattner24943d22010-06-08 16:52:24 +000069 }
70 return *this;
71}
72
73bool
74SBFileSpec::IsValid() const
75{
Greg Clayton63094e02010-06-23 01:19:29 +000076 return m_opaque_ap.get() != NULL;
Chris Lattner24943d22010-06-08 16:52:24 +000077}
78
79bool
80SBFileSpec::Exists () const
81{
Caroline Tice7826c882010-10-26 03:11:13 +000082 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
83
Caroline Tice7826c882010-10-26 03:11:13 +000084 bool result = false;
Greg Clayton63094e02010-06-23 01:19:29 +000085 if (m_opaque_ap.get())
Caroline Tice7826c882010-10-26 03:11:13 +000086 result = m_opaque_ap->Exists();
87
88 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +000089 log->Printf ("SBFileSpec(%p)::Exists () => %s", m_opaque_ap.get(), (result ? "true" : "false"));
Caroline Tice7826c882010-10-26 03:11:13 +000090
91 return result;
Chris Lattner24943d22010-06-08 16:52:24 +000092}
93
Caroline Ticeeddffe92010-09-10 04:48:55 +000094bool
95SBFileSpec::ResolveExecutableLocation ()
96{
97 if (m_opaque_ap.get())
98 return m_opaque_ap->ResolveExecutableLocation ();
99 return false;
100}
Chris Lattner24943d22010-06-08 16:52:24 +0000101
102int
103SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
104{
105 return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
106}
107
108const char *
Johnny Chen4ead2e92010-08-27 22:35:26 +0000109SBFileSpec::GetFilename() const
Chris Lattner24943d22010-06-08 16:52:24 +0000110{
Greg Claytona66ba462010-10-30 04:51:46 +0000111 const char *s = NULL;
Greg Clayton63094e02010-06-23 01:19:29 +0000112 if (m_opaque_ap.get())
Greg Claytona66ba462010-10-30 04:51:46 +0000113 s = m_opaque_ap->GetFilename().AsCString();
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000114
Greg Claytona66ba462010-10-30 04:51:46 +0000115 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
Caroline Tice7826c882010-10-26 03:11:13 +0000116 if (log)
Greg Claytona66ba462010-10-30 04:51:46 +0000117 log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s ? s : "");
Caroline Tice7826c882010-10-26 03:11:13 +0000118
Greg Claytona66ba462010-10-30 04:51:46 +0000119 return s;
Chris Lattner24943d22010-06-08 16:52:24 +0000120}
121
122const char *
123SBFileSpec::GetDirectory() const
124{
Greg Claytona66ba462010-10-30 04:51:46 +0000125 const char *s = NULL;
Greg Clayton63094e02010-06-23 01:19:29 +0000126 if (m_opaque_ap.get())
Greg Claytona66ba462010-10-30 04:51:46 +0000127 s = m_opaque_ap->GetDirectory().AsCString();
128 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
129 if (log)
130 log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s ? s : "");
131 return s;
Chris Lattner24943d22010-06-08 16:52:24 +0000132}
133
134uint32_t
135SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
136{
Caroline Tice7826c882010-10-26 03:11:13 +0000137 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
138
Caroline Tice7826c882010-10-26 03:11:13 +0000139 uint32_t result;
Greg Clayton63094e02010-06-23 01:19:29 +0000140 if (m_opaque_ap.get())
Caroline Tice7826c882010-10-26 03:11:13 +0000141 {
142 result = m_opaque_ap->GetPath (dst_path, dst_len);
143 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000144 log->Printf ("SBFileSpec(%p)::GetPath (dst_path, dst_len) => dst_path='%s', dst_len='%d', "
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000145 "result='%d'", m_opaque_ap.get(), dst_path, (uint32_t) dst_len, result);
Caroline Tice7826c882010-10-26 03:11:13 +0000146 return result;
147 }
148
149 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000150 log->Printf ("SBFileSpec(%p)::GetPath (dst_path, dst_len) => NULL (0)", m_opaque_ap.get());
Chris Lattner24943d22010-06-08 16:52:24 +0000151
152 if (dst_path && dst_len)
153 *dst_path = '\0';
154 return 0;
155}
156
157
158const lldb_private::FileSpec *
159SBFileSpec::operator->() const
160{
Greg Clayton63094e02010-06-23 01:19:29 +0000161 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000162}
163
164const lldb_private::FileSpec *
165SBFileSpec::get() const
166{
Greg Clayton63094e02010-06-23 01:19:29 +0000167 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000168}
169
170
171const lldb_private::FileSpec &
172SBFileSpec::operator*() const
173{
Greg Clayton63094e02010-06-23 01:19:29 +0000174 return *m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000175}
176
177const lldb_private::FileSpec &
178SBFileSpec::ref() const
179{
Greg Clayton63094e02010-06-23 01:19:29 +0000180 return *m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000181}
182
183
184void
185SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
186{
Greg Clayton63094e02010-06-23 01:19:29 +0000187 if (m_opaque_ap.get())
188 *m_opaque_ap = fs;
Chris Lattner24943d22010-06-08 16:52:24 +0000189 else
Greg Clayton63094e02010-06-23 01:19:29 +0000190 m_opaque_ap.reset (new FileSpec (fs));
Chris Lattner24943d22010-06-08 16:52:24 +0000191}
192
Caroline Tice98f930f2010-09-20 05:20:02 +0000193bool
Caroline Tice7826c882010-10-26 03:11:13 +0000194SBFileSpec::GetDescription (SBStream &description) const
195{
196 if (m_opaque_ap.get())
197 {
198 const char *filename = GetFilename();
199 const char *dir_name = GetDirectory();
200 if (!filename && !dir_name)
201 description.Printf ("No value");
202 else if (!dir_name)
203 description.Printf ("%s", filename);
204 else
205 description.Printf ("%s/%s", dir_name, filename);
206 }
207 else
208 description.Printf ("No value");
209
210 return true;
211}