SBFileSpec.cpp revision ec2d9787bed36e9eda6eac1996c7bed76c8d3da4
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" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb; 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerusing namespace lldb_private; 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec () : 2363094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ap() 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 2863094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ap() 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 30e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 3161ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice 3261ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice if (rhs.m_opaque_ap.get()) 3361ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice m_opaque_ap.reset (new FileSpec (rhs.get())); 347826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 357826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 367826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 377826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice SBStream sstr; 3861ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice GetDescription (sstr); 3949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec rhs.ap=%p) => SBFileSpec(%p): %s", 4061ba7ec20f616f907473dd501341cef5b47fa3f8Caroline Tice rhs.m_opaque_ap.get(), m_opaque_ap.get(), sstr.GetData()); 417826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton// Deprected!!! 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SBFileSpec (const char *path) : 46537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton m_opaque_ap(new FileSpec (path, true)) 47537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton{ 48537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton} 49537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton 50537a7a86687683fd403ce652d178fbc89e06ef9fGreg ClaytonSBFileSpec::SBFileSpec (const char *path, bool resolve) : 51537a7a86687683fd403ce652d178fbc89e06ef9fGreg Clayton m_opaque_ap(new FileSpec (path, resolve)) 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 53e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 547826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 557826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 5649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec::SBFileSpec (path=\"%s\", resolve=%i) => SBFileSpec(%p)", path, 573f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton resolve, m_opaque_ap.get()); 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::~SBFileSpec () 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst SBFileSpec & 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator = (const SBFileSpec &rhs) 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (rhs.IsValid()) 7063094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get())); 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::IsValid() const 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 7863094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ap.get() != NULL; 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::Exists () const 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 84e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 857826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 867826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice bool result = false; 8763094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 887826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice result = m_opaque_ap->Exists(); 897826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 907826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 913f5ee7fd6991891f0892bd71537763d9b59acd12Greg Clayton log->Printf ("SBFileSpec(%p)::Exists () => %s", m_opaque_ap.get(), (result ? "true" : "false")); 927826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 937826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return result; 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 96eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Ticebool 97eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline TiceSBFileSpec::ResolveExecutableLocation () 98eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice{ 99eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice if (m_opaque_ap.get()) 100eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice return m_opaque_ap->ResolveExecutableLocation (); 101eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice return false; 102eddffe93d2c9ebb575e7b03fe1c5e71f9ecaf9f1Caroline Tice} 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 1114ead2e9a5a74f465d00b0301c165fbebf4ee4ff3Johnny ChenSBFileSpec::GetFilename() const 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 113a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton const char *s = NULL; 11463094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 115a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton s = m_opaque_ap->GetFilename().AsCString(); 1167826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 117e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1187826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 11949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 12049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (s) 12149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s); 12249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton else 12349ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get()); 12449ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 1257826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 126a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return s; 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst char * 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::GetDirectory() const 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 132a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton const char *s = NULL; 13363094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 134a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton s = m_opaque_ap->GetDirectory().AsCString(); 135e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 136a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton if (log) 13749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton { 13849ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (s) 13949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s); 14049ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton else 14149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", m_opaque_ap.get()); 14249ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton } 143a66ba46379fe41036d870975c56ccc2319cb6618Greg Clayton return s; 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::GetPath (char *dst_path, size_t dst_len) const 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 149e005f2ce03c489ebde9110678a29cbfe8488d5b4Greg Clayton LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 1507826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 15149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton uint32_t result = 0; 15263094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 1537826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice result = m_opaque_ap->GetPath (dst_path, dst_len); 1547826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 1557826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (log) 15649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%zu) => %u", 15749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton m_opaque_ap.get(), result, dst_path, dst_len, result); 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15949ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (result == 0 && dst_path && dst_len > 0) 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *dst_path = '\0'; 16149ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton return result; 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec * 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator->() const 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 16863094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ap.get(); 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec * 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::get() const 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 17463094e0bb161580564954dee512955c1c79d3476Greg Clayton return m_opaque_ap.get(); 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec & 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::operator*() const 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 18163094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_ap.get(); 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerconst lldb_private::FileSpec & 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::ref() const 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 18763094e0bb161580564954dee512955c1c79d3476Greg Clayton return *m_opaque_ap.get(); 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris LattnerSBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 19463094e0bb161580564954dee512955c1c79d3476Greg Clayton if (m_opaque_ap.get()) 19563094e0bb161580564954dee512955c1c79d3476Greg Clayton *m_opaque_ap = fs; 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 19763094e0bb161580564954dee512955c1c79d3476Greg Clayton m_opaque_ap.reset (new FileSpec (fs)); 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20098f930f429160f9777f626c3ac6aa609f4e965d2Caroline Ticebool 2017826c8894803dc729f29789ebc038956a94d3e7aCaroline TiceSBFileSpec::GetDescription (SBStream &description) const 2027826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice{ 2037826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice if (m_opaque_ap.get()) 2047826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice { 20549ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton char path[PATH_MAX]; 20649ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton if (m_opaque_ap->GetPath(path, sizeof(path))) 20749ce682dfa7993d31206cea19ce7006cd3f3077eGreg Clayton description.Printf ("%s", path); 2087826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice } 2097826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice else 2107826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice description.Printf ("No value"); 2117826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice 2127826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice return true; 2137826c8894803dc729f29789ebc038956a94d3e7aCaroline Tice} 214