blob: 3fc6a3ad04e48bf11c3ed2be4f21661535666fd4 [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{
Caroline Tice7826c882010-10-26 03:11:13 +0000111 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
112
Greg Clayton63094e02010-06-23 01:19:29 +0000113 if (m_opaque_ap.get())
Caroline Tice7826c882010-10-26 03:11:13 +0000114 {
115 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000116 log->Printf ("SBFileSpec(%p)::GetFilename () => %s", m_opaque_ap.get(),
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000117 m_opaque_ap->GetFilename().AsCString());
118
Greg Clayton63094e02010-06-23 01:19:29 +0000119 return m_opaque_ap->GetFilename().AsCString();
Caroline Tice7826c882010-10-26 03:11:13 +0000120 }
121
122 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000123 log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get());
Caroline Tice7826c882010-10-26 03:11:13 +0000124
Chris Lattner24943d22010-06-08 16:52:24 +0000125 return NULL;
126}
127
128const char *
129SBFileSpec::GetDirectory() const
130{
Greg Clayton63094e02010-06-23 01:19:29 +0000131 if (m_opaque_ap.get())
132 return m_opaque_ap->GetDirectory().AsCString();
Chris Lattner24943d22010-06-08 16:52:24 +0000133 return NULL;
134}
135
136uint32_t
137SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
138{
Caroline Tice7826c882010-10-26 03:11:13 +0000139 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API);
140
Caroline Tice7826c882010-10-26 03:11:13 +0000141 uint32_t result;
Greg Clayton63094e02010-06-23 01:19:29 +0000142 if (m_opaque_ap.get())
Caroline Tice7826c882010-10-26 03:11:13 +0000143 {
144 result = m_opaque_ap->GetPath (dst_path, dst_len);
145 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000146 log->Printf ("SBFileSpec(%p)::GetPath (dst_path, dst_len) => dst_path='%s', dst_len='%d', "
Caroline Tice61ba7ec2010-10-26 23:49:36 +0000147 "result='%d'", m_opaque_ap.get(), dst_path, (uint32_t) dst_len, result);
Caroline Tice7826c882010-10-26 03:11:13 +0000148 return result;
149 }
150
151 if (log)
Greg Clayton3f5ee7f2010-10-29 04:59:35 +0000152 log->Printf ("SBFileSpec(%p)::GetPath (dst_path, dst_len) => NULL (0)", m_opaque_ap.get());
Chris Lattner24943d22010-06-08 16:52:24 +0000153
154 if (dst_path && dst_len)
155 *dst_path = '\0';
156 return 0;
157}
158
159
160const lldb_private::FileSpec *
161SBFileSpec::operator->() const
162{
Greg Clayton63094e02010-06-23 01:19:29 +0000163 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000164}
165
166const lldb_private::FileSpec *
167SBFileSpec::get() const
168{
Greg Clayton63094e02010-06-23 01:19:29 +0000169 return m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000170}
171
172
173const lldb_private::FileSpec &
174SBFileSpec::operator*() const
175{
Greg Clayton63094e02010-06-23 01:19:29 +0000176 return *m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000177}
178
179const lldb_private::FileSpec &
180SBFileSpec::ref() const
181{
Greg Clayton63094e02010-06-23 01:19:29 +0000182 return *m_opaque_ap.get();
Chris Lattner24943d22010-06-08 16:52:24 +0000183}
184
185
186void
187SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
188{
Greg Clayton63094e02010-06-23 01:19:29 +0000189 if (m_opaque_ap.get())
190 *m_opaque_ap = fs;
Chris Lattner24943d22010-06-08 16:52:24 +0000191 else
Greg Clayton63094e02010-06-23 01:19:29 +0000192 m_opaque_ap.reset (new FileSpec (fs));
Chris Lattner24943d22010-06-08 16:52:24 +0000193}
194
Caroline Tice98f930f2010-09-20 05:20:02 +0000195bool
Caroline Tice7826c882010-10-26 03:11:13 +0000196SBFileSpec::GetDescription (SBStream &description) const
197{
198 if (m_opaque_ap.get())
199 {
200 const char *filename = GetFilename();
201 const char *dir_name = GetDirectory();
202 if (!filename && !dir_name)
203 description.Printf ("No value");
204 else if (!dir_name)
205 description.Printf ("%s", filename);
206 else
207 description.Printf ("%s/%s", dir_name, filename);
208 }
209 else
210 description.Printf ("No value");
211
212 return true;
213}