2010-06-09 00:52:24 +08:00
|
|
|
//===-- DNBError.h ----------------------------------------------*- C++ -*-===//
|
|
|
|
//
|
2019-01-19 16:50:56 +08:00
|
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
2010-06-09 00:52:24 +08:00
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// 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>
|
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
class DNBError {
|
2010-06-09 00:52:24 +08:00
|
|
|
public:
|
2016-09-07 04:57:50 +08:00
|
|
|
typedef uint32_t ValueType;
|
|
|
|
typedef enum {
|
|
|
|
Generic = 0,
|
|
|
|
MachKernel = 1,
|
|
|
|
POSIX = 2
|
2012-02-22 10:18:59 +08:00
|
|
|
#ifdef WITH_SPRINGBOARD
|
2016-09-07 04:57:50 +08:00
|
|
|
,
|
|
|
|
SpringBoard = 3
|
2014-03-30 02:54:20 +08:00
|
|
|
#endif
|
|
|
|
#ifdef WITH_BKS
|
2016-09-07 04:57:50 +08:00
|
|
|
,
|
|
|
|
BackBoard = 4
|
2015-10-23 10:49:51 +08:00
|
|
|
#endif
|
|
|
|
#ifdef WITH_FBS
|
2016-09-07 04:57:50 +08:00
|
|
|
,
|
|
|
|
FrontBoard = 5
|
2010-06-09 00:52:24 +08:00
|
|
|
#endif
|
2016-09-07 04:57:50 +08:00
|
|
|
} FlavorType;
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
explicit DNBError(ValueType err = 0, FlavorType flavor = Generic)
|
|
|
|
: m_err(err), m_flavor(flavor) {}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
const char *AsString() const;
|
|
|
|
void Clear() {
|
|
|
|
m_err = 0;
|
|
|
|
m_flavor = Generic;
|
|
|
|
m_str.clear();
|
|
|
|
}
|
2017-05-12 12:51:55 +08:00
|
|
|
ValueType Status() const { return m_err; }
|
2016-09-07 04:57:50 +08:00
|
|
|
FlavorType Flavor() const { return m_flavor; }
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
ValueType operator=(kern_return_t err) {
|
|
|
|
m_err = err;
|
|
|
|
m_flavor = MachKernel;
|
|
|
|
m_str.clear();
|
|
|
|
return m_err;
|
|
|
|
}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
void SetError(kern_return_t err) {
|
|
|
|
m_err = err;
|
|
|
|
m_flavor = MachKernel;
|
|
|
|
m_str.clear();
|
|
|
|
}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
void SetErrorToErrno() {
|
|
|
|
m_err = errno;
|
|
|
|
m_flavor = POSIX;
|
|
|
|
m_str.clear();
|
|
|
|
}
|
2010-06-09 00:52:24 +08:00
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
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;
|
2010-06-09 00:52:24 +08:00
|
|
|
|
|
|
|
protected:
|
2016-09-07 04:57:50 +08:00
|
|
|
ValueType m_err;
|
|
|
|
FlavorType m_flavor;
|
|
|
|
mutable std::string m_str;
|
2010-06-09 00:52:24 +08:00
|
|
|
};
|
|
|
|
|
2016-09-07 04:57:50 +08:00
|
|
|
#endif // #ifndef __DNBError_h__
|