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