slog2_extra/
lib.rs

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}