SBFileSpec.cpp revision e005f2ce03c489ebde9110678a29cbfe8488d5b4
1//===-- SBFileSpec.cpp ------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/API/SBFileSpec.h" 11#include "lldb/API/SBStream.h" 12#include "lldb/Core/FileSpec.h" 13#include "lldb/Core/Log.h" 14 15using namespace lldb; 16using namespace lldb_private; 17 18 19 20SBFileSpec::SBFileSpec () : 21 m_opaque_ap() 22{ 23} 24 25SBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 26 m_opaque_ap() 27{ 28 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 29 30 if (rhs.m_opaque_ap.get()) 31 m_opaque_ap.reset (new FileSpec (rhs.get())); 32 33 if (log) 34 { 35 SBStream sstr; 36 GetDescription (sstr); 37 log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec rhs.ap=%p) => SBFileSpec(%p): %s", 38 rhs.m_opaque_ap.get(), m_opaque_ap.get(), sstr.GetData()); 39 } 40} 41 42// Deprected!!! 43SBFileSpec::SBFileSpec (const char *path) : 44 m_opaque_ap(new FileSpec (path, true)) 45{ 46} 47 48SBFileSpec::SBFileSpec (const char *path, bool resolve) : 49 m_opaque_ap(new FileSpec (path, resolve)) 50{ 51 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 52 53 if (log) 54 log->Printf ("SBFileSpec::SBFileSpec (path=\"%s\", resolve=%i) => SBFileSpec(%p)", path, 55 resolve, m_opaque_ap.get()); 56} 57 58SBFileSpec::~SBFileSpec () 59{ 60} 61 62const SBFileSpec & 63SBFileSpec::operator = (const SBFileSpec &rhs) 64{ 65 if (this != &rhs) 66 { 67 if (rhs.IsValid()) 68 m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get())); 69 } 70 return *this; 71} 72 73bool 74SBFileSpec::IsValid() const 75{ 76 return m_opaque_ap.get() != NULL; 77} 78 79bool 80SBFileSpec::Exists () const 81{ 82 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 83 84 bool result = false; 85 if (m_opaque_ap.get()) 86 result = m_opaque_ap->Exists(); 87 88 if (log) 89 log->Printf ("SBFileSpec(%p)::Exists () => %s", m_opaque_ap.get(), (result ? "true" : "false")); 90 91 return result; 92} 93 94bool 95SBFileSpec::ResolveExecutableLocation () 96{ 97 if (m_opaque_ap.get()) 98 return m_opaque_ap->ResolveExecutableLocation (); 99 return false; 100} 101 102int 103SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 104{ 105 return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 106} 107 108const char * 109SBFileSpec::GetFilename() const 110{ 111 const char *s = NULL; 112 if (m_opaque_ap.get()) 113 s = m_opaque_ap->GetFilename().AsCString(); 114 115 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 116 if (log) 117 { 118 if (s) 119 log->Printf ("SBFileSpec(%p)::GetFilename () => \"%s\"", m_opaque_ap.get(), s); 120 else 121 log->Printf ("SBFileSpec(%p)::GetFilename () => NULL", m_opaque_ap.get()); 122 } 123 124 return s; 125} 126 127const char * 128SBFileSpec::GetDirectory() const 129{ 130 const char *s = NULL; 131 if (m_opaque_ap.get()) 132 s = m_opaque_ap->GetDirectory().AsCString(); 133 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 134 if (log) 135 { 136 if (s) 137 log->Printf ("SBFileSpec(%p)::GetDirectory () => \"%s\"", m_opaque_ap.get(), s); 138 else 139 log->Printf ("SBFileSpec(%p)::GetDirectory () => NULL", m_opaque_ap.get()); 140 } 141 return s; 142} 143 144uint32_t 145SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 146{ 147 LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); 148 149 uint32_t result = 0; 150 if (m_opaque_ap.get()) 151 result = m_opaque_ap->GetPath (dst_path, dst_len); 152 153 if (log) 154 log->Printf ("SBFileSpec(%p)::GetPath (dst_path=\"%.*s\", dst_len=%zu) => %u", 155 m_opaque_ap.get(), result, dst_path, dst_len, result); 156 157 if (result == 0 && dst_path && dst_len > 0) 158 *dst_path = '\0'; 159 return result; 160} 161 162 163const lldb_private::FileSpec * 164SBFileSpec::operator->() const 165{ 166 return m_opaque_ap.get(); 167} 168 169const lldb_private::FileSpec * 170SBFileSpec::get() const 171{ 172 return m_opaque_ap.get(); 173} 174 175 176const lldb_private::FileSpec & 177SBFileSpec::operator*() const 178{ 179 return *m_opaque_ap.get(); 180} 181 182const lldb_private::FileSpec & 183SBFileSpec::ref() const 184{ 185 return *m_opaque_ap.get(); 186} 187 188 189void 190SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 191{ 192 if (m_opaque_ap.get()) 193 *m_opaque_ap = fs; 194 else 195 m_opaque_ap.reset (new FileSpec (fs)); 196} 197 198bool 199SBFileSpec::GetDescription (SBStream &description) const 200{ 201 if (m_opaque_ap.get()) 202 { 203 char path[PATH_MAX]; 204 if (m_opaque_ap->GetPath(path, sizeof(path))) 205 description.Printf ("%s", path); 206 } 207 else 208 description.Printf ("No value"); 209 210 return true; 211} 212