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