SBFileSpec.cpp revision 7826c8894803dc729f29789ebc038956a94d3e7a
130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng//===-- SBFileSpec.cpp ------------------------------------------*- C++ -*-===// 230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// 330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// The LLVM Compiler Infrastructure 430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// 530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// This file is distributed under the University of Illinois Open Source 630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// License. See LICENSE.TXT for details. 730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng// 830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng//===----------------------------------------------------------------------===// 930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "lldb/API/SBFileSpec.h" 1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "lldb/API/SBStream.h" 1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "lldb/Core/FileSpec.h" 1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include "lldb/Core/Log.h" 1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1530692c65c4174412c90e79489e98ab85c1a7412fBen Chengusing namespace lldb; 1630692c65c4174412c90e79489e98ab85c1a7412fBen Chengusing namespace lldb_private; 1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 1930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2030692c65c4174412c90e79489e98ab85c1a7412fBen ChengSBFileSpec::SBFileSpec () : 2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng m_opaque_ap() 2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng{ 2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if (log) 2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng log->Printf ("SBFileSpec::SBFileSpec () ==> this = %p", this); 2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng} 2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 2930692c65c4174412c90e79489e98ab85c1a7412fBen ChengSBFileSpec::SBFileSpec (const SBFileSpec &rhs) : 30e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl m_opaque_ap() 31e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl{ 3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng 3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng if (log) 35 { 36 SBStream sstr; 37 rhs.GetDescription (sstr); 38 log->Printf ("SBFileSpec::SBFileSpec (const SBFileSpec &rhs) rhs.m_opaque_ap.get() = %p (%s) ==> this = %p", 39 rhs.m_opaque_ap.get(), sstr.GetData(), this); 40 } 41 42 if (rhs.m_opaque_ap.get()) 43 m_opaque_ap.reset (new FileSpec (rhs.get())); 44} 45 46// Deprected!!! 47SBFileSpec::SBFileSpec (const char *path) : 48 m_opaque_ap(new FileSpec (path, true)) 49{ 50} 51 52SBFileSpec::SBFileSpec (const char *path, bool resolve) : 53 m_opaque_ap(new FileSpec (path, resolve)) 54{ 55 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API | LIBLLDB_LOG_VERBOSE); 56 57 if (log) 58 log->Printf ("SBFileSpec::SBFileSpec (const char *path, bool resolve) path = '%s', resolve = %s ==> " 59 "this = %p (m_opaque_ap.get() = %p)", path, (resolve ? "true" : "false"), this, 60 m_opaque_ap.get()); 61} 62 63SBFileSpec::~SBFileSpec () 64{ 65} 66 67const SBFileSpec & 68SBFileSpec::operator = (const SBFileSpec &rhs) 69{ 70 if (this != &rhs) 71 { 72 if (rhs.IsValid()) 73 m_opaque_ap.reset (new lldb_private::FileSpec(*rhs.m_opaque_ap.get())); 74 } 75 return *this; 76} 77 78bool 79SBFileSpec::IsValid() const 80{ 81 return m_opaque_ap.get() != NULL; 82} 83 84bool 85SBFileSpec::Exists () const 86{ 87 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 88 89 if (log) 90 log->Printf ("SBFileSpec::Exists ()"); 91 92 bool result = false; 93 if (m_opaque_ap.get()) 94 result = m_opaque_ap->Exists(); 95 96 if (log) 97 log->Printf ("SBFileSpec::Exists ==> %s", (result ? "true" : "false")); 98 99 return result; 100} 101 102bool 103SBFileSpec::ResolveExecutableLocation () 104{ 105 if (m_opaque_ap.get()) 106 return m_opaque_ap->ResolveExecutableLocation (); 107 return false; 108} 109 110int 111SBFileSpec::ResolvePath (const char *src_path, char *dst_path, size_t dst_len) 112{ 113 return lldb_private::FileSpec::Resolve (src_path, dst_path, dst_len); 114} 115 116const char * 117SBFileSpec::GetFilename() const 118{ 119 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 120 121 if (log) 122 log->Printf ("SBFileSpec::GetFilename ()"); 123 124 if (m_opaque_ap.get()) 125 { 126 if (log) 127 log->Printf ("SBFileSpec::GetFilename ==> %s", m_opaque_ap->GetFilename().AsCString()); 128 return m_opaque_ap->GetFilename().AsCString(); 129 } 130 131 if (log) 132 log->Printf ("SBFileSpec::GetFilename ==> NULL"); 133 134 return NULL; 135} 136 137const char * 138SBFileSpec::GetDirectory() const 139{ 140 if (m_opaque_ap.get()) 141 return m_opaque_ap->GetDirectory().AsCString(); 142 return NULL; 143} 144 145uint32_t 146SBFileSpec::GetPath (char *dst_path, size_t dst_len) const 147{ 148 Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API); 149 150 if (log) 151 log->Printf ("SBFileSpec::GetPath (dst_path, dst_len)"); 152 153 uint32_t result; 154 if (m_opaque_ap.get()) 155 { 156 result = m_opaque_ap->GetPath (dst_path, dst_len); 157 if (log) 158 log->Printf ("SBFileSpec::GetPath ==> %s (%d)", dst_path, result); 159 return result; 160 } 161 162 if (log) 163 log->Printf ("SBFileSpec::GetPath ==> NULL (0)"); 164 165 if (dst_path && dst_len) 166 *dst_path = '\0'; 167 return 0; 168} 169 170 171const lldb_private::FileSpec * 172SBFileSpec::operator->() const 173{ 174 return m_opaque_ap.get(); 175} 176 177const lldb_private::FileSpec * 178SBFileSpec::get() const 179{ 180 return m_opaque_ap.get(); 181} 182 183 184const lldb_private::FileSpec & 185SBFileSpec::operator*() const 186{ 187 return *m_opaque_ap.get(); 188} 189 190const lldb_private::FileSpec & 191SBFileSpec::ref() const 192{ 193 return *m_opaque_ap.get(); 194} 195 196 197void 198SBFileSpec::SetFileSpec (const lldb_private::FileSpec& fs) 199{ 200 if (m_opaque_ap.get()) 201 *m_opaque_ap = fs; 202 else 203 m_opaque_ap.reset (new FileSpec (fs)); 204} 205 206bool 207SBFileSpec::GetDescription (SBStream &description) 208{ 209 if (m_opaque_ap.get()) 210 { 211 const char *filename = GetFilename(); 212 const char *dir_name = GetDirectory(); 213 if (!filename && !dir_name) 214 description.Printf ("No value"); 215 else if (!dir_name) 216 description.Printf ("%s", filename); 217 else 218 description.Printf ("%s/%s", dir_name, filename); 219 } 220 else 221 description.Printf ("No value"); 222 223 return true; 224} 225 226bool 227SBFileSpec::GetDescription (SBStream &description) const 228{ 229 if (m_opaque_ap.get()) 230 { 231 const char *filename = GetFilename(); 232 const char *dir_name = GetDirectory(); 233 if (!filename && !dir_name) 234 description.Printf ("No value"); 235 else if (!dir_name) 236 description.Printf ("%s", filename); 237 else 238 description.Printf ("%s/%s", dir_name, filename); 239 } 240 else 241 description.Printf ("No value"); 242 243 return true; 244} 245