| //===-- DNBError.h ----------------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Created by Greg Clayton on 6/26/07. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef __DNBError_h__ |
| #define __DNBError_h__ |
| |
| #include <errno.h> |
| #include <mach/mach.h> |
| #include <stdio.h> |
| #include <string> |
| |
| class DNBError { |
| public: |
| typedef uint32_t ValueType; |
| typedef enum { |
| Generic = 0, |
| MachKernel = 1, |
| POSIX = 2 |
| #ifdef WITH_SPRINGBOARD |
| , |
| SpringBoard = 3 |
| #endif |
| #ifdef WITH_BKS |
| , |
| BackBoard = 4 |
| #endif |
| #ifdef WITH_FBS |
| , |
| FrontBoard = 5 |
| #endif |
| } FlavorType; |
| |
| explicit DNBError(ValueType err = 0, FlavorType flavor = Generic) |
| : m_err(err), m_flavor(flavor) {} |
| |
| const char *AsString() const; |
| void Clear() { |
| m_err = 0; |
| m_flavor = Generic; |
| m_str.clear(); |
| } |
| ValueType Status() const { return m_err; } |
| FlavorType Flavor() const { return m_flavor; } |
| |
| ValueType operator=(kern_return_t err) { |
| m_err = err; |
| m_flavor = MachKernel; |
| m_str.clear(); |
| return m_err; |
| } |
| |
| void SetError(kern_return_t err) { |
| m_err = err; |
| m_flavor = MachKernel; |
| m_str.clear(); |
| } |
| |
| void SetErrorToErrno() { |
| m_err = errno; |
| m_flavor = POSIX; |
| m_str.clear(); |
| } |
| |
| void SetError(ValueType err, FlavorType flavor) { |
| m_err = err; |
| m_flavor = flavor; |
| m_str.clear(); |
| } |
| |
| // Generic errors can set their own string values |
| void SetErrorString(const char *err_str) { |
| if (err_str && err_str[0]) |
| m_str = err_str; |
| else |
| m_str.clear(); |
| } |
| bool Success() const { return m_err == 0; } |
| bool Fail() const { return m_err != 0; } |
| void LogThreadedIfError(const char *format, ...) const; |
| void LogThreaded(const char *format, ...) const; |
| |
| protected: |
| ValueType m_err; |
| FlavorType m_flavor; |
| mutable std::string m_str; |
| }; |
| |
| #endif // #ifndef __DNBError_h__ |