130fdc8d8SChris Lattner //===-- SBError.cpp ---------------------------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 1030fdc8d8SChris Lattner #include "lldb/API/SBError.h" 1130fdc8d8SChris Lattner #include "lldb/Core/Error.h" 129c68da97SEli Friedman #include <stdarg.h> 1330fdc8d8SChris Lattner 1430fdc8d8SChris Lattner using namespace lldb; 1530fdc8d8SChris Lattner using namespace lldb_private; 1630fdc8d8SChris Lattner 1730fdc8d8SChris Lattner 1830fdc8d8SChris Lattner SBError::SBError () : 19*6611103cSGreg Clayton m_opaque_ap () 2030fdc8d8SChris Lattner { 2130fdc8d8SChris Lattner } 2230fdc8d8SChris Lattner 2330fdc8d8SChris Lattner SBError::SBError (const SBError &rhs) : 24*6611103cSGreg Clayton m_opaque_ap () 2530fdc8d8SChris Lattner { 2630fdc8d8SChris Lattner if (rhs.IsValid()) 27*6611103cSGreg Clayton m_opaque_ap.reset (new Error(*rhs)); 2830fdc8d8SChris Lattner } 2930fdc8d8SChris Lattner 3030fdc8d8SChris Lattner 3130fdc8d8SChris Lattner SBError::~SBError() 3230fdc8d8SChris Lattner { 3330fdc8d8SChris Lattner } 3430fdc8d8SChris Lattner 3530fdc8d8SChris Lattner const SBError & 3630fdc8d8SChris Lattner SBError::operator = (const SBError &rhs) 3730fdc8d8SChris Lattner { 3830fdc8d8SChris Lattner if (rhs.IsValid()) 3930fdc8d8SChris Lattner { 40*6611103cSGreg Clayton if (m_opaque_ap.get()) 41*6611103cSGreg Clayton *m_opaque_ap = *rhs; 4230fdc8d8SChris Lattner else 43*6611103cSGreg Clayton m_opaque_ap.reset (new Error(*rhs)); 4430fdc8d8SChris Lattner } 4530fdc8d8SChris Lattner else 4630fdc8d8SChris Lattner { 47*6611103cSGreg Clayton m_opaque_ap.reset(); 4830fdc8d8SChris Lattner } 4930fdc8d8SChris Lattner return *this; 5030fdc8d8SChris Lattner } 5130fdc8d8SChris Lattner 5230fdc8d8SChris Lattner 5330fdc8d8SChris Lattner const char * 5430fdc8d8SChris Lattner SBError::GetCString () const 5530fdc8d8SChris Lattner { 56*6611103cSGreg Clayton if (m_opaque_ap.get()) 57*6611103cSGreg Clayton return m_opaque_ap->AsCString(); 5830fdc8d8SChris Lattner return NULL; 5930fdc8d8SChris Lattner } 6030fdc8d8SChris Lattner 6130fdc8d8SChris Lattner void 6230fdc8d8SChris Lattner SBError::Clear () 6330fdc8d8SChris Lattner { 64*6611103cSGreg Clayton if (m_opaque_ap.get()) 65*6611103cSGreg Clayton m_opaque_ap->Clear(); 6630fdc8d8SChris Lattner } 6730fdc8d8SChris Lattner 6830fdc8d8SChris Lattner bool 6930fdc8d8SChris Lattner SBError::Fail () const 7030fdc8d8SChris Lattner { 71*6611103cSGreg Clayton if (m_opaque_ap.get()) 72*6611103cSGreg Clayton return m_opaque_ap->Fail(); 7330fdc8d8SChris Lattner return false; 7430fdc8d8SChris Lattner } 7530fdc8d8SChris Lattner 7630fdc8d8SChris Lattner bool 7730fdc8d8SChris Lattner SBError::Success () const 7830fdc8d8SChris Lattner { 79*6611103cSGreg Clayton if (m_opaque_ap.get()) 80*6611103cSGreg Clayton return m_opaque_ap->Success(); 8130fdc8d8SChris Lattner return false; 8230fdc8d8SChris Lattner } 8330fdc8d8SChris Lattner 8430fdc8d8SChris Lattner uint32_t 8530fdc8d8SChris Lattner SBError::GetError () const 8630fdc8d8SChris Lattner { 87*6611103cSGreg Clayton if (m_opaque_ap.get()) 88*6611103cSGreg Clayton return m_opaque_ap->GetError(); 8930fdc8d8SChris Lattner return true; 9030fdc8d8SChris Lattner } 9130fdc8d8SChris Lattner 9230fdc8d8SChris Lattner ErrorType 9330fdc8d8SChris Lattner SBError::GetType () const 9430fdc8d8SChris Lattner { 95*6611103cSGreg Clayton if (m_opaque_ap.get()) 96*6611103cSGreg Clayton return m_opaque_ap->GetType(); 9730fdc8d8SChris Lattner return eErrorTypeInvalid; 9830fdc8d8SChris Lattner } 9930fdc8d8SChris Lattner 10030fdc8d8SChris Lattner void 10130fdc8d8SChris Lattner SBError::SetError (uint32_t err, ErrorType type) 10230fdc8d8SChris Lattner { 10330fdc8d8SChris Lattner CreateIfNeeded (); 104*6611103cSGreg Clayton m_opaque_ap->SetError (err, type); 10530fdc8d8SChris Lattner } 10630fdc8d8SChris Lattner 10730fdc8d8SChris Lattner void 10830fdc8d8SChris Lattner SBError::SetError (const Error &lldb_error) 10930fdc8d8SChris Lattner { 11030fdc8d8SChris Lattner CreateIfNeeded (); 111*6611103cSGreg Clayton *m_opaque_ap = lldb_error; 11230fdc8d8SChris Lattner } 11330fdc8d8SChris Lattner 11430fdc8d8SChris Lattner 11530fdc8d8SChris Lattner void 11630fdc8d8SChris Lattner SBError::SetErrorToErrno () 11730fdc8d8SChris Lattner { 11830fdc8d8SChris Lattner CreateIfNeeded (); 119*6611103cSGreg Clayton m_opaque_ap->SetErrorToErrno (); 12030fdc8d8SChris Lattner } 12130fdc8d8SChris Lattner 12230fdc8d8SChris Lattner void 12330fdc8d8SChris Lattner SBError::SetErrorToGenericError () 12430fdc8d8SChris Lattner { 12530fdc8d8SChris Lattner CreateIfNeeded (); 126*6611103cSGreg Clayton m_opaque_ap->SetErrorToErrno (); 12730fdc8d8SChris Lattner } 12830fdc8d8SChris Lattner 12930fdc8d8SChris Lattner void 13030fdc8d8SChris Lattner SBError::SetErrorString (const char *err_str) 13130fdc8d8SChris Lattner { 13230fdc8d8SChris Lattner CreateIfNeeded (); 133*6611103cSGreg Clayton m_opaque_ap->SetErrorString (err_str); 13430fdc8d8SChris Lattner } 13530fdc8d8SChris Lattner 13630fdc8d8SChris Lattner int 13730fdc8d8SChris Lattner SBError::SetErrorStringWithFormat (const char *format, ...) 13830fdc8d8SChris Lattner { 13930fdc8d8SChris Lattner CreateIfNeeded (); 14030fdc8d8SChris Lattner va_list args; 14130fdc8d8SChris Lattner va_start (args, format); 142*6611103cSGreg Clayton int num_chars = m_opaque_ap->SetErrorStringWithVarArg (format, args); 14330fdc8d8SChris Lattner va_end (args); 14430fdc8d8SChris Lattner return num_chars; 14530fdc8d8SChris Lattner } 14630fdc8d8SChris Lattner 14730fdc8d8SChris Lattner bool 14830fdc8d8SChris Lattner SBError::IsValid () const 14930fdc8d8SChris Lattner { 150*6611103cSGreg Clayton return m_opaque_ap.get() != NULL; 15130fdc8d8SChris Lattner } 15230fdc8d8SChris Lattner 15330fdc8d8SChris Lattner void 15430fdc8d8SChris Lattner SBError::CreateIfNeeded () 15530fdc8d8SChris Lattner { 156*6611103cSGreg Clayton if (m_opaque_ap.get() == NULL) 157*6611103cSGreg Clayton m_opaque_ap.reset(new Error ()); 15830fdc8d8SChris Lattner } 15930fdc8d8SChris Lattner 16030fdc8d8SChris Lattner 16130fdc8d8SChris Lattner lldb_private::Error * 16230fdc8d8SChris Lattner SBError::operator->() 16330fdc8d8SChris Lattner { 164*6611103cSGreg Clayton return m_opaque_ap.get(); 16530fdc8d8SChris Lattner } 16630fdc8d8SChris Lattner 16730fdc8d8SChris Lattner lldb_private::Error * 16830fdc8d8SChris Lattner SBError::get() 16930fdc8d8SChris Lattner { 170*6611103cSGreg Clayton return m_opaque_ap.get(); 17130fdc8d8SChris Lattner } 17230fdc8d8SChris Lattner 17330fdc8d8SChris Lattner 17430fdc8d8SChris Lattner const lldb_private::Error & 17530fdc8d8SChris Lattner SBError::operator*() const 17630fdc8d8SChris Lattner { 17730fdc8d8SChris Lattner // Be sure to call "IsValid()" before calling this function or it will crash 178*6611103cSGreg Clayton return *m_opaque_ap; 17930fdc8d8SChris Lattner } 18030fdc8d8SChris Lattner 181