blob: 2a93e9530e261a91bcd509b2c54498422586b49d [file] [log] [blame]
Chris Lattner30fdc8d2010-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
Sean Callananaf90cf52014-04-19 03:09:28 +000010#include <inttypes.h> // PRIu64
Stephen Wilson8acdbb82011-04-08 13:36:44 +000011#include <limits.h>
12
Chris Lattner30fdc8d2010-06-08 16:52:24 +000013#include "lldb/API/SBFileSpec.h"
Caroline Ticedde9cff2010-09-20 05:20:02 +000014#include "lldb/API/SBStream.h"
Greg Clayton53239f02011-02-08 05:05:52 +000015#include "lldb/Host/FileSpec.h"
Caroline Ticeceb6b132010-10-26 03:11:13 +000016#include "lldb/Core/Log.h"
Greg Claytonda7bc7d2011-11-13 06:57:31 +000017#include "lldb/Core/Stream.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000018
19using namespace lldb;
20using namespace lldb_private;
21
22
23
24SBFileSpec::SBFileSpec () :
Greg Clayton226cce22013-07-08 22:22:41 +000025 m_opaque_ap(new lldb_private::FileSpec())
Chris Lattner30fdc8d2010-06-08 16:52:24 +000026{
27}
28
29SBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
Greg Clayton226cce22013-07-08 22:22:41 +000030 m_opaque_ap(new lldb_private::FileSpec(*rhs.m_opaque_ap))
Chris Lattner30fdc8d2010-06-08 16:52:24 +000031{
Greg Clayton226cce22013-07-08 22:22:41 +000032}
Caroline Tice750cd172010-10-26 23:49:36 +000033
Greg Clayton226cce22013-07-08 22:22:41 +000034SBFileSpec::SBFileSpec (const lldb_private::FileSpec& fspec) :
35 m_opaque_ap(new lldb_private::FileSpec(fspec))
36{
Chris Lattner30fdc8d2010-06-08 16:52:24 +000037}
38
Greg Clayton274060b2010-10-20 20:54:39 +000039// Deprected!!!
Chris Lattner30fdc8d2010-06-08 16:52:24 +000040SBFileSpec::SBFileSpec (const char *path) :
Greg Clayton274060b2010-10-20 20:54:39 +000041 m_opaque_ap(new FileSpec (path, true))
42{
43}
44
45SBFileSpec::SBFileSpec (const char *path, bool resolve) :
46 m_opaque_ap(new FileSpec (path, resolve))
Chris Lattner30fdc8d2010-06-08 16:52:24 +000047{
48}
49
50SBFileSpec::~SBFileSpec ()
51{
52}
53
54const SBFileSpec &
55SBFileSpec::operator = (const SBFileSpec &rhs)
56{
57 if (this != &rhs)
Greg Clayton226cce22013-07-08 22:22:41 +000058 *m_opaque_ap = *rhs.m_opaque_ap;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000059 return *this;
60}
61
62bool
63SBFileSpec::IsValid() const
64{
Sean Callanan9076c0f2013-10-04 21:35:29 +000065 return m_opaque_ap->operator bool();
Chris Lattner30fdc8d2010-06-08 16:52:24 +000066}
67
68bool
69SBFileSpec::Exists () const
70{
Greg Clayton5160ce52013-03-27 23:08:40 +000071 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticeceb6b132010-10-26 03:11:13 +000072
Greg Clayton226cce22013-07-08 22:22:41 +000073 bool result = m_opaque_ap->Exists();
Caroline Ticeceb6b132010-10-26 03:11:13 +000074
75 if (log)
Saleem Abdulrasool324a1032014-04-04 04:06:10 +000076 log->Printf ("SBFileSpec(%p)::Exists () => %s",
77 static_cast<void*>(m_opaque_ap.get()),
78 (result ? "true" : "false"));
Caroline Ticeceb6b132010-10-26 03:11:13 +000079
80 return result;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000081}
82
Caroline Tice428a9a52010-09-10 04:48:55 +000083bool
84SBFileSpec::ResolveExecutableLocation ()
85{
Greg Clayton226cce22013-07-08 22:22:41 +000086 return m_opaque_ap->ResolveExecutableLocation ();
Caroline Tice428a9a52010-09-10 04:48:55 +000087}
Chris Lattner30fdc8d2010-06-08 16:52:24 +000088
89int
90SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
91{
92 return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
93}
94
95const char *
Johnny Chen23fd10c2010-08-27 22:35:26 +000096SBFileSpec::GetFilename() const
Chris Lattner30fdc8d2010-06-08 16:52:24 +000097{
Greg Clayton226cce22013-07-08 22:22:41 +000098 const char *s = m_opaque_ap->GetFilename().AsCString();
Caroline Tice750cd172010-10-26 23:49:36 +000099
Greg Clayton5160ce52013-03-27 23:08:40 +0000100 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticeceb6b132010-10-26 03:11:13 +0000101 if (log)
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000102 {
103 if (s)
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000104 log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"",
105 static_cast<void*>(m_opaque_ap.get()), s);
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000106 else
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000107 log->Printf ("SBFileSpec(%p)::GetFilename () => NULL",
108 static_cast<void*>(m_opaque_ap.get()));
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000109 }
Caroline Ticeceb6b132010-10-26 03:11:13 +0000110
Greg Clayton48381312010-10-30 04:51:46 +0000111 return s;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000112}
113
114const char *
115SBFileSpec::GetDirectory() const
116{
Greg Clayton226cce22013-07-08 22:22:41 +0000117 const char *s = m_opaque_ap->GetDirectory().AsCString();
Greg Clayton5160ce52013-03-27 23:08:40 +0000118 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Greg Clayton48381312010-10-30 04:51:46 +0000119 if (log)
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000120 {
121 if (s)
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000122 log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"",
123 static_cast<void*>(m_opaque_ap.get()), s);
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000124 else
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000125 log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL",
126 static_cast<void*>(m_opaque_ap.get()));
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000127 }
Greg Clayton48381312010-10-30 04:51:46 +0000128 return s;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000129}
130
Greg Claytonfbb76342013-11-20 21:07:01 +0000131void
132SBFileSpec::SetFilename(const char *filename)
133{
134 if (filename && filename[0])
135 m_opaque_ap->GetFilename().SetCString(filename);
136 else
137 m_opaque_ap->GetFilename().Clear();
138}
139
140void
141SBFileSpec::SetDirectory(const char *directory)
142{
143 if (directory && directory[0])
144 m_opaque_ap->GetDirectory().SetCString(directory);
145 else
146 m_opaque_ap->GetDirectory().Clear();
147}
148
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000149uint32_t
150SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
151{
Greg Clayton5160ce52013-03-27 23:08:40 +0000152 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
Caroline Ticeceb6b132010-10-26 03:11:13 +0000153
Greg Clayton226cce22013-07-08 22:22:41 +0000154 uint32_t result = m_opaque_ap->GetPath (dst_path, dst_len);
Caroline Ticeceb6b132010-10-26 03:11:13 +0000155
156 if (log)
Daniel Malead01b2952012-11-29 21:49:15 +0000157 log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%" PRIu64 ") => %u",
Saleem Abdulrasool324a1032014-04-04 04:06:10 +0000158 static_cast<void*>(m_opaque_ap.get()), result, dst_path,
159 static_cast<uint64_t>(dst_len), result);
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000160
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000161 if (result == 0 && dst_path && dst_len > 0)
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000162 *dst_path = '\0';
Greg Claytoncfd1ace2010-10-31 03:01:06 +0000163 return result;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000164}
165
166
167const lldb_private::FileSpec *
168SBFileSpec::operator->() const
169{
Greg Clayton66111032010-06-23 01:19:29 +0000170 return m_opaque_ap.get();
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000171}
172
173const lldb_private::FileSpec *
174SBFileSpec::get() const
175{
Greg Clayton66111032010-06-23 01:19:29 +0000176 return m_opaque_ap.get();
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000177}
178
179
180const lldb_private::FileSpec &
181SBFileSpec::operator*() const
182{
Greg Clayton66111032010-06-23 01:19:29 +0000183 return *m_opaque_ap.get();
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000184}
185
186const lldb_private::FileSpec &
187SBFileSpec::ref() const
188{
Greg Clayton66111032010-06-23 01:19:29 +0000189 return *m_opaque_ap.get();
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000190}
191
192
193void
194SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
195{
Greg Clayton226cce22013-07-08 22:22:41 +0000196 *m_opaque_ap = fs;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000197}
198
Caroline Ticedde9cff2010-09-20 05:20:02 +0000199bool
Caroline Ticeceb6b132010-10-26 03:11:13 +0000200SBFileSpec::GetDescription (SBStream &description) const
201{
Greg Claytonda7bc7d2011-11-13 06:57:31 +0000202 Stream &strm = description.ref();
Greg Clayton226cce22013-07-08 22:22:41 +0000203 char path[PATH_MAX];
204 if (m_opaque_ap->GetPath(path, sizeof(path)))
205 strm.PutCString (path);
Caroline Ticeceb6b132010-10-26 03:11:13 +0000206 return true;
207}