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" 16da7bc7d0SGreg 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 () : 24226cce25SGreg Clayton m_opaque_ap(new lldb_private::FileSpec()) 2530fdc8d8SChris Lattner { 2630fdc8d8SChris Lattner } 2730fdc8d8SChris Lattner 2830fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 29226cce25SGreg Clayton m_opaque_ap(new lldb_private::FileSpec(*rhs.m_opaque_ap)) 3030fdc8d8SChris Lattner { 31ceb6b139SCaroline Tice } 32226cce25SGreg Clayton 33226cce25SGreg Clayton SBFileSpec::SBFileSpec (const lldb_private::FileSpec& fspec) : 34226cce25SGreg Clayton m_opaque_ap(new lldb_private::FileSpec(fspec)) 35226cce25SGreg Clayton { 3630fdc8d8SChris Lattner } 3730fdc8d8SChris Lattner 38274060b6SGreg Clayton // Deprected!!! 3930fdc8d8SChris Lattner SBFileSpec::SBFileSpec (const char *path) : 40274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, true)) 41274060b6SGreg Clayton { 42274060b6SGreg Clayton } 43274060b6SGreg Clayton 44274060b6SGreg Clayton SBFileSpec::SBFileSpec (const char *path, bool resolve) : 45274060b6SGreg Clayton m_opaque_ap(new FileSpec (path, resolve)) 4630fdc8d8SChris Lattner { 4730fdc8d8SChris Lattner } 4830fdc8d8SChris Lattner 4930fdc8d8SChris Lattner SBFileSpec::~SBFileSpec () 5030fdc8d8SChris Lattner { 5130fdc8d8SChris Lattner } 5230fdc8d8SChris Lattner 5330fdc8d8SChris Lattner const SBFileSpec & 5430fdc8d8SChris Lattner SBFileSpec::operator = (const SBFileSpec &rhs) 5530fdc8d8SChris Lattner { 5630fdc8d8SChris Lattner if (this != &rhs) 57226cce25SGreg Clayton *m_opaque_ap = *rhs.m_opaque_ap; 5830fdc8d8SChris Lattner return *this; 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 6130fdc8d8SChris Lattner bool 6230fdc8d8SChris Lattner SBFileSpec::IsValid() const 6330fdc8d8SChris Lattner { 649076c0ffSSean Callanan return m_opaque_ap->operator bool(); 6530fdc8d8SChris Lattner } 6630fdc8d8SChris Lattner 6730fdc8d8SChris Lattner bool 6830fdc8d8SChris Lattner SBFileSpec::Exists () const 6930fdc8d8SChris Lattner { 705160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 71ceb6b139SCaroline Tice 72226cce25SGreg Clayton bool result = m_opaque_ap->Exists(); 73ceb6b139SCaroline Tice 74ceb6b139SCaroline Tice if (log) 7593aa84e8SGreg Clayton log->Printf ("SBFileSpec(%p)::Exists () => %s", m_opaque_ap.get(), (result ? "true" : "false")); 76ceb6b139SCaroline Tice 77ceb6b139SCaroline Tice return result; 7830fdc8d8SChris Lattner } 7930fdc8d8SChris Lattner 80428a9a58SCaroline Tice bool 81428a9a58SCaroline Tice SBFileSpec::ResolveExecutableLocation () 82428a9a58SCaroline Tice { 83428a9a58SCaroline Tice return m_opaque_ap->ResolveExecutableLocation (); 84428a9a58SCaroline Tice } 8530fdc8d8SChris Lattner 8630fdc8d8SChris Lattner int 8730fdc8d8SChris Lattner SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 8830fdc8d8SChris Lattner { 8930fdc8d8SChris Lattner return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 9030fdc8d8SChris Lattner } 9130fdc8d8SChris Lattner 9230fdc8d8SChris Lattner const char * 9323fd10cbSJohnny Chen SBFileSpec::GetFilename() const 9430fdc8d8SChris Lattner { 95226cce25SGreg Clayton const char *s = m_opaque_ap->GetFilename().AsCString(); 964838131bSGreg Clayton 975160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 98ceb6b139SCaroline Tice if (log) 99cfd1acedSGreg Clayton { 100cfd1acedSGreg Clayton if (s) 101cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s); 102cfd1acedSGreg Clayton else 103cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get()); 104cfd1acedSGreg Clayton } 105750cd175SCaroline Tice 1064838131bSGreg Clayton return s; 10730fdc8d8SChris Lattner } 10830fdc8d8SChris Lattner 10930fdc8d8SChris Lattner const char * 11030fdc8d8SChris Lattner SBFileSpec::GetDirectory() const 11130fdc8d8SChris Lattner { 112226cce25SGreg Clayton const char *s = m_opaque_ap->GetDirectory().AsCString(); 1135160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1144838131bSGreg Clayton if (log) 115cfd1acedSGreg Clayton { 116cfd1acedSGreg Clayton if (s) 117cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s); 118cfd1acedSGreg Clayton else 119cfd1acedSGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", m_opaque_ap.get()); 120cfd1acedSGreg Clayton } 1214838131bSGreg Clayton return s; 12230fdc8d8SChris Lattner } 12330fdc8d8SChris Lattner 124*fbb76349SGreg Clayton void 125*fbb76349SGreg Clayton SBFileSpec::SetFilename(const char *filename) 126*fbb76349SGreg Clayton { 127*fbb76349SGreg Clayton if (filename && filename[0]) 128*fbb76349SGreg Clayton m_opaque_ap->GetFilename().SetCString(filename); 129*fbb76349SGreg Clayton else 130*fbb76349SGreg Clayton m_opaque_ap->GetFilename().Clear(); 131*fbb76349SGreg Clayton } 132*fbb76349SGreg Clayton 133*fbb76349SGreg Clayton void 134*fbb76349SGreg Clayton SBFileSpec::SetDirectory(const char *directory) 135*fbb76349SGreg Clayton { 136*fbb76349SGreg Clayton if (directory && directory[0]) 137*fbb76349SGreg Clayton m_opaque_ap->GetDirectory().SetCString(directory); 138*fbb76349SGreg Clayton else 139*fbb76349SGreg Clayton m_opaque_ap->GetDirectory().Clear(); 140*fbb76349SGreg Clayton } 141*fbb76349SGreg Clayton 14230fdc8d8SChris Lattner uint32_t 14330fdc8d8SChris Lattner SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 14430fdc8d8SChris Lattner { 1455160ce5cSGreg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 146ceb6b139SCaroline Tice 147226cce25SGreg Clayton uint32_t result = m_opaque_ap->GetPath (dst_path, dst_len); 148ceb6b139SCaroline Tice 149ceb6b139SCaroline Tice if (log) 150d01b2953SDaniel Malea log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%" PRIu64 ") => %u", 15143e0af06SGreg Clayton m_opaque_ap.get(), result, dst_path, (uint64_t)dst_len, result); 15230fdc8d8SChris Lattner 153cfd1acedSGreg Clayton if (result == 0 && dst_path && dst_len > 0) 15430fdc8d8SChris Lattner *dst_path = '\0'; 155cfd1acedSGreg Clayton return result; 15630fdc8d8SChris Lattner } 15730fdc8d8SChris Lattner 15830fdc8d8SChris Lattner 15930fdc8d8SChris Lattner const lldb_private::FileSpec * 16030fdc8d8SChris Lattner SBFileSpec::operator->() const 16130fdc8d8SChris Lattner { 1626611103cSGreg Clayton return m_opaque_ap.get(); 16330fdc8d8SChris Lattner } 16430fdc8d8SChris Lattner 16530fdc8d8SChris Lattner const lldb_private::FileSpec * 16630fdc8d8SChris Lattner SBFileSpec::get() const 16730fdc8d8SChris Lattner { 1686611103cSGreg Clayton return m_opaque_ap.get(); 16930fdc8d8SChris Lattner } 17030fdc8d8SChris Lattner 17130fdc8d8SChris Lattner 17230fdc8d8SChris Lattner const lldb_private::FileSpec & 17330fdc8d8SChris Lattner SBFileSpec::operator*() const 17430fdc8d8SChris Lattner { 1756611103cSGreg Clayton return *m_opaque_ap.get(); 17630fdc8d8SChris Lattner } 17730fdc8d8SChris Lattner 17830fdc8d8SChris Lattner const lldb_private::FileSpec & 17930fdc8d8SChris Lattner SBFileSpec::ref() const 18030fdc8d8SChris Lattner { 1816611103cSGreg Clayton return *m_opaque_ap.get(); 18230fdc8d8SChris Lattner } 18330fdc8d8SChris Lattner 18430fdc8d8SChris Lattner 18530fdc8d8SChris Lattner void 18630fdc8d8SChris Lattner SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 18730fdc8d8SChris Lattner { 1886611103cSGreg Clayton *m_opaque_ap = fs; 18930fdc8d8SChris Lattner } 19030fdc8d8SChris Lattner 191dde9cff3SCaroline Tice bool 192ceb6b139SCaroline Tice SBFileSpec::GetDescription (SBStream &description) const 193ceb6b139SCaroline Tice { 194da7bc7d0SGreg Clayton Stream &strm = description.ref(); 195cfd1acedSGreg Clayton char path[PATH_MAX]; 196cfd1acedSGreg Clayton if (m_opaque_ap->GetPath(path, sizeof(path))) 197da7bc7d0SGreg Clayton strm.PutCString (path); 198ceb6b139SCaroline Tice return true; 199ceb6b139SCaroline Tice } 200