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"
1130fdc8d8SChris Lattner #include "lldb/Core/FileSpec.h"
1230fdc8d8SChris Lattner 
1330fdc8d8SChris Lattner using namespace lldb;
1430fdc8d8SChris Lattner using namespace lldb_private;
1530fdc8d8SChris Lattner 
1630fdc8d8SChris Lattner 
1730fdc8d8SChris Lattner 
1830fdc8d8SChris Lattner SBFileSpec::SBFileSpec () :
196611103cSGreg Clayton     m_opaque_ap()
2030fdc8d8SChris Lattner {
2130fdc8d8SChris Lattner }
2230fdc8d8SChris Lattner 
2330fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) :
246611103cSGreg Clayton     m_opaque_ap()
2530fdc8d8SChris Lattner {
266611103cSGreg Clayton     if (rhs.m_opaque_ap.get())
2723fd10cbSJohnny Chen         m_opaque_ap.reset (new FileSpec (rhs.get()));
2830fdc8d8SChris Lattner }
2930fdc8d8SChris Lattner 
3030fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) :
316611103cSGreg Clayton     m_opaque_ap(new FileSpec (path))
3230fdc8d8SChris Lattner {
3330fdc8d8SChris Lattner }
3430fdc8d8SChris Lattner 
3530fdc8d8SChris Lattner SBFileSpec::~SBFileSpec ()
3630fdc8d8SChris Lattner {
3730fdc8d8SChris Lattner }
3830fdc8d8SChris Lattner 
3930fdc8d8SChris Lattner const SBFileSpec &
4030fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs)
4130fdc8d8SChris Lattner {
4230fdc8d8SChris Lattner     if (this != &rhs)
4330fdc8d8SChris Lattner     {
4430fdc8d8SChris Lattner         if (rhs.IsValid())
456611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get()));
4630fdc8d8SChris Lattner     }
4730fdc8d8SChris Lattner     return *this;
4830fdc8d8SChris Lattner }
4930fdc8d8SChris Lattner 
5030fdc8d8SChris Lattner bool
5130fdc8d8SChris Lattner SBFileSpec::IsValid() const
5230fdc8d8SChris Lattner {
536611103cSGreg Clayton     return m_opaque_ap.get() != NULL;
5430fdc8d8SChris Lattner }
5530fdc8d8SChris Lattner 
5630fdc8d8SChris Lattner bool
5730fdc8d8SChris Lattner SBFileSpec::Exists () const
5830fdc8d8SChris Lattner {
596611103cSGreg Clayton     if (m_opaque_ap.get())
606611103cSGreg Clayton         return m_opaque_ap->Exists();
6130fdc8d8SChris Lattner     return false;
6230fdc8d8SChris Lattner }
6330fdc8d8SChris Lattner 
64*428a9a58SCaroline Tice bool
65*428a9a58SCaroline Tice SBFileSpec::ResolveExecutableLocation ()
66*428a9a58SCaroline Tice {
67*428a9a58SCaroline Tice     if (m_opaque_ap.get())
68*428a9a58SCaroline Tice         return m_opaque_ap->ResolveExecutableLocation ();
69*428a9a58SCaroline Tice     return false;
70*428a9a58SCaroline Tice }
7130fdc8d8SChris Lattner 
7230fdc8d8SChris Lattner int
7330fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
7430fdc8d8SChris Lattner {
7530fdc8d8SChris Lattner     return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
7630fdc8d8SChris Lattner }
7730fdc8d8SChris Lattner 
7830fdc8d8SChris Lattner const char *
7923fd10cbSJohnny Chen SBFileSpec::GetFilename() const
8030fdc8d8SChris Lattner {
816611103cSGreg Clayton     if (m_opaque_ap.get())
826611103cSGreg Clayton         return m_opaque_ap->GetFilename().AsCString();
8330fdc8d8SChris Lattner     return NULL;
8430fdc8d8SChris Lattner }
8530fdc8d8SChris Lattner 
8630fdc8d8SChris Lattner const char *
8730fdc8d8SChris Lattner SBFileSpec::GetDirectory() const
8830fdc8d8SChris Lattner {
896611103cSGreg Clayton     if (m_opaque_ap.get())
906611103cSGreg Clayton         return m_opaque_ap->GetDirectory().AsCString();
9130fdc8d8SChris Lattner     return NULL;
9230fdc8d8SChris Lattner }
9330fdc8d8SChris Lattner 
9430fdc8d8SChris Lattner uint32_t
9530fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
9630fdc8d8SChris Lattner {
976611103cSGreg Clayton     if (m_opaque_ap.get())
986611103cSGreg Clayton         return m_opaque_ap->GetPath (dst_path, dst_len);
9930fdc8d8SChris Lattner 
10030fdc8d8SChris Lattner     if (dst_path && dst_len)
10130fdc8d8SChris Lattner         *dst_path = '\0';
10230fdc8d8SChris Lattner     return 0;
10330fdc8d8SChris Lattner }
10430fdc8d8SChris Lattner 
10530fdc8d8SChris Lattner 
10630fdc8d8SChris Lattner const lldb_private::FileSpec *
10730fdc8d8SChris Lattner SBFileSpec::operator->() const
10830fdc8d8SChris Lattner {
1096611103cSGreg Clayton     return m_opaque_ap.get();
11030fdc8d8SChris Lattner }
11130fdc8d8SChris Lattner 
11230fdc8d8SChris Lattner const lldb_private::FileSpec *
11330fdc8d8SChris Lattner SBFileSpec::get() const
11430fdc8d8SChris Lattner {
1156611103cSGreg Clayton     return m_opaque_ap.get();
11630fdc8d8SChris Lattner }
11730fdc8d8SChris Lattner 
11830fdc8d8SChris Lattner 
11930fdc8d8SChris Lattner const lldb_private::FileSpec &
12030fdc8d8SChris Lattner SBFileSpec::operator*() const
12130fdc8d8SChris Lattner {
1226611103cSGreg Clayton     return *m_opaque_ap.get();
12330fdc8d8SChris Lattner }
12430fdc8d8SChris Lattner 
12530fdc8d8SChris Lattner const lldb_private::FileSpec &
12630fdc8d8SChris Lattner SBFileSpec::ref() const
12730fdc8d8SChris Lattner {
1286611103cSGreg Clayton     return *m_opaque_ap.get();
12930fdc8d8SChris Lattner }
13030fdc8d8SChris Lattner 
13130fdc8d8SChris Lattner 
13230fdc8d8SChris Lattner void
13330fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
13430fdc8d8SChris Lattner {
1356611103cSGreg Clayton     if (m_opaque_ap.get())
1366611103cSGreg Clayton         *m_opaque_ap = fs;
13730fdc8d8SChris Lattner     else
1386611103cSGreg Clayton         m_opaque_ap.reset (new FileSpec (fs));
13930fdc8d8SChris Lattner }
14030fdc8d8SChris Lattner 
141