diff options
Diffstat (limited to 'tools/debugserver/source/DNBError.h')
-rw-r--r-- | tools/debugserver/source/DNBError.h | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/tools/debugserver/source/DNBError.h b/tools/debugserver/source/DNBError.h new file mode 100644 index 000000000000..274ae0d44773 --- /dev/null +++ b/tools/debugserver/source/DNBError.h @@ -0,0 +1,102 @@ +//===-- 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 Error() 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__ |