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