aboutsummaryrefslogtreecommitdiff
path: root/src/crashhandler.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-12-08 12:41:18 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-12-08 12:41:18 +0100
commita118a7b6de720906e383d52aee056fbe55eb680d (patch)
tree4eb528ae7f994fd7f0d4163e27862bc86d40905c /src/crashhandler.cpp
parentConfiguration: parse command line after parsing config file (diff)
downloadsmolbote-a118a7b6de720906e383d52aee056fbe55eb680d.tar.xz
Split crash handler code off main
Diffstat (limited to 'src/crashhandler.cpp')
-rw-r--r--src/crashhandler.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/crashhandler.cpp b/src/crashhandler.cpp
new file mode 100644
index 0000000..194d04b
--- /dev/null
+++ b/src/crashhandler.cpp
@@ -0,0 +1,38 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "crashhandler.h"
+#include "version.h"
+
+#ifdef BREAKPAD
+
+//#ifdef Q_OS_LINUX
+#include <unistd.h>
+//#endif // Q_OS_LINUX
+
+
+bool CrashHandler::dumpCallback(const google_breakpad::MinidumpDescriptor &descriptor, void *context, bool succeeded)
+{
+ printf("Dump path: %s\n", descriptor.path());
+
+ auto *ctx = static_cast<BreakpadContext *>(context);
+ if(ctx != nullptr) {
+ if(ctx->handler != nullptr) {
+ // fork and run 'handler master:commit path.dmp'
+ pid_t pid = fork();
+ if(pid == 0) {
+ char buffer[256];
+ snprintf(buffer, 256, "%s %s %s", ctx->handler, poi_Version, descriptor.path());
+ execlp("/bin/sh", "/bin/sh", "-c", buffer, (char *)nullptr);
+ }
+ }
+ }
+
+ return succeeded;
+}
+#endif