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 10*af90cf52SSean Callanan #include <inttypes.h> // PRIu64 118acdbb8aSStephen Wilson #include <limits.h> 128acdbb8aSStephen Wilson 1330fdc8d8SChris Lattner #include "lldb/API/SBFileSpec.h" 14dde9cff3SCaroline Tice #include "lldb/API/SBStream.h" 1553239f00SGreg Clayton #include "lldb/Host/FileSpec.h" 16ceb6b139SCaroline Tice #include "lldb/Core/Log.h" 17da7bc7d0SGreg Clayton #include "lldb/Core/Stream.h" 1830fdc8d8SChris Lattner 1930fdc8d8SChris Lattner using namespace lldb; 2030fdc8d8SChris Lattner using namespace lldb_private; 2130fdc8d8SChris Lattner 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner 2430fdc8d8SChris Lattner SBFileSpec::SBFileSpec () : 25226cce25SGreg Clayton m_opaque_ap(new lldb_private::FileSpec()) 2630fdc8d8SChris Lattner { 2730fdc8d8SChris Lattner } 2830fdc8d8SChris Lattner 2930fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 30226cce25SGreg Clayton m_opaque_ap(new lldb_private::FileSpec(*rhs.m_opaque_ap)) 3130fdc8d8SChris Lattner { 32ceb6b139SCaroline Tice } 33226cce25SGreg Clayton 34226cce25SGreg Clayton SBFileSpec::SBFileSpec (const lldb_private::FileSpec& fspec) : 35226cce25SGreg Clayton m_opaque_ap(new lldb_private::FileSpec(fspec)) 36226cce25SGreg Clayton { 3730fdc8d8SChris Lattner } 3830fdc8d8SChris Lattner 39274060b6SGreg Clayton // Deprected!!! 4030fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) : 41274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, true)) 42274060b6SGreg Clayton { 43274060b6SGreg Clayton } 44274060b6SGreg Clayton 45274060b6SGreg Clayton SBFileSpec::SBFileSpec (const char *path, bool resolve) : 46274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, resolve)) 4730fdc8d8SChris Lattner { 4830fdc8d8SChris Lattner } 4930fdc8d8SChris Lattner 5030fdc8d8SChris Lattner SBFileSpec::~SBFileSpec () 5130fdc8d8SChris Lattner { 5230fdc8d8SChris Lattner } 5330fdc8d8SChris Lattner 5430fdc8d8SChris Lattner const SBFileSpec & 5530fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs) 5630fdc8d8SChris Lattner { 5730fdc8d8SChris Lattner if (this != &rhs) 58226cce25SGreg Clayton *m_opaque_ap = *rhs.m_opaque_ap; 5930fdc8d8SChris Lattner return *this; 6030fdc8d8SChris Lattner } 6130fdc8d8SChris Lattner 6230fdc8d8SChris Lattner bool 6330fdc8d8SChris Lattner SBFileSpec::IsValid() const 6430fdc8d8SChris Lattner { 659076c0ffSSean Callanan return m_opaque_ap->operator bool(); 6630fdc8d8SChris Lattner } 6730fdc8d8SChris Lattner 6830fdc8d8SChris Lattner bool 6930fdc8d8SChris Lattner SBFileSpec::Exists () const 7030fdc8d8SChris Lattner { 715160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 72ceb6b139SCaroline Tice 73226cce25SGreg Clayton bool result = m_opaque_ap->Exists(); 74ceb6b139SCaroline Tice 75ceb6b139SCaroline Tice if (log) 76324a1036SSaleem Abdulrasool log->Printf ("SBFileSpec(%p)::Exists () => %s", 77324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ap.get()), 78324a1036SSaleem Abdulrasool (result ? "true" : "false")); 79ceb6b139SCaroline Tice 80ceb6b139SCaroline Tice return result; 8130fdc8d8SChris Lattner } 8230fdc8d8SChris Lattner 83428a9a58SCaroline Tice bool 84428a9a58SCaroline Tice SBFileSpec::ResolveExecutableLocation () 85428a9a58SCaroline Tice { 86428a9a58SCaroline Tice return m_opaque_ap->ResolveExecutableLocation (); 87428a9a58SCaroline Tice } 8830fdc8d8SChris Lattner 8930fdc8d8SChris Lattner int 9030fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 9130fdc8d8SChris Lattner { 9230fdc8d8SChris Lattner return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 9330fdc8d8SChris Lattner } 9430fdc8d8SChris Lattner 9530fdc8d8SChris Lattner const char * 9623fd10cbSJohnny Chen SBFileSpec::GetFilename() const 9730fdc8d8SChris Lattner { 98226cce25SGreg Clayton const char *s = m_opaque_ap->GetFilename().AsCString(); 994838131bSGreg Clayton 1005160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 101ceb6b139SCaroline Tice if (log) 102cfd1acedSGreg Clayton { 103cfd1acedSGreg Clayton if (s) 104324a1036SSaleem Abdulrasool log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", 105324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ap.get()), s); 106cfd1acedSGreg Clayton else 107324a1036SSaleem Abdulrasool log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", 108324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ap.get())); 109cfd1acedSGreg Clayton } 110750cd175SCaroline Tice 1114838131bSGreg Clayton return s; 11230fdc8d8SChris Lattner } 11330fdc8d8SChris Lattner 11430fdc8d8SChris Lattner const char * 11530fdc8d8SChris Lattner SBFileSpec::GetDirectory() const 11630fdc8d8SChris Lattner { 117226cce25SGreg Clayton const char *s = m_opaque_ap->GetDirectory().AsCString(); 1185160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1194838131bSGreg Clayton if (log) 120cfd1acedSGreg Clayton { 121cfd1acedSGreg Clayton if (s) 122324a1036SSaleem Abdulrasool log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", 123324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ap.get()), s); 124cfd1acedSGreg Clayton else 125324a1036SSaleem Abdulrasool log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", 126324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ap.get())); 127cfd1acedSGreg Clayton } 1284838131bSGreg Clayton return s; 12930fdc8d8SChris Lattner } 13030fdc8d8SChris Lattner 131fbb76349SGreg Clayton void 132fbb76349SGreg Clayton SBFileSpec::SetFilename(const char *filename) 133fbb76349SGreg Clayton { 134fbb76349SGreg Clayton if (filename && filename[0]) 135fbb76349SGreg Clayton m_opaque_ap->GetFilename().SetCString(filename); 136fbb76349SGreg Clayton else 137fbb76349SGreg Clayton m_opaque_ap->GetFilename().Clear(); 138fbb76349SGreg Clayton } 139fbb76349SGreg Clayton 140fbb76349SGreg Clayton void 141fbb76349SGreg Clayton SBFileSpec::SetDirectory(const char *directory) 142fbb76349SGreg Clayton { 143fbb76349SGreg Clayton if (directory && directory[0]) 144fbb76349SGreg Clayton m_opaque_ap->GetDirectory().SetCString(directory); 145fbb76349SGreg Clayton else 146fbb76349SGreg Clayton m_opaque_ap->GetDirectory().Clear(); 147fbb76349SGreg Clayton } 148fbb76349SGreg Clayton 14930fdc8d8SChris Lattner uint32_t 15030fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 15130fdc8d8SChris Lattner { 1525160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 153ceb6b139SCaroline Tice 154226cce25SGreg Clayton uint32_t result = m_opaque_ap->GetPath (dst_path, dst_len); 155ceb6b139SCaroline Tice 156ceb6b139SCaroline Tice if (log) 157d01b2953SDaniel Malea log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%" PRIu64 ") => %u", 158324a1036SSaleem Abdulrasool static_cast<void*>(m_opaque_ap.get()), result, dst_path, 159324a1036SSaleem Abdulrasool static_cast<uint64_t>(dst_len), result); 16030fdc8d8SChris Lattner 161cfd1acedSGreg Clayton if (result == 0 && dst_path && dst_len > 0) 16230fdc8d8SChris Lattner *dst_path = '\0'; 163cfd1acedSGreg Clayton return result; 16430fdc8d8SChris Lattner } 16530fdc8d8SChris Lattner 16630fdc8d8SChris Lattner 16730fdc8d8SChris Lattner const lldb_private::FileSpec * 16830fdc8d8SChris Lattner SBFileSpec::operator->() const 16930fdc8d8SChris Lattner { 1706611103cSGreg Clayton return m_opaque_ap.get(); 17130fdc8d8SChris Lattner } 17230fdc8d8SChris Lattner 17330fdc8d8SChris Lattner const lldb_private::FileSpec * 17430fdc8d8SChris Lattner SBFileSpec::get() const 17530fdc8d8SChris Lattner { 1766611103cSGreg Clayton return m_opaque_ap.get(); 17730fdc8d8SChris Lattner } 17830fdc8d8SChris Lattner 17930fdc8d8SChris Lattner 18030fdc8d8SChris Lattner const lldb_private::FileSpec & 18130fdc8d8SChris Lattner SBFileSpec::operator*() const 18230fdc8d8SChris Lattner { 1836611103cSGreg Clayton return *m_opaque_ap.get(); 18430fdc8d8SChris Lattner } 18530fdc8d8SChris Lattner 18630fdc8d8SChris Lattner const lldb_private::FileSpec & 18730fdc8d8SChris Lattner SBFileSpec::ref() const 18830fdc8d8SChris Lattner { 1896611103cSGreg Clayton return *m_opaque_ap.get(); 19030fdc8d8SChris Lattner } 19130fdc8d8SChris Lattner 19230fdc8d8SChris Lattner 19330fdc8d8SChris Lattner void 19430fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 19530fdc8d8SChris Lattner { 1966611103cSGreg Clayton *m_opaque_ap = fs; 19730fdc8d8SChris Lattner } 19830fdc8d8SChris Lattner 199dde9cff3SCaroline Tice bool 200ceb6b139SCaroline Tice SBFileSpec::GetDescription (SBStream &description) const 201ceb6b139SCaroline Tice { 202da7bc7d0SGreg Clayton Stream &strm = description.ref(); 203cfd1acedSGreg Clayton char path[PATH_MAX]; 204cfd1acedSGreg Clayton if (m_opaque_ap->GetPath(path, sizeof(path))) 205da7bc7d0SGreg Clayton strm.PutCString (path); 206ceb6b139SCaroline Tice return true; 207ceb6b139SCaroline Tice } 208