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 108acdbb8aSStephen Wilson #include <limits.h> 118acdbb8aSStephen Wilson 1230fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 13dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1453239f00SGreg Clayton #include "lldb/Host/FileSpec.h" 15ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 16*da7bc7d0SGreg Clayton #include "lldb/Core/Stream.h" 1730fdc8d8SChris Lattner 1830fdc8d8SChris Lattner using namespace lldb; 1930fdc8d8SChris Lattner using namespace lldb_private; 2030fdc8d8SChris Lattner 2130fdc8d8SChris Lattner 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner SBFileSpec::SBFileSpec () : 246611103cSGreg Clayton m_opaque_ap() 2530fdc8d8SChris Lattner { 2630fdc8d8SChris Lattner } 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 296611103cSGreg Clayton m_opaque_ap() 3030fdc8d8SChris Lattner { 312d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 32750cd175SCaroline Tice 33750cd175SCaroline Tice if (rhs.m_opaque_ap.get()) 34750cd175SCaroline Tice m_opaque_ap.reset (new FileSpec (rhs.get())); 35ceb6b139SCaroline Tice 36ceb6b139SCaroline Tice if (log) 37ceb6b139SCaroline Tice { 38ceb6b139SCaroline Tice SBStream sstr; 39750cd175SCaroline Tice GetDescription (sstr); 40cfd1acedSGreg Clayton log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec rhs.ap=%p) => SBFileSpec(%p): %s", 41750cd175SCaroline Tice rhs.m_opaque_ap.get(), m_opaque_ap.get(), sstr.GetData()); 42ceb6b139SCaroline Tice } 4330fdc8d8SChris Lattner } 4430fdc8d8SChris Lattner 45274060b6SGreg Clayton // Deprected!!! 4630fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) : 47274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, true)) 48274060b6SGreg Clayton { 49274060b6SGreg Clayton } 50274060b6SGreg Clayton 51274060b6SGreg Clayton SBFileSpec::SBFileSpec (const char *path, bool resolve) : 52274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, resolve)) 5330fdc8d8SChris Lattner { 542d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 55ceb6b139SCaroline Tice 56ceb6b139SCaroline Tice if (log) 57cfd1acedSGreg Clayton log->Printf ("SBFileSpec::SBFileSpec (path=\"%s\", resolve=%i) => SBFileSpec(%p)", path, 5893aa84e8SGreg Clayton resolve, m_opaque_ap.get()); 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 6130fdc8d8SChris Lattner SBFileSpec::~SBFileSpec () 6230fdc8d8SChris Lattner { 6330fdc8d8SChris Lattner } 6430fdc8d8SChris Lattner 6530fdc8d8SChris Lattner const SBFileSpec & 6630fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs) 6730fdc8d8SChris Lattner { 6830fdc8d8SChris Lattner if (this != &rhs) 6930fdc8d8SChris Lattner { 7030fdc8d8SChris Lattner if (rhs.IsValid()) 716611103cSGreg Clayton m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get())); 7230fdc8d8SChris Lattner } 7330fdc8d8SChris Lattner return *this; 7430fdc8d8SChris Lattner } 7530fdc8d8SChris Lattner 7630fdc8d8SChris Lattner bool 7730fdc8d8SChris Lattner SBFileSpec::IsValid() const 7830fdc8d8SChris Lattner { 796611103cSGreg Clayton return m_opaque_ap.get() != NULL; 8030fdc8d8SChris Lattner } 8130fdc8d8SChris Lattner 8230fdc8d8SChris Lattner bool 8330fdc8d8SChris Lattner SBFileSpec::Exists () const 8430fdc8d8SChris Lattner { 852d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 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) 9293aa84e8SGreg Clayton log->Printf ("SBFileSpec(%p)::Exists () => %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 { 1144838131bSGreg Clayton const char *s = NULL; 1156611103cSGreg Clayton if (m_opaque_ap.get()) 1164838131bSGreg Clayton s = m_opaque_ap->GetFilename().AsCString(); 1174838131bSGreg Clayton 1182d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 119ceb6b139SCaroline Tice if (log) 120cfd1acedSGreg Clayton { 121cfd1acedSGreg Clayton if (s) 122cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s); 123cfd1acedSGreg Clayton else 124cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get()); 125cfd1acedSGreg Clayton } 126750cd175SCaroline Tice 1274838131bSGreg Clayton return s; 12830fdc8d8SChris Lattner } 12930fdc8d8SChris Lattner 13030fdc8d8SChris Lattner const char * 13130fdc8d8SChris Lattner SBFileSpec::GetDirectory() const 13230fdc8d8SChris Lattner { 1334838131bSGreg Clayton const char *s = NULL; 1346611103cSGreg Clayton if (m_opaque_ap.get()) 1354838131bSGreg Clayton s = m_opaque_ap->GetDirectory().AsCString(); 1362d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1374838131bSGreg Clayton if (log) 138cfd1acedSGreg Clayton { 139cfd1acedSGreg Clayton if (s) 140cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s); 141cfd1acedSGreg Clayton else 142cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", m_opaque_ap.get()); 143cfd1acedSGreg Clayton } 1444838131bSGreg Clayton return s; 14530fdc8d8SChris Lattner } 14630fdc8d8SChris Lattner 14730fdc8d8SChris Lattner uint32_t 14830fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 14930fdc8d8SChris Lattner { 1502d4edfbcSGreg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 151ceb6b139SCaroline Tice 152cfd1acedSGreg Clayton uint32_t result = 0; 1536611103cSGreg Clayton if (m_opaque_ap.get()) 154ceb6b139SCaroline Tice result = m_opaque_ap->GetPath (dst_path, dst_len); 155ceb6b139SCaroline Tice 156ceb6b139SCaroline Tice if (log) 157cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%zu) => %u", 158cfd1acedSGreg Clayton m_opaque_ap.get(), result, dst_path, dst_len, result); 15930fdc8d8SChris Lattner 160cfd1acedSGreg Clayton if (result == 0 && dst_path && dst_len > 0) 16130fdc8d8SChris Lattner *dst_path = '\0'; 162cfd1acedSGreg Clayton return result; 16330fdc8d8SChris Lattner } 16430fdc8d8SChris Lattner 16530fdc8d8SChris Lattner 16630fdc8d8SChris Lattner const lldb_private::FileSpec * 16730fdc8d8SChris Lattner SBFileSpec::operator->() const 16830fdc8d8SChris Lattner { 1696611103cSGreg Clayton return m_opaque_ap.get(); 17030fdc8d8SChris Lattner } 17130fdc8d8SChris Lattner 17230fdc8d8SChris Lattner const lldb_private::FileSpec * 17330fdc8d8SChris Lattner SBFileSpec::get() const 17430fdc8d8SChris Lattner { 1756611103cSGreg Clayton return m_opaque_ap.get(); 17630fdc8d8SChris Lattner } 17730fdc8d8SChris Lattner 17830fdc8d8SChris Lattner 17930fdc8d8SChris Lattner const lldb_private::FileSpec & 18030fdc8d8SChris Lattner SBFileSpec::operator*() const 18130fdc8d8SChris Lattner { 1826611103cSGreg Clayton return *m_opaque_ap.get(); 18330fdc8d8SChris Lattner } 18430fdc8d8SChris Lattner 18530fdc8d8SChris Lattner const lldb_private::FileSpec & 18630fdc8d8SChris Lattner SBFileSpec::ref() const 18730fdc8d8SChris Lattner { 1886611103cSGreg Clayton return *m_opaque_ap.get(); 18930fdc8d8SChris Lattner } 19030fdc8d8SChris Lattner 19130fdc8d8SChris Lattner 19230fdc8d8SChris Lattner void 19330fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 19430fdc8d8SChris Lattner { 1956611103cSGreg Clayton if (m_opaque_ap.get()) 1966611103cSGreg Clayton *m_opaque_ap = fs; 19730fdc8d8SChris Lattner else 1986611103cSGreg Clayton m_opaque_ap.reset (new FileSpec (fs)); 19930fdc8d8SChris Lattner } 20030fdc8d8SChris Lattner 201dde9cff3SCaroline Tice bool 202ceb6b139SCaroline Tice SBFileSpec::GetDescription (SBStream &description) const 203ceb6b139SCaroline Tice { 204*da7bc7d0SGreg Clayton Stream &strm = description.ref(); 205ceb6b139SCaroline Tice if (m_opaque_ap.get()) 206ceb6b139SCaroline Tice { 207cfd1acedSGreg Clayton char path[PATH_MAX]; 208cfd1acedSGreg Clayton if (m_opaque_ap->GetPath(path, sizeof(path))) 209*da7bc7d0SGreg Clayton strm.PutCString (path); 210ceb6b139SCaroline Tice } 211ceb6b139SCaroline Tice else 212*da7bc7d0SGreg Clayton strm.PutCString ("No value"); 213ceb6b139SCaroline Tice 214ceb6b139SCaroline Tice return true; 215ceb6b139SCaroline Tice } 216