use std::path::Path;
pub(crate) fn write_self_dump(dir: &Path, stem: &str) {
let Ok((mut file, path)) = super::write::create_dump_file(dir, stem) else {
return;
};
if !dump_self(&mut file) {
drop(file);
let _ = std::fs::remove_file(path);
}
}
pub(crate) fn write_fault_dump(dir: &Path, stem: &str, ctx: &crash_handler::CrashContext) {
let Ok((mut file, path)) = super::write::create_dump_file(dir, stem) else {
return;
};
if !dump_fault(&mut file, ctx) {
drop(file);
let _ = std::fs::remove_file(path);
}
}
#[cfg(target_os = "macos")]
fn dump_self(file: &mut std::fs::File) -> bool {
minidump_writer::minidump_writer::MinidumpWriter::new(None, None)
.dump(file)
.is_ok()
}
#[cfg(target_os = "macos")]
fn dump_fault(file: &mut std::fs::File, ctx: &crash_handler::CrashContext) -> bool {
let owned = minidump_writer::crash_context::CrashContext {
task: ctx.task,
thread: ctx.thread,
handler_thread: ctx.handler_thread,
exception: ctx.exception,
};
minidump_writer::minidump_writer::MinidumpWriter::with_crash_context(owned)
.dump(file)
.is_ok()
}
#[cfg(target_os = "windows")]
fn dump_self(file: &mut std::fs::File) -> bool {
minidump_writer::minidump_writer::MinidumpWriter::dump_local_context(None, None, None, file)
.is_ok()
}
#[cfg(target_os = "windows")]
fn dump_fault(file: &mut std::fs::File, ctx: &crash_handler::CrashContext) -> bool {
minidump_writer::minidump_writer::MinidumpWriter::dump_crash_context(ctx, None, file).is_ok()
}