130fdc8d8SChris Lattner //===-- SBFileSpec.cpp ------------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
330fdc8d8SChris Lattner //                     The LLVM Compiler Infrastructure
430fdc8d8SChris Lattner //
530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source
630fdc8d8SChris Lattner // License. See LICENSE.TXT for details.
730fdc8d8SChris Lattner //
830fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
930fdc8d8SChris Lattner 
1030fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h"
11dde9cff3SCaroline Tice #include "lldb/API/SBStream.h"
1230fdc8d8SChris Lattner #include "lldb/Core/FileSpec.h"
1330fdc8d8SChris Lattner 
1430fdc8d8SChris Lattner using namespace lldb;
1530fdc8d8SChris Lattner using namespace lldb_private;
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner 
1830fdc8d8SChris Lattner 
1930fdc8d8SChris Lattner SBFileSpec::SBFileSpec () :
206611103cSGreg Clayton     m_opaque_ap()
2130fdc8d8SChris Lattner {
2230fdc8d8SChris Lattner }
2330fdc8d8SChris Lattner 
2430fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
256611103cSGreg Clayton     m_opaque_ap()
2630fdc8d8SChris Lattner {
276611103cSGreg Clayton     if (rhs.m_opaque_ap.get())
2823fd10cbSJohnny Chen         m_opaque_ap.reset (new FileSpec (rhs.get()));
2930fdc8d8SChris Lattner }
3030fdc8d8SChris Lattner 
31*274060b6SGreg Clayton // Deprected!!!
3230fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) :
33*274060b6SGreg Clayton     m_opaque_ap(new FileSpec (path, true))
34*274060b6SGreg Clayton {
35*274060b6SGreg Clayton }
36*274060b6SGreg Clayton 
37*274060b6SGreg Clayton SBFileSpec::SBFileSpec (const char *path, bool resolve) :
38*274060b6SGreg Clayton     m_opaque_ap(new FileSpec (path, resolve))
3930fdc8d8SChris Lattner {
4030fdc8d8SChris Lattner }
4130fdc8d8SChris Lattner 
4230fdc8d8SChris Lattner SBFileSpec::~SBFileSpec ()
4330fdc8d8SChris Lattner {
4430fdc8d8SChris Lattner }
4530fdc8d8SChris Lattner 
4630fdc8d8SChris Lattner const SBFileSpec &
4730fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs)
4830fdc8d8SChris Lattner {
4930fdc8d8SChris Lattner     if (this != &rhs)
5030fdc8d8SChris Lattner     {
5130fdc8d8SChris Lattner         if (rhs.IsValid())
526611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get()));
5330fdc8d8SChris Lattner     }
5430fdc8d8SChris Lattner     return *this;
5530fdc8d8SChris Lattner }
5630fdc8d8SChris Lattner 
5730fdc8d8SChris Lattner bool
5830fdc8d8SChris Lattner SBFileSpec::IsValid() const
5930fdc8d8SChris Lattner {
606611103cSGreg Clayton     return m_opaque_ap.get() != NULL;
6130fdc8d8SChris Lattner }
6230fdc8d8SChris Lattner 
6330fdc8d8SChris Lattner bool
6430fdc8d8SChris Lattner SBFileSpec::Exists () const
6530fdc8d8SChris Lattner {
666611103cSGreg Clayton     if (m_opaque_ap.get())
676611103cSGreg Clayton         return m_opaque_ap->Exists();
6830fdc8d8SChris Lattner     return false;
6930fdc8d8SChris Lattner }
7030fdc8d8SChris Lattner 
71428a9a58SCaroline Tice bool
72428a9a58SCaroline Tice SBFileSpec::ResolveExecutableLocation ()
73428a9a58SCaroline Tice {
74428a9a58SCaroline Tice     if (m_opaque_ap.get())
75428a9a58SCaroline Tice         return m_opaque_ap->ResolveExecutableLocation ();
76428a9a58SCaroline Tice     return false;
77428a9a58SCaroline Tice }
7830fdc8d8SChris Lattner 
7930fdc8d8SChris Lattner int
8030fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
8130fdc8d8SChris Lattner {
8230fdc8d8SChris Lattner     return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
8330fdc8d8SChris Lattner }
8430fdc8d8SChris Lattner 
8530fdc8d8SChris Lattner const char *
8623fd10cbSJohnny Chen SBFileSpec::GetFilename() const
8730fdc8d8SChris Lattner {
886611103cSGreg Clayton     if (m_opaque_ap.get())
896611103cSGreg Clayton         return m_opaque_ap->GetFilename().AsCString();
9030fdc8d8SChris Lattner     return NULL;
9130fdc8d8SChris Lattner }
9230fdc8d8SChris Lattner 
9330fdc8d8SChris Lattner const char *
9430fdc8d8SChris Lattner SBFileSpec::GetDirectory() const
9530fdc8d8SChris Lattner {
966611103cSGreg Clayton     if (m_opaque_ap.get())
976611103cSGreg Clayton         return m_opaque_ap->GetDirectory().AsCString();
9830fdc8d8SChris Lattner     return NULL;
9930fdc8d8SChris Lattner }
10030fdc8d8SChris Lattner 
10130fdc8d8SChris Lattner uint32_t
10230fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
10330fdc8d8SChris Lattner {
1046611103cSGreg Clayton     if (m_opaque_ap.get())
1056611103cSGreg Clayton         return m_opaque_ap->GetPath (dst_path, dst_len);
10630fdc8d8SChris Lattner 
10730fdc8d8SChris Lattner     if (dst_path && dst_len)
10830fdc8d8SChris Lattner         *dst_path = '\0';
10930fdc8d8SChris Lattner     return 0;
11030fdc8d8SChris Lattner }
11130fdc8d8SChris Lattner 
11230fdc8d8SChris Lattner 
11330fdc8d8SChris Lattner const lldb_private::FileSpec *
11430fdc8d8SChris Lattner SBFileSpec::operator->() const
11530fdc8d8SChris Lattner {
1166611103cSGreg Clayton     return m_opaque_ap.get();
11730fdc8d8SChris Lattner }
11830fdc8d8SChris Lattner 
11930fdc8d8SChris Lattner const lldb_private::FileSpec *
12030fdc8d8SChris Lattner SBFileSpec::get() const
12130fdc8d8SChris Lattner {
1226611103cSGreg Clayton     return m_opaque_ap.get();
12330fdc8d8SChris Lattner }
12430fdc8d8SChris Lattner 
12530fdc8d8SChris Lattner 
12630fdc8d8SChris Lattner const lldb_private::FileSpec &
12730fdc8d8SChris Lattner SBFileSpec::operator*() const
12830fdc8d8SChris Lattner {
1296611103cSGreg Clayton     return *m_opaque_ap.get();
13030fdc8d8SChris Lattner }
13130fdc8d8SChris Lattner 
13230fdc8d8SChris Lattner const lldb_private::FileSpec &
13330fdc8d8SChris Lattner SBFileSpec::ref() const
13430fdc8d8SChris Lattner {
1356611103cSGreg Clayton     return *m_opaque_ap.get();
13630fdc8d8SChris Lattner }
13730fdc8d8SChris Lattner 
13830fdc8d8SChris Lattner 
13930fdc8d8SChris Lattner void
14030fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
14130fdc8d8SChris Lattner {
1426611103cSGreg Clayton     if (m_opaque_ap.get())
1436611103cSGreg Clayton         *m_opaque_ap = fs;
14430fdc8d8SChris Lattner     else
1456611103cSGreg Clayton         m_opaque_ap.reset (new FileSpec (fs));
14630fdc8d8SChris Lattner }
14730fdc8d8SChris Lattner 
148dde9cff3SCaroline Tice bool
149dde9cff3SCaroline Tice SBFileSpec::GetDescription (SBStream &description)
150dde9cff3SCaroline Tice {
151dde9cff3SCaroline Tice     if (m_opaque_ap.get())
152dde9cff3SCaroline Tice     {
153dde9cff3SCaroline Tice         const char *filename = GetFilename();
154dde9cff3SCaroline Tice         const char *dir_name = GetDirectory();
155dde9cff3SCaroline Tice         if (!filename && !dir_name)
156dde9cff3SCaroline Tice             description.Printf ("No value");
157dde9cff3SCaroline Tice         else if (!dir_name)
158dde9cff3SCaroline Tice             description.Printf ("%s", filename);
159dde9cff3SCaroline Tice         else
160dde9cff3SCaroline Tice             description.Printf ("%s/%s", dir_name, filename);
161dde9cff3SCaroline Tice     }
162dde9cff3SCaroline Tice     else
163dde9cff3SCaroline Tice         description.Printf ("No value");
164dde9cff3SCaroline Tice 
165dde9cff3SCaroline Tice     return true;
166dde9cff3SCaroline Tice }
167