1 //===-- DNBError.h ----------------------------------------------*- 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 // Created by Greg Clayton on 6/26/07. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef __DNBError_h__ 15 #define __DNBError_h__ 16 17 #include <errno.h> 18 #include <mach/mach.h> 19 #include <stdio.h> 20 #include <string> 21 22 class DNBError 23 { 24 public: 25 typedef uint32_t ValueType; 26 typedef enum 27 { 28 Generic = 0, 29 MachKernel, 30 POSIX 31 #ifdef WITH_SPRINGBOARD 32 , SpringBoard 33 #endif 34 } FlavorType; 35 36 explicit DNBError( ValueType err = 0, 37 FlavorType flavor = Generic) : m_err(err)38 m_err(err), 39 m_flavor(flavor) 40 { 41 } 42 43 const char * AsString() const; Clear()44 void Clear() { m_err = 0; m_flavor = Generic; m_str.clear(); } Error()45 ValueType Error() const { return m_err; } Flavor()46 FlavorType Flavor() const { return m_flavor; } 47 48 ValueType operator = (kern_return_t err) 49 { 50 m_err = err; 51 m_flavor = MachKernel; 52 m_str.clear(); 53 return m_err; 54 } 55 SetError(kern_return_t err)56 void SetError(kern_return_t err) 57 { 58 m_err = err; 59 m_flavor = MachKernel; 60 m_str.clear(); 61 } 62 SetErrorToErrno()63 void SetErrorToErrno() 64 { 65 m_err = errno; 66 m_flavor = POSIX; 67 m_str.clear(); 68 } 69 SetError(ValueType err,FlavorType flavor)70 void SetError(ValueType err, FlavorType flavor) 71 { 72 m_err = err; 73 m_flavor = flavor; 74 m_str.clear(); 75 } 76 77 // Generic errors can set their own string values SetErrorString(const char * err_str)78 void SetErrorString(const char *err_str) 79 { 80 if (err_str && err_str[0]) 81 m_str = err_str; 82 else 83 m_str.clear(); 84 } Success()85 bool Success() const { return m_err == 0; } Fail()86 bool Fail() const { return m_err != 0; } 87 void LogThreadedIfError(const char *format, ...) const; 88 void LogThreaded(const char *format, ...) const; 89 protected: 90 ValueType m_err; 91 FlavorType m_flavor; 92 mutable std::string m_str; 93 }; 94 95 96 #endif // #ifndef __DNBError_h__ 97