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" 13ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 1430fdc8d8SChris Lattner 1530fdc8d8SChris Lattner using namespace lldb; 1630fdc8d8SChris Lattner using namespace lldb_private; 1730fdc8d8SChris Lattner 1830fdc8d8SChris Lattner 1930fdc8d8SChris Lattner 2030fdc8d8SChris Lattner SBFileSpec::SBFileSpec () : 216611103cSGreg Clayton m_opaque_ap() 2230fdc8d8SChris Lattner { 2330fdc8d8SChris Lattner } 2430fdc8d8SChris Lattner 2530fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 266611103cSGreg Clayton m_opaque_ap() 2730fdc8d8SChris Lattner { 28*750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 29*750cd175SCaroline Tice 30*750cd175SCaroline Tice if (rhs.m_opaque_ap.get()) 31*750cd175SCaroline Tice m_opaque_ap.reset (new FileSpec (rhs.get())); 32ceb6b139SCaroline Tice 33ceb6b139SCaroline Tice if (log) 34ceb6b139SCaroline Tice { 35ceb6b139SCaroline Tice SBStream sstr; 36*750cd175SCaroline Tice GetDescription (sstr); 37*750cd175SCaroline Tice log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec rhs.ap=%p) => this.ap = %p ('%s')", 38*750cd175SCaroline Tice rhs.m_opaque_ap.get(), m_opaque_ap.get(), sstr.GetData()); 39ceb6b139SCaroline Tice } 4030fdc8d8SChris Lattner } 4130fdc8d8SChris Lattner 42274060b6SGreg Clayton // Deprected!!! 4330fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) : 44274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, true)) 45274060b6SGreg Clayton { 46274060b6SGreg Clayton } 47274060b6SGreg Clayton 48274060b6SGreg Clayton SBFileSpec::SBFileSpec (const char *path, bool resolve) : 49274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, resolve)) 5030fdc8d8SChris Lattner { 51*750cd175SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 52ceb6b139SCaroline Tice 53ceb6b139SCaroline Tice if (log) 54*750cd175SCaroline Tice log->Printf ("SBFileSpec::SBFileSpec (path='%s', resolve='%s') => this.ap = %p", path, 55*750cd175SCaroline Tice (resolve ? "true" : "false"), m_opaque_ap.get()); 5630fdc8d8SChris Lattner } 5730fdc8d8SChris Lattner 5830fdc8d8SChris Lattner SBFileSpec::~SBFileSpec () 5930fdc8d8SChris Lattner { 6030fdc8d8SChris Lattner } 6130fdc8d8SChris Lattner 6230fdc8d8SChris Lattner const SBFileSpec & 6330fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs) 6430fdc8d8SChris Lattner { 6530fdc8d8SChris Lattner if (this != &rhs) 6630fdc8d8SChris Lattner { 6730fdc8d8SChris Lattner if (rhs.IsValid()) 686611103cSGreg Clayton m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get())); 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner return *this; 7130fdc8d8SChris Lattner } 7230fdc8d8SChris Lattner 7330fdc8d8SChris Lattner bool 7430fdc8d8SChris Lattner SBFileSpec::IsValid() const 7530fdc8d8SChris Lattner { 766611103cSGreg Clayton return m_opaque_ap.get() != NULL; 7730fdc8d8SChris Lattner } 7830fdc8d8SChris Lattner 7930fdc8d8SChris Lattner bool 8030fdc8d8SChris Lattner SBFileSpec::Exists () const 8130fdc8d8SChris Lattner { 82ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 83ceb6b139SCaroline Tice 84*750cd175SCaroline Tice //if (log) 85*750cd175SCaroline Tice // log->Printf ("SBFileSpec::Exists (this.ap=%p)", m_opaque_ap.get()); 86ceb6b139SCaroline Tice 87ceb6b139SCaroline Tice bool result = false; 886611103cSGreg Clayton if (m_opaque_ap.get()) 89ceb6b139SCaroline Tice result = m_opaque_ap->Exists(); 90ceb6b139SCaroline Tice 91ceb6b139SCaroline Tice if (log) 92*750cd175SCaroline Tice log->Printf ("SBFileSpec::Exists (this.ap=%p) => %s", m_opaque_ap.get(), (result ? "true" : "false")); 93ceb6b139SCaroline Tice 94ceb6b139SCaroline Tice return result; 9530fdc8d8SChris Lattner } 9630fdc8d8SChris Lattner 97428a9a58SCaroline Tice bool 98428a9a58SCaroline Tice SBFileSpec::ResolveExecutableLocation () 99428a9a58SCaroline Tice { 100428a9a58SCaroline Tice if (m_opaque_ap.get()) 101428a9a58SCaroline Tice return m_opaque_ap->ResolveExecutableLocation (); 102428a9a58SCaroline Tice return false; 103428a9a58SCaroline Tice } 10430fdc8d8SChris Lattner 10530fdc8d8SChris Lattner int 10630fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 10730fdc8d8SChris Lattner { 10830fdc8d8SChris Lattner return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 10930fdc8d8SChris Lattner } 11030fdc8d8SChris Lattner 11130fdc8d8SChris Lattner const char * 11223fd10cbSJohnny Chen SBFileSpec::GetFilename() const 11330fdc8d8SChris Lattner { 114ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 115ceb6b139SCaroline Tice 116*750cd175SCaroline Tice //if (log) 117*750cd175SCaroline Tice // log->Printf ("SBFileSpec::GetFilename (this.ap=%p)", m_opaque_ap.get()); 118ceb6b139SCaroline Tice 1196611103cSGreg Clayton if (m_opaque_ap.get()) 120ceb6b139SCaroline Tice { 121ceb6b139SCaroline Tice if (log) 122*750cd175SCaroline Tice log->Printf ("SBFileSpec::GetFilename (this.ap=%p) => %s", m_opaque_ap.get(), 123*750cd175SCaroline Tice m_opaque_ap->GetFilename().AsCString()); 124*750cd175SCaroline Tice 1256611103cSGreg Clayton return m_opaque_ap->GetFilename().AsCString(); 126ceb6b139SCaroline Tice } 127ceb6b139SCaroline Tice 128ceb6b139SCaroline Tice if (log) 129*750cd175SCaroline Tice log->Printf ("SBFileSpec::GetFilename (this.ap=%p) => NULL", m_opaque_ap.get()); 130ceb6b139SCaroline Tice 13130fdc8d8SChris Lattner return NULL; 13230fdc8d8SChris Lattner } 13330fdc8d8SChris Lattner 13430fdc8d8SChris Lattner const char * 13530fdc8d8SChris Lattner SBFileSpec::GetDirectory() const 13630fdc8d8SChris Lattner { 1376611103cSGreg Clayton if (m_opaque_ap.get()) 1386611103cSGreg Clayton return m_opaque_ap->GetDirectory().AsCString(); 13930fdc8d8SChris Lattner return NULL; 14030fdc8d8SChris Lattner } 14130fdc8d8SChris Lattner 14230fdc8d8SChris Lattner uint32_t 14330fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 14430fdc8d8SChris Lattner { 145ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 146ceb6b139SCaroline Tice 147*750cd175SCaroline Tice //if (log) 148*750cd175SCaroline Tice // log->Printf ("SBFileSpec::GetPath (dst_path, dst_len)"); 149ceb6b139SCaroline Tice 150ceb6b139SCaroline Tice uint32_t result; 1516611103cSGreg Clayton if (m_opaque_ap.get()) 152ceb6b139SCaroline Tice { 153ceb6b139SCaroline Tice result = m_opaque_ap->GetPath (dst_path, dst_len); 154ceb6b139SCaroline Tice if (log) 155*750cd175SCaroline Tice log->Printf ("SBFileSpec::GetPath (this.ap=%p, dst_path, dst_len) => dst_path='%s', dst_len='%d', " 156*750cd175SCaroline Tice "result='%d'", m_opaque_ap.get(), dst_path, (uint32_t) dst_len, result); 157ceb6b139SCaroline Tice return result; 158ceb6b139SCaroline Tice } 159ceb6b139SCaroline Tice 160ceb6b139SCaroline Tice if (log) 161*750cd175SCaroline Tice log->Printf ("SBFileSpec::GetPath (this.ap=%p, dst_path, dst_len) => NULL (0)", m_opaque_ap.get()); 16230fdc8d8SChris Lattner 16330fdc8d8SChris Lattner if (dst_path && dst_len) 16430fdc8d8SChris Lattner *dst_path = '\0'; 16530fdc8d8SChris Lattner return 0; 16630fdc8d8SChris Lattner } 16730fdc8d8SChris Lattner 16830fdc8d8SChris Lattner 16930fdc8d8SChris Lattner const lldb_private::FileSpec * 17030fdc8d8SChris Lattner SBFileSpec::operator->() const 17130fdc8d8SChris Lattner { 1726611103cSGreg Clayton return m_opaque_ap.get(); 17330fdc8d8SChris Lattner } 17430fdc8d8SChris Lattner 17530fdc8d8SChris Lattner const lldb_private::FileSpec * 17630fdc8d8SChris Lattner SBFileSpec::get() const 17730fdc8d8SChris Lattner { 1786611103cSGreg Clayton return m_opaque_ap.get(); 17930fdc8d8SChris Lattner } 18030fdc8d8SChris Lattner 18130fdc8d8SChris Lattner 18230fdc8d8SChris Lattner const lldb_private::FileSpec & 18330fdc8d8SChris Lattner SBFileSpec::operator*() const 18430fdc8d8SChris Lattner { 1856611103cSGreg Clayton return *m_opaque_ap.get(); 18630fdc8d8SChris Lattner } 18730fdc8d8SChris Lattner 18830fdc8d8SChris Lattner const lldb_private::FileSpec & 18930fdc8d8SChris Lattner SBFileSpec::ref() const 19030fdc8d8SChris Lattner { 1916611103cSGreg Clayton return *m_opaque_ap.get(); 19230fdc8d8SChris Lattner } 19330fdc8d8SChris Lattner 19430fdc8d8SChris Lattner 19530fdc8d8SChris Lattner void 19630fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 19730fdc8d8SChris Lattner { 1986611103cSGreg Clayton if (m_opaque_ap.get()) 1996611103cSGreg Clayton *m_opaque_ap = fs; 20030fdc8d8SChris Lattner else 2016611103cSGreg Clayton m_opaque_ap.reset (new FileSpec (fs)); 20230fdc8d8SChris Lattner } 20330fdc8d8SChris Lattner 204dde9cff3SCaroline Tice bool 205dde9cff3SCaroline Tice SBFileSpec::GetDescription (SBStream &description) 206dde9cff3SCaroline Tice { 207dde9cff3SCaroline Tice if (m_opaque_ap.get()) 208dde9cff3SCaroline Tice { 209dde9cff3SCaroline Tice const char *filename = GetFilename(); 210dde9cff3SCaroline Tice const char *dir_name = GetDirectory(); 211dde9cff3SCaroline Tice if (!filename && !dir_name) 212dde9cff3SCaroline Tice description.Printf ("No value"); 213dde9cff3SCaroline Tice else if (!dir_name) 214dde9cff3SCaroline Tice description.Printf ("%s", filename); 215dde9cff3SCaroline Tice else 216dde9cff3SCaroline Tice description.Printf ("%s/%s", dir_name, filename); 217dde9cff3SCaroline Tice } 218dde9cff3SCaroline Tice else 219dde9cff3SCaroline Tice description.Printf ("No value"); 220dde9cff3SCaroline Tice 221dde9cff3SCaroline Tice return true; 222dde9cff3SCaroline Tice } 223ceb6b139SCaroline Tice 224ceb6b139SCaroline Tice bool 225ceb6b139SCaroline Tice SBFileSpec::GetDescription (SBStream &description) const 226ceb6b139SCaroline Tice { 227ceb6b139SCaroline Tice if (m_opaque_ap.get()) 228ceb6b139SCaroline Tice { 229ceb6b139SCaroline Tice const char *filename = GetFilename(); 230ceb6b139SCaroline Tice const char *dir_name = GetDirectory(); 231ceb6b139SCaroline Tice if (!filename && !dir_name) 232ceb6b139SCaroline Tice description.Printf ("No value"); 233ceb6b139SCaroline Tice else if (!dir_name) 234ceb6b139SCaroline Tice description.Printf ("%s", filename); 235ceb6b139SCaroline Tice else 236ceb6b139SCaroline Tice description.Printf ("%s/%s", dir_name, filename); 237ceb6b139SCaroline Tice } 238ceb6b139SCaroline Tice else 239ceb6b139SCaroline Tice description.Printf ("No value"); 240ceb6b139SCaroline Tice 241ceb6b139SCaroline Tice return true; 242ceb6b139SCaroline Tice } 243