1 //===-- 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 <limits.h>
11
12 #include "lldb/API/SBFileSpec.h"
13 #include "lldb/API/SBStream.h"
14 #include "lldb/Host/FileSpec.h"
15 #include "lldb/Core/Log.h"
16 #include "lldb/Core/Stream.h"
17
18 using namespace lldb;
19 using namespace lldb_private;
20
21
22
SBFileSpec()23 SBFileSpec::SBFileSpec () :
24 m_opaque_ap(new lldb_private::FileSpec())
25 {
26 }
27
SBFileSpec(const SBFileSpec & rhs)28 SBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
29 m_opaque_ap(new lldb_private::FileSpec(*rhs.m_opaque_ap))
30 {
31 }
32
SBFileSpec(const lldb_private::FileSpec & fspec)33 SBFileSpec::SBFileSpec (const lldb_private::FileSpec& fspec) :
34 m_opaque_ap(new lldb_private::FileSpec(fspec))
35 {
36 }
37
38 // Deprected!!!
SBFileSpec(const char * path)39 SBFileSpec::SBFileSpec (const char *path) :
40 m_opaque_ap(new FileSpec (path, true))
41 {
42 }
43
SBFileSpec(const char * path,bool resolve)44 SBFileSpec::SBFileSpec (const char *path, bool resolve) :
45 m_opaque_ap(new FileSpec (path, resolve))
46 {
47 }
48
~SBFileSpec()49 SBFileSpec::~SBFileSpec ()
50 {
51 }
52
53 const SBFileSpec &
operator =(const SBFileSpec & rhs)54 SBFileSpec::operator = (const SBFileSpec &rhs)
55 {
56 if (this != &rhs)
57 *m_opaque_ap = *rhs.m_opaque_ap;
58 return *this;
59 }
60
61 bool
IsValid() const62 SBFileSpec::IsValid() const
63 {
64 return m_opaque_ap->operator bool();
65 }
66
67 bool
Exists() const68 SBFileSpec::Exists () const
69 {
70 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
71
72 bool result = m_opaque_ap->Exists();
73
74 if (log)
75 log->Printf ("SBFileSpec(%p)::Exists () => %s", m_opaque_ap.get(), (result ? "true" : "false"));
76
77 return result;
78 }
79
80 bool
ResolveExecutableLocation()81 SBFileSpec::ResolveExecutableLocation ()
82 {
83 return m_opaque_ap->ResolveExecutableLocation ();
84 }
85
86 int
ResolvePath(const char * src_path,char * dst_path,size_t dst_len)87 SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
88 {
89 return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
90 }
91
92 const char *
GetFilename() const93 SBFileSpec::GetFilename() const
94 {
95 const char *s = m_opaque_ap->GetFilename().AsCString();
96
97 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
98 if (log)
99 {
100 if (s)
101 log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s);
102 else
103 log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get());
104 }
105
106 return s;
107 }
108
109 const char *
GetDirectory() const110 SBFileSpec::GetDirectory() const
111 {
112 const char *s = m_opaque_ap->GetDirectory().AsCString();
113 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
114 if (log)
115 {
116 if (s)
117 log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s);
118 else
119 log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", m_opaque_ap.get());
120 }
121 return s;
122 }
123
124 void
SetFilename(const char * filename)125 SBFileSpec::SetFilename(const char *filename)
126 {
127 if (filename && filename[0])
128 m_opaque_ap->GetFilename().SetCString(filename);
129 else
130 m_opaque_ap->GetFilename().Clear();
131 }
132
133 void
SetDirectory(const char * directory)134 SBFileSpec::SetDirectory(const char *directory)
135 {
136 if (directory && directory[0])
137 m_opaque_ap->GetDirectory().SetCString(directory);
138 else
139 m_opaque_ap->GetDirectory().Clear();
140 }
141
142 uint32_t
GetPath(char * dst_path,size_t dst_len) const143 SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
144 {
145 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
146
147 uint32_t result = m_opaque_ap->GetPath (dst_path, dst_len);
148
149 if (log)
150 log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%" PRIu64 ") => %u",
151 m_opaque_ap.get(), result, dst_path, (uint64_t)dst_len, result);
152
153 if (result == 0 && dst_path && dst_len > 0)
154 *dst_path = '\0';
155 return result;
156 }
157
158
159 const lldb_private::FileSpec *
operator ->() const160 SBFileSpec::operator->() const
161 {
162 return m_opaque_ap.get();
163 }
164
165 const lldb_private::FileSpec *
get() const166 SBFileSpec::get() const
167 {
168 return m_opaque_ap.get();
169 }
170
171
172 const lldb_private::FileSpec &
operator *() const173 SBFileSpec::operator*() const
174 {
175 return *m_opaque_ap.get();
176 }
177
178 const lldb_private::FileSpec &
ref() const179 SBFileSpec::ref() const
180 {
181 return *m_opaque_ap.get();
182 }
183
184
185 void
SetFileSpec(const lldb_private::FileSpec & fs)186 SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
187 {
188 *m_opaque_ap = fs;
189 }
190
191 bool
GetDescription(SBStream & description) const192 SBFileSpec::GetDescription (SBStream &description) const
193 {
194 Stream &strm = description.ref();
195 char path[PATH_MAX];
196 if (m_opaque_ap->GetPath(path, sizeof(path)))
197 strm.PutCString (path);
198 return true;
199 }
200