summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/tools/debugserver/source/DNBError.cpp
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/tools/debugserver/source/DNBError.cpp
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz
wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/tools/debugserver/source/DNBError.cpp')
-rw-r--r--gnu/llvm/lldb/tools/debugserver/source/DNBError.cpp115
1 files changed, 115 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/tools/debugserver/source/DNBError.cpp b/gnu/llvm/lldb/tools/debugserver/source/DNBError.cpp
new file mode 100644
index 00000000000..00933bce1a7
--- /dev/null
+++ b/gnu/llvm/lldb/tools/debugserver/source/DNBError.cpp
@@ -0,0 +1,115 @@
+//===-- DNBError.cpp --------------------------------------------*- C++ -*-===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+//
+// Created by Greg Clayton on 6/26/07.
+//
+//===----------------------------------------------------------------------===//
+
+#include "DNBError.h"
+#include "CFString.h"
+#include "DNBLog.h"
+#include "PThreadMutex.h"
+
+#ifdef WITH_SPRINGBOARD
+#include <SpringBoardServices/SpringBoardServer.h>
+#endif
+
+const char *DNBError::AsString() const {
+ if (Success())
+ return NULL;
+
+ if (m_str.empty()) {
+ const char *s = NULL;
+ switch (m_flavor) {
+ case MachKernel:
+ s = ::mach_error_string(m_err);
+ break;
+
+ case POSIX:
+ s = ::strerror(m_err);
+ break;
+
+#ifdef WITH_SPRINGBOARD
+ case SpringBoard: {
+ CFStringRef statusStr = SBSApplicationLaunchingErrorString(m_err);
+ if (CFString::UTF8(statusStr, m_str) == NULL)
+ m_str.clear();
+ } break;
+#endif
+#ifdef WITH_BKS
+ case BackBoard: {
+ // You have to call ObjC routines to get the error string from
+ // BackBoardServices.
+ // Not sure I want to make DNBError.cpp an .mm file. For now just make
+ // sure you
+ // pre-populate the error string when you make the DNBError of type
+ // BackBoard.
+ m_str.assign(
+ "Should have set BackBoard error when making the error string.");
+ } break;
+#endif
+#ifdef WITH_FBS
+ case FrontBoard: {
+ // You have to call ObjC routines to get the error string from
+ // FrontBoardServices.
+ // Not sure I want to make DNBError.cpp an .mm file. For now just make
+ // sure you
+ // pre-populate the error string when you make the DNBError of type
+ // FrontBoard.
+ m_str.assign(
+ "Should have set FrontBoard error when making the error string.");
+ } break;
+#endif
+ default:
+ break;
+ }
+ if (s)
+ m_str.assign(s);
+ }
+ if (m_str.empty())
+ return NULL;
+ return m_str.c_str();
+}
+
+void DNBError::LogThreadedIfError(const char *format, ...) const {
+ if (Fail()) {
+ char *arg_msg = NULL;
+ va_list args;
+ va_start(args, format);
+ ::vasprintf(&arg_msg, format, args);
+ va_end(args);
+
+ if (arg_msg != NULL) {
+ const char *err_str = AsString();
+ if (err_str == NULL)
+ err_str = "???";
+ DNBLogThreaded("error: %s err = %s (0x%8.8x)", arg_msg, err_str, m_err);
+ free(arg_msg);
+ }
+ }
+}
+
+void DNBError::LogThreaded(const char *format, ...) const {
+ char *arg_msg = NULL;
+ va_list args;
+ va_start(args, format);
+ ::vasprintf(&arg_msg, format, args);
+ va_end(args);
+
+ if (arg_msg != NULL) {
+ if (Fail()) {
+ const char *err_str = AsString();
+ if (err_str == NULL)
+ err_str = "???";
+ DNBLogThreaded("error: %s err = %s (0x%8.8x)", arg_msg, err_str, m_err);
+ } else {
+ DNBLogThreaded("%s err = 0x%8.8x", arg_msg, m_err);
+ }
+ free(arg_msg);
+ }
+}