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()) 27*23fd10cbSJohnny 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 6430fdc8d8SChris Lattner 6530fdc8d8SChris Lattner int 6630fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 6730fdc8d8SChris Lattner { 6830fdc8d8SChris Lattner return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner 7130fdc8d8SChris Lattner const char * 72*23fd10cbSJohnny Chen SBFileSpec::GetFilename() const 7330fdc8d8SChris Lattner { 746611103cSGreg Clayton if (m_opaque_ap.get()) 756611103cSGreg Clayton return m_opaque_ap->GetFilename().AsCString(); 7630fdc8d8SChris Lattner return NULL; 7730fdc8d8SChris Lattner } 7830fdc8d8SChris Lattner 7930fdc8d8SChris Lattner const char * 8030fdc8d8SChris Lattner SBFileSpec::GetDirectory() const 8130fdc8d8SChris Lattner { 826611103cSGreg Clayton if (m_opaque_ap.get()) 836611103cSGreg Clayton return m_opaque_ap->GetDirectory().AsCString(); 8430fdc8d8SChris Lattner return NULL; 8530fdc8d8SChris Lattner } 8630fdc8d8SChris Lattner 8730fdc8d8SChris Lattner uint32_t 8830fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 8930fdc8d8SChris Lattner { 906611103cSGreg Clayton if (m_opaque_ap.get()) 916611103cSGreg Clayton return m_opaque_ap->GetPath (dst_path, dst_len); 9230fdc8d8SChris Lattner 9330fdc8d8SChris Lattner if (dst_path && dst_len) 9430fdc8d8SChris Lattner *dst_path = '\0'; 9530fdc8d8SChris Lattner return 0; 9630fdc8d8SChris Lattner } 9730fdc8d8SChris Lattner 9830fdc8d8SChris Lattner 9930fdc8d8SChris Lattner const lldb_private::FileSpec * 10030fdc8d8SChris Lattner SBFileSpec::operator->() const 10130fdc8d8SChris Lattner { 1026611103cSGreg Clayton return m_opaque_ap.get(); 10330fdc8d8SChris Lattner } 10430fdc8d8SChris Lattner 10530fdc8d8SChris Lattner const lldb_private::FileSpec * 10630fdc8d8SChris Lattner SBFileSpec::get() const 10730fdc8d8SChris Lattner { 1086611103cSGreg Clayton return m_opaque_ap.get(); 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner 11230fdc8d8SChris Lattner const lldb_private::FileSpec & 11330fdc8d8SChris Lattner SBFileSpec::operator*() const 11430fdc8d8SChris Lattner { 1156611103cSGreg Clayton return *m_opaque_ap.get(); 11630fdc8d8SChris Lattner } 11730fdc8d8SChris Lattner 11830fdc8d8SChris Lattner const lldb_private::FileSpec & 11930fdc8d8SChris Lattner SBFileSpec::ref() const 12030fdc8d8SChris Lattner { 1216611103cSGreg Clayton return *m_opaque_ap.get(); 12230fdc8d8SChris Lattner } 12330fdc8d8SChris Lattner 12430fdc8d8SChris Lattner 12530fdc8d8SChris Lattner void 12630fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 12730fdc8d8SChris Lattner { 1286611103cSGreg Clayton if (m_opaque_ap.get()) 1296611103cSGreg Clayton *m_opaque_ap = fs; 13030fdc8d8SChris Lattner else 1316611103cSGreg Clayton m_opaque_ap.reset (new FileSpec (fs)); 13230fdc8d8SChris Lattner } 13330fdc8d8SChris Lattner 134