]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/llvm/tools/lldb/source/API/SBFileSpec.cpp
Copy head (r256279) to stable/10 as part of the 10.0-RELEASE cycle.
[FreeBSD/stable/10.git] / contrib / llvm / tools / lldb / source / API / SBFileSpec.cpp
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
23 SBFileSpec::SBFileSpec () :
24     m_opaque_ap(new lldb_private::FileSpec())
25 {
26 }
27
28 SBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
29     m_opaque_ap(new lldb_private::FileSpec(*rhs.m_opaque_ap))
30 {
31 }
32
33 SBFileSpec::SBFileSpec (const lldb_private::FileSpec& fspec) :
34     m_opaque_ap(new lldb_private::FileSpec(fspec))
35 {
36 }
37
38 // Deprected!!!
39 SBFileSpec::SBFileSpec (const char *path) :
40     m_opaque_ap(new FileSpec (path, true))
41 {
42 }
43
44 SBFileSpec::SBFileSpec (const char *path, bool resolve) :
45     m_opaque_ap(new FileSpec (path, resolve))
46 {
47 }
48
49 SBFileSpec::~SBFileSpec ()
50 {
51 }
52
53 const SBFileSpec &
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
62 SBFileSpec::IsValid() const
63 {
64     return *m_opaque_ap;
65 }
66
67 bool
68 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
81 SBFileSpec::ResolveExecutableLocation ()
82 {
83     return m_opaque_ap->ResolveExecutableLocation ();
84 }
85
86 int
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 *
93 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 *
110 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 uint32_t
125 SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
126 {
127     Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
128
129     uint32_t result = m_opaque_ap->GetPath (dst_path, dst_len);
130
131     if (log)
132         log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%" PRIu64 ") => %u",
133                      m_opaque_ap.get(), result, dst_path, (uint64_t)dst_len, result);
134
135     if (result == 0 && dst_path && dst_len > 0)
136         *dst_path = '\0';
137     return result;
138 }
139
140
141 const lldb_private::FileSpec *
142 SBFileSpec::operator->() const
143 {
144     return m_opaque_ap.get();
145 }
146
147 const lldb_private::FileSpec *
148 SBFileSpec::get() const
149 {
150     return m_opaque_ap.get();
151 }
152
153
154 const lldb_private::FileSpec &
155 SBFileSpec::operator*() const
156 {
157     return *m_opaque_ap.get();
158 }
159
160 const lldb_private::FileSpec &
161 SBFileSpec::ref() const
162 {
163     return *m_opaque_ap.get();
164 }
165
166
167 void
168 SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
169 {
170     *m_opaque_ap = fs;
171 }
172
173 bool
174 SBFileSpec::GetDescription (SBStream &description) const
175 {
176     Stream &strm = description.ref();
177     char path[PATH_MAX];
178     if (m_opaque_ap->GetPath(path, sizeof(path)))
179         strm.PutCString (path);    
180     return true;
181 }