blob: 274ae0d447730d11a3357223fc7bc194f11281dc [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- 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
22class DNBError
23{
24public:
25 typedef uint32_t ValueType;
26 typedef enum
27 {
28 Generic = 0,
Jason Molendaa3329782014-03-29 18:54:20 +000029 MachKernel = 1,
30 POSIX = 2
Jason Molenda42999a42012-02-22 02:18:59 +000031#ifdef WITH_SPRINGBOARD
Jason Molendaa3329782014-03-29 18:54:20 +000032 , SpringBoard = 3
33#endif
34#ifdef WITH_BKS
35 , BackBoard = 4
Chris Lattner30fdc8d2010-06-08 16:52:24 +000036#endif
Jason Molendac611a742015-10-23 02:49:51 +000037#ifdef WITH_FBS
38 , FrontBoard = 5
39#endif
Chris Lattner30fdc8d2010-06-08 16:52:24 +000040 } FlavorType;
41
42 explicit DNBError( ValueType err = 0,
43 FlavorType flavor = Generic) :
44 m_err(err),
45 m_flavor(flavor)
46 {
47 }
48
49 const char * AsString() const;
50 void Clear() { m_err = 0; m_flavor = Generic; m_str.clear(); }
51 ValueType Error() const { return m_err; }
52 FlavorType Flavor() const { return m_flavor; }
53
54 ValueType operator = (kern_return_t err)
55 {
56 m_err = err;
57 m_flavor = MachKernel;
58 m_str.clear();
59 return m_err;
60 }
61
62 void SetError(kern_return_t err)
63 {
64 m_err = err;
65 m_flavor = MachKernel;
66 m_str.clear();
67 }
68
69 void SetErrorToErrno()
70 {
71 m_err = errno;
72 m_flavor = POSIX;
73 m_str.clear();
74 }
75
76 void SetError(ValueType err, FlavorType flavor)
77 {
78 m_err = err;
79 m_flavor = flavor;
80 m_str.clear();
81 }
82
83 // Generic errors can set their own string values
84 void SetErrorString(const char *err_str)
85 {
86 if (err_str && err_str[0])
87 m_str = err_str;
88 else
89 m_str.clear();
90 }
91 bool Success() const { return m_err == 0; }
92 bool Fail() const { return m_err != 0; }
93 void LogThreadedIfError(const char *format, ...) const;
94 void LogThreaded(const char *format, ...) const;
95protected:
96 ValueType m_err;
97 FlavorType m_flavor;
98 mutable std::string m_str;
99};
100
101
102#endif // #ifndef __DNBError_h__