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" 13*ceb6b139SCaroline 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 { 23*ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 24*ceb6b139SCaroline Tice 25*ceb6b139SCaroline Tice if (log) 26*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::SBFileSpec () ==> this = %p", this); 2730fdc8d8SChris Lattner } 2830fdc8d8SChris Lattner 2930fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 306611103cSGreg Clayton m_opaque_ap() 3130fdc8d8SChris Lattner { 32*ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 33*ceb6b139SCaroline Tice 34*ceb6b139SCaroline Tice if (log) 35*ceb6b139SCaroline Tice { 36*ceb6b139SCaroline Tice SBStream sstr; 37*ceb6b139SCaroline Tice rhs.GetDescription (sstr); 38*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec &rhs) rhs.m_opaque_ap.get() = %p (%s) ==> this = %p", 39*ceb6b139SCaroline Tice rhs.m_opaque_ap.get(), sstr.GetData(), this); 40*ceb6b139SCaroline Tice } 41*ceb6b139SCaroline Tice 426611103cSGreg Clayton if (rhs.m_opaque_ap.get()) 4323fd10cbSJohnny Chen m_opaque_ap.reset (new FileSpec (rhs.get())); 4430fdc8d8SChris Lattner } 4530fdc8d8SChris Lattner 46274060b6SGreg Clayton // Deprected!!! 4730fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) : 48274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, true)) 49274060b6SGreg Clayton { 50274060b6SGreg Clayton } 51274060b6SGreg Clayton 52274060b6SGreg Clayton SBFileSpec::SBFileSpec (const char *path, bool resolve) : 53274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, resolve)) 5430fdc8d8SChris Lattner { 55*ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 56*ceb6b139SCaroline Tice 57*ceb6b139SCaroline Tice if (log) 58*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::SBFileSpec (const char *path, bool resolve) path = '%s', resolve = %s ==> " 59*ceb6b139SCaroline Tice "this = %p (m_opaque_ap.get() = %p)", path, (resolve ? "true" : "false"), this, 60*ceb6b139SCaroline Tice m_opaque_ap.get()); 6130fdc8d8SChris Lattner } 6230fdc8d8SChris Lattner 6330fdc8d8SChris Lattner SBFileSpec::~SBFileSpec () 6430fdc8d8SChris Lattner { 6530fdc8d8SChris Lattner } 6630fdc8d8SChris Lattner 6730fdc8d8SChris Lattner const SBFileSpec & 6830fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs) 6930fdc8d8SChris Lattner { 7030fdc8d8SChris Lattner if (this != &rhs) 7130fdc8d8SChris Lattner { 7230fdc8d8SChris Lattner if (rhs.IsValid()) 736611103cSGreg Clayton m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get())); 7430fdc8d8SChris Lattner } 7530fdc8d8SChris Lattner return *this; 7630fdc8d8SChris Lattner } 7730fdc8d8SChris Lattner 7830fdc8d8SChris Lattner bool 7930fdc8d8SChris Lattner SBFileSpec::IsValid() const 8030fdc8d8SChris Lattner { 816611103cSGreg Clayton return m_opaque_ap.get() != NULL; 8230fdc8d8SChris Lattner } 8330fdc8d8SChris Lattner 8430fdc8d8SChris Lattner bool 8530fdc8d8SChris Lattner SBFileSpec::Exists () const 8630fdc8d8SChris Lattner { 87*ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 88*ceb6b139SCaroline Tice 89*ceb6b139SCaroline Tice if (log) 90*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::Exists ()"); 91*ceb6b139SCaroline Tice 92*ceb6b139SCaroline Tice bool result = false; 936611103cSGreg Clayton if (m_opaque_ap.get()) 94*ceb6b139SCaroline Tice result = m_opaque_ap->Exists(); 95*ceb6b139SCaroline Tice 96*ceb6b139SCaroline Tice if (log) 97*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::Exists ==> %s", (result ? "true" : "false")); 98*ceb6b139SCaroline Tice 99*ceb6b139SCaroline Tice return result; 10030fdc8d8SChris Lattner } 10130fdc8d8SChris Lattner 102428a9a58SCaroline Tice bool 103428a9a58SCaroline Tice SBFileSpec::ResolveExecutableLocation () 104428a9a58SCaroline Tice { 105428a9a58SCaroline Tice if (m_opaque_ap.get()) 106428a9a58SCaroline Tice return m_opaque_ap->ResolveExecutableLocation (); 107428a9a58SCaroline Tice return false; 108428a9a58SCaroline Tice } 10930fdc8d8SChris Lattner 11030fdc8d8SChris Lattner int 11130fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 11230fdc8d8SChris Lattner { 11330fdc8d8SChris Lattner return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 11430fdc8d8SChris Lattner } 11530fdc8d8SChris Lattner 11630fdc8d8SChris Lattner const char * 11723fd10cbSJohnny Chen SBFileSpec::GetFilename() const 11830fdc8d8SChris Lattner { 119*ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 120*ceb6b139SCaroline Tice 121*ceb6b139SCaroline Tice if (log) 122*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::GetFilename ()"); 123*ceb6b139SCaroline Tice 1246611103cSGreg Clayton if (m_opaque_ap.get()) 125*ceb6b139SCaroline Tice { 126*ceb6b139SCaroline Tice if (log) 127*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::GetFilename ==> %s", m_opaque_ap->GetFilename().AsCString()); 1286611103cSGreg Clayton return m_opaque_ap->GetFilename().AsCString(); 129*ceb6b139SCaroline Tice } 130*ceb6b139SCaroline Tice 131*ceb6b139SCaroline Tice if (log) 132*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::GetFilename ==> NULL"); 133*ceb6b139SCaroline Tice 13430fdc8d8SChris Lattner return NULL; 13530fdc8d8SChris Lattner } 13630fdc8d8SChris Lattner 13730fdc8d8SChris Lattner const char * 13830fdc8d8SChris Lattner SBFileSpec::GetDirectory() const 13930fdc8d8SChris Lattner { 1406611103cSGreg Clayton if (m_opaque_ap.get()) 1416611103cSGreg Clayton return m_opaque_ap->GetDirectory().AsCString(); 14230fdc8d8SChris Lattner return NULL; 14330fdc8d8SChris Lattner } 14430fdc8d8SChris Lattner 14530fdc8d8SChris Lattner uint32_t 14630fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 14730fdc8d8SChris Lattner { 148*ceb6b139SCaroline Tice Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 149*ceb6b139SCaroline Tice 150*ceb6b139SCaroline Tice if (log) 151*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::GetPath (dst_path, dst_len)"); 152*ceb6b139SCaroline Tice 153*ceb6b139SCaroline Tice uint32_t result; 1546611103cSGreg Clayton if (m_opaque_ap.get()) 155*ceb6b139SCaroline Tice { 156*ceb6b139SCaroline Tice result = m_opaque_ap->GetPath (dst_path, dst_len); 157*ceb6b139SCaroline Tice if (log) 158*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::GetPath ==> %s (%d)", dst_path, result); 159*ceb6b139SCaroline Tice return result; 160*ceb6b139SCaroline Tice } 161*ceb6b139SCaroline Tice 162*ceb6b139SCaroline Tice if (log) 163*ceb6b139SCaroline Tice log->Printf ("SBFileSpec::GetPath ==> NULL (0)"); 16430fdc8d8SChris Lattner 16530fdc8d8SChris Lattner if (dst_path && dst_len) 16630fdc8d8SChris Lattner *dst_path = '\0'; 16730fdc8d8SChris Lattner return 0; 16830fdc8d8SChris Lattner } 16930fdc8d8SChris Lattner 17030fdc8d8SChris Lattner 17130fdc8d8SChris Lattner const lldb_private::FileSpec * 17230fdc8d8SChris Lattner SBFileSpec::operator->() const 17330fdc8d8SChris Lattner { 1746611103cSGreg Clayton return m_opaque_ap.get(); 17530fdc8d8SChris Lattner } 17630fdc8d8SChris Lattner 17730fdc8d8SChris Lattner const lldb_private::FileSpec * 17830fdc8d8SChris Lattner SBFileSpec::get() const 17930fdc8d8SChris Lattner { 1806611103cSGreg Clayton return m_opaque_ap.get(); 18130fdc8d8SChris Lattner } 18230fdc8d8SChris Lattner 18330fdc8d8SChris Lattner 18430fdc8d8SChris Lattner const lldb_private::FileSpec & 18530fdc8d8SChris Lattner SBFileSpec::operator*() const 18630fdc8d8SChris Lattner { 1876611103cSGreg Clayton return *m_opaque_ap.get(); 18830fdc8d8SChris Lattner } 18930fdc8d8SChris Lattner 19030fdc8d8SChris Lattner const lldb_private::FileSpec & 19130fdc8d8SChris Lattner SBFileSpec::ref() const 19230fdc8d8SChris Lattner { 1936611103cSGreg Clayton return *m_opaque_ap.get(); 19430fdc8d8SChris Lattner } 19530fdc8d8SChris Lattner 19630fdc8d8SChris Lattner 19730fdc8d8SChris Lattner void 19830fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 19930fdc8d8SChris Lattner { 2006611103cSGreg Clayton if (m_opaque_ap.get()) 2016611103cSGreg Clayton *m_opaque_ap = fs; 20230fdc8d8SChris Lattner else 2036611103cSGreg Clayton m_opaque_ap.reset (new FileSpec (fs)); 20430fdc8d8SChris Lattner } 20530fdc8d8SChris Lattner 206dde9cff3SCaroline Tice bool 207dde9cff3SCaroline Tice SBFileSpec::GetDescription (SBStream &description) 208dde9cff3SCaroline Tice { 209dde9cff3SCaroline Tice if (m_opaque_ap.get()) 210dde9cff3SCaroline Tice { 211dde9cff3SCaroline Tice const char *filename = GetFilename(); 212dde9cff3SCaroline Tice const char *dir_name = GetDirectory(); 213dde9cff3SCaroline Tice if (!filename && !dir_name) 214dde9cff3SCaroline Tice description.Printf ("No value"); 215dde9cff3SCaroline Tice else if (!dir_name) 216dde9cff3SCaroline Tice description.Printf ("%s", filename); 217dde9cff3SCaroline Tice else 218dde9cff3SCaroline Tice description.Printf ("%s/%s", dir_name, filename); 219dde9cff3SCaroline Tice } 220dde9cff3SCaroline Tice else 221dde9cff3SCaroline Tice description.Printf ("No value"); 222dde9cff3SCaroline Tice 223dde9cff3SCaroline Tice return true; 224dde9cff3SCaroline Tice } 225*ceb6b139SCaroline Tice 226*ceb6b139SCaroline Tice bool 227*ceb6b139SCaroline Tice SBFileSpec::GetDescription (SBStream &description) const 228*ceb6b139SCaroline Tice { 229*ceb6b139SCaroline Tice if (m_opaque_ap.get()) 230*ceb6b139SCaroline Tice { 231*ceb6b139SCaroline Tice const char *filename = GetFilename(); 232*ceb6b139SCaroline Tice const char *dir_name = GetDirectory(); 233*ceb6b139SCaroline Tice if (!filename && !dir_name) 234*ceb6b139SCaroline Tice description.Printf ("No value"); 235*ceb6b139SCaroline Tice else if (!dir_name) 236*ceb6b139SCaroline Tice description.Printf ("%s", filename); 237*ceb6b139SCaroline Tice else 238*ceb6b139SCaroline Tice description.Printf ("%s/%s", dir_name, filename); 239*ceb6b139SCaroline Tice } 240*ceb6b139SCaroline Tice else 241*ceb6b139SCaroline Tice description.Printf ("No value"); 242*ceb6b139SCaroline Tice 243*ceb6b139SCaroline Tice return true; 244*ceb6b139SCaroline Tice } 245