124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- SBFileSpec.cpp ------------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10ec2d9787bed36e9eda6eac1996c7bed76c8d3da4Stephen Wilson#include <limits.h> 11ec2d9787bed36e9eda6eac1996c7bed76c8d3da4Stephen Wilson 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/API/SBFileSpec.h" 1398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Tice#include "lldb/API/SBStream.h" 145f54ac373b119a4c6693e4875c48aa761fba0c86Greg Clayton#include "lldb/Host/FileSpec.h" 157826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice#include "lldb/Core/Log.h" 1696154be69fa240a662419183ed08e1cfc5418164Greg Clayton#include "lldb/Core/Stream.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec () : 24f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton m_opaque_ap(new lldb_private::FileSpec()) 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 29f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton m_opaque_ap(new lldb_private::FileSpec(*rhs.m_opaque_ap)) 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 31f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton} 327826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 33f9215bae3f7f76ad98bace0097821a12415690c5Greg ClaytonSBFileSpec::SBFileSpec (const lldb_private::FileSpec& fspec) : 34f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton m_opaque_ap(new lldb_private::FileSpec(fspec)) 35f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton{ 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton// Deprected!!! 3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec (const char *path) : 40537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton m_opaque_ap(new FileSpec (path, true)) 41537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton{ 42537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton} 43537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton 44537a7a86687683fd403ce652d178fbc89e06ef9fGreg ClaytonSBFileSpec::SBFileSpec (const char *path, bool resolve) : 45537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton m_opaque_ap(new FileSpec (path, resolve)) 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::~SBFileSpec () 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBFileSpec & 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator = (const SBFileSpec &rhs) 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 57f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton *m_opaque_ap = *rhs.m_opaque_ap; 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::IsValid() const 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 64f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return *m_opaque_ap; 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::Exists () const 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 70952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 717826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 72f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton bool result = m_opaque_ap->Exists(); 737826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 747826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 753f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton log->Printf ("SBFileSpec(%p)::Exists () => %s", m_opaque_ap.get(), (result ? "true" : "false")); 767826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 777826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return result; 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 80eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Ticebool 81eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline TiceSBFileSpec::ResolveExecutableLocation () 82eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice{ 83f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton return m_opaque_ap->ResolveExecutableLocation (); 84eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice} 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 934ead2e9a5a74f465d00b0301c165fbebf4ee4ff3Johnny ChenSBFileSpec::GetFilename() const 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 95f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton const char *s = m_opaque_ap->GetFilename().AsCString(); 967826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 97952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 987826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 9949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 10049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (s) 10149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s); 10249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton else 10349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get()); 10449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 1057826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 106a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return s; 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::GetDirectory() const 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 112f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton const char *s = m_opaque_ap->GetDirectory().AsCString(); 113952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 114a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 11549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 11649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (s) 11749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s); 11849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton else 11949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", m_opaque_ap.get()); 12049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 121a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return s; 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::GetPath (char *dst_path, size_t dst_len) const 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 127952e9dc874944fcdbbb224f3ec4fc2c859376f64Greg Clayton Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1287826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 129f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton uint32_t result = m_opaque_ap->GetPath (dst_path, dst_len); 1307826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 1317826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 1325f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%" PRIu64 ") => %u", 133851e30ec6a1b1d2c154bb7d69ed0d05b5fd14705Greg Clayton m_opaque_ap.get(), result, dst_path, (uint64_t)dst_len, result); 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (result == 0 && dst_path && dst_len > 0) 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *dst_path = '\0'; 13749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton return result; 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec * 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator->() const 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 14463094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ap.get(); 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec * 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::get() const 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15063094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ap.get(); 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec & 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator*() const 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 15763094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_ap.get(); 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec & 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::ref() const 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16363094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_ap.get(); 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 170f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton *m_opaque_ap = fs; 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17398f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 1747826c8894803dc729f29789ebc038956a94d3e7aCaroline TiceSBFileSpec::GetDescription (SBStream &description) const 1757826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice{ 17696154be69fa240a662419183ed08e1cfc5418164Greg Clayton Stream &strm = description.ref(); 177f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton char path[PATH_MAX]; 178f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton if (m_opaque_ap->GetPath(path, sizeof(path))) 179f9215bae3f7f76ad98bace0097821a12415690c5Greg Clayton strm.PutCString (path); 1807826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return true; 1817826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice} 182