diff --git a/src/os/unix/crashlog_unix.cpp b/src/os/unix/crashlog_unix.cpp --- a/src/os/unix/crashlog_unix.cpp +++ b/src/os/unix/crashlog_unix.cpp @@ -9,6 +9,7 @@ #include "../../stdafx.h" #include "../../crashlog.h" +#include "../../fileio_func.h" #include "../../string_func.h" #include "../../gamelog.h" #include "../../saveload/saveload.h" @@ -25,6 +26,10 @@ #include #endif +#ifdef WITH_UNOFFICIAL_BREAKPAD +# include +#endif + #include "../../safeguards.h" /** @@ -84,6 +89,23 @@ class CrashLogUnix : public CrashLog { #endif fmt::format_to(output_iterator, "\n"); } + +#ifdef WITH_UNOFFICIAL_BREAKPAD + static bool MinidumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* context, bool succeeded) + { + CrashLogUnix *crashlog = reinterpret_cast(context); + + crashlog->crashdump_filename = crashlog->CreateFileName(".dmp"); + std::rename(descriptor.path(), crashlog->crashdump_filename.c_str()); + return succeeded; + } + + int WriteCrashDump() override + { + return google_breakpad::ExceptionHandler::WriteMinidump(_personal_dir, MinidumpCallback, this) ? 1 : -1; + } +#endif + public: /** * A crash log is always generated by signal.