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