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"
11*dde9cff3SCaroline 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 
3130fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) :
326611103cSGreg Clayton     m_opaque_ap(new FileSpec (path))
3330fdc8d8SChris Lattner {
3430fdc8d8SChris Lattner }
3530fdc8d8SChris Lattner 
3630fdc8d8SChris Lattner SBFileSpec::~SBFileSpec ()
3730fdc8d8SChris Lattner {
3830fdc8d8SChris Lattner }
3930fdc8d8SChris Lattner 
4030fdc8d8SChris Lattner const SBFileSpec &
4130fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs)
4230fdc8d8SChris Lattner {
4330fdc8d8SChris Lattner     if (this != &rhs)
4430fdc8d8SChris Lattner     {
4530fdc8d8SChris Lattner         if (rhs.IsValid())
466611103cSGreg Clayton             m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get()));
4730fdc8d8SChris Lattner     }
4830fdc8d8SChris Lattner     return *this;
4930fdc8d8SChris Lattner }
5030fdc8d8SChris Lattner 
5130fdc8d8SChris Lattner bool
5230fdc8d8SChris Lattner SBFileSpec::IsValid() const
5330fdc8d8SChris Lattner {
546611103cSGreg Clayton     return m_opaque_ap.get() != NULL;
5530fdc8d8SChris Lattner }
5630fdc8d8SChris Lattner 
5730fdc8d8SChris Lattner bool
5830fdc8d8SChris Lattner SBFileSpec::Exists () const
5930fdc8d8SChris Lattner {
606611103cSGreg Clayton     if (m_opaque_ap.get())
616611103cSGreg Clayton         return m_opaque_ap->Exists();
6230fdc8d8SChris Lattner     return false;
6330fdc8d8SChris Lattner }
6430fdc8d8SChris Lattner 
65428a9a58SCaroline Tice bool
66428a9a58SCaroline Tice SBFileSpec::ResolveExecutableLocation ()
67428a9a58SCaroline Tice {
68428a9a58SCaroline Tice     if (m_opaque_ap.get())
69428a9a58SCaroline Tice         return m_opaque_ap->ResolveExecutableLocation ();
70428a9a58SCaroline Tice     return false;
71428a9a58SCaroline Tice }
7230fdc8d8SChris Lattner 
7330fdc8d8SChris Lattner int
7430fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len)
7530fdc8d8SChris Lattner {
7630fdc8d8SChris Lattner     return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len);
7730fdc8d8SChris Lattner }
7830fdc8d8SChris Lattner 
7930fdc8d8SChris Lattner const char *
8023fd10cbSJohnny Chen SBFileSpec::GetFilename() const
8130fdc8d8SChris Lattner {
826611103cSGreg Clayton     if (m_opaque_ap.get())
836611103cSGreg Clayton         return m_opaque_ap->GetFilename().AsCString();
8430fdc8d8SChris Lattner     return NULL;
8530fdc8d8SChris Lattner }
8630fdc8d8SChris Lattner 
8730fdc8d8SChris Lattner const char *
8830fdc8d8SChris Lattner SBFileSpec::GetDirectory() const
8930fdc8d8SChris Lattner {
906611103cSGreg Clayton     if (m_opaque_ap.get())
916611103cSGreg Clayton         return m_opaque_ap->GetDirectory().AsCString();
9230fdc8d8SChris Lattner     return NULL;
9330fdc8d8SChris Lattner }
9430fdc8d8SChris Lattner 
9530fdc8d8SChris Lattner uint32_t
9630fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const
9730fdc8d8SChris Lattner {
986611103cSGreg Clayton     if (m_opaque_ap.get())
996611103cSGreg Clayton         return m_opaque_ap->GetPath (dst_path, dst_len);
10030fdc8d8SChris Lattner 
10130fdc8d8SChris Lattner     if (dst_path && dst_len)
10230fdc8d8SChris Lattner         *dst_path = '\0';
10330fdc8d8SChris Lattner     return 0;
10430fdc8d8SChris Lattner }
10530fdc8d8SChris Lattner 
10630fdc8d8SChris Lattner 
10730fdc8d8SChris Lattner const lldb_private::FileSpec *
10830fdc8d8SChris Lattner SBFileSpec::operator->() const
10930fdc8d8SChris Lattner {
1106611103cSGreg Clayton     return m_opaque_ap.get();
11130fdc8d8SChris Lattner }
11230fdc8d8SChris Lattner 
11330fdc8d8SChris Lattner const lldb_private::FileSpec *
11430fdc8d8SChris Lattner SBFileSpec::get() const
11530fdc8d8SChris Lattner {
1166611103cSGreg Clayton     return m_opaque_ap.get();
11730fdc8d8SChris Lattner }
11830fdc8d8SChris Lattner 
11930fdc8d8SChris Lattner 
12030fdc8d8SChris Lattner const lldb_private::FileSpec &
12130fdc8d8SChris Lattner SBFileSpec::operator*() const
12230fdc8d8SChris Lattner {
1236611103cSGreg Clayton     return *m_opaque_ap.get();
12430fdc8d8SChris Lattner }
12530fdc8d8SChris Lattner 
12630fdc8d8SChris Lattner const lldb_private::FileSpec &
12730fdc8d8SChris Lattner SBFileSpec::ref() const
12830fdc8d8SChris Lattner {
1296611103cSGreg Clayton     return *m_opaque_ap.get();
13030fdc8d8SChris Lattner }
13130fdc8d8SChris Lattner 
13230fdc8d8SChris Lattner 
13330fdc8d8SChris Lattner void
13430fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs)
13530fdc8d8SChris Lattner {
1366611103cSGreg Clayton     if (m_opaque_ap.get())
1376611103cSGreg Clayton         *m_opaque_ap = fs;
13830fdc8d8SChris Lattner     else
1396611103cSGreg Clayton         m_opaque_ap.reset (new FileSpec (fs));
14030fdc8d8SChris Lattner }
14130fdc8d8SChris Lattner 
142*dde9cff3SCaroline Tice bool
143*dde9cff3SCaroline Tice SBFileSpec::GetDescription (SBStream &description)
144*dde9cff3SCaroline Tice {
145*dde9cff3SCaroline Tice     if (m_opaque_ap.get())
146*dde9cff3SCaroline Tice     {
147*dde9cff3SCaroline Tice         const char *filename = GetFilename();
148*dde9cff3SCaroline Tice         const char *dir_name = GetDirectory();
149*dde9cff3SCaroline Tice         if (!filename && !dir_name)
150*dde9cff3SCaroline Tice             description.Printf ("No value");
151*dde9cff3SCaroline Tice         else if (!dir_name)
152*dde9cff3SCaroline Tice             description.Printf ("%s", filename);
153*dde9cff3SCaroline Tice         else
154*dde9cff3SCaroline Tice             description.Printf ("%s/%s", dir_name, filename);
155*dde9cff3SCaroline Tice     }
156*dde9cff3SCaroline Tice     else
157*dde9cff3SCaroline Tice         description.Printf ("No value");
158*dde9cff3SCaroline Tice 
159*dde9cff3SCaroline Tice     return true;
160*dde9cff3SCaroline Tice }
161*dde9cff3SCaroline Tice 
162*dde9cff3SCaroline Tice PyObject *
163*dde9cff3SCaroline Tice SBFileSpec::__repr__ ()
164*dde9cff3SCaroline Tice {
165*dde9cff3SCaroline Tice     SBStream description;
166*dde9cff3SCaroline Tice     GetDescription (description);
167*dde9cff3SCaroline Tice     return PyString_FromString (description.GetData());
168*dde9cff3SCaroline Tice }
169