1pub mod ffi;
2
3use std::{ffi::CString, fs::File, os::fd::AsRawFd};
4
5use bitflags::bitflags;
6
7bitflags! {
8 #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
9 pub struct DumpFlags: u32 {
10 const DUMP_LOGS_ALL = ffi::SLOG2_DUMP_LOGS_ALL;
11 }
12}
13
14pub fn dump_logs_to_file(file: &File, flags: Option<DumpFlags>) -> std::io::Result<()> {
15 let fd = file.as_raw_fd();
16 let mode = CString::new("w").unwrap();
17 let c_file: *mut libc::FILE = unsafe { libc::fdopen(fd, mode.as_ptr()) };
18 let result = unsafe {
19 ffi::slog2_dump_logs_to_file(c_file, flags.map(|flags| flags.bits()).unwrap_or_default())
20 };
21 if result == -1 {
22 Err(std::io::Error::last_os_error())
23 } else {
24 Ok(())
25 }
26}