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__  | 
