slog2_parse/
ffi.rs

1#![allow(non_camel_case_types)]
2
3use std::ffi::{c_char, c_void};
4
5pub const SLOG2_PARSE_MAX_NAME_SIZE: usize = 64;
6
7pub const SLOG2_PARSE_FLAGS_DYNAMIC: u32 = 0x00000001;
8pub const SLOG2_PARSE_FLAGS_CURRENT: u32 = 0x00000002;
9
10pub const SLOG2_PACKET_FLAGS_FIRSTPACKET: u32 = 0x00000001;
11pub const SLOG2_PACKET_FLAGS_MONOTONIC: u32 = 0x00000002;
12
13pub type slog2_log_t = *mut ::core::ffi::c_void;
14
15#[repr(i32)]
16pub enum slog2_packet_data_type_t {
17    SLOG2_TYPE_ASCII_STRING,
18    SLOG2_TYPE_BINARY,
19    SLOG2_TYPE_UNSYNC,
20    SLOG2_TYPE_ONLINE,
21}
22
23#[repr(C)]
24pub struct slog2_log_info_t {
25    pub size: u32,
26    pub num_buffers: u32,
27    pub owner_pid: u32,
28    pub buffer_set_name: *const c_char,
29    pub verbosity_level: u8,
30}
31
32pub const SLOG2_LOG_INFO_INIT: slog2_log_info_t = slog2_log_info_t {
33    size: core::mem::size_of::<slog2_log_info_t>() as u32,
34    num_buffers: 0,
35    owner_pid: 0,
36    buffer_set_name: core::ptr::null(),
37    verbosity_level: 0,
38};
39
40#[repr(C)]
41pub struct slog2_buffer_info_t {
42    pub size: u32,
43    pub buffer_size: u32,
44    pub buffer_name: *const c_char,
45}
46
47pub const SLOG2_BUFFER_INFO_INIT: slog2_buffer_info_t = slog2_buffer_info_t {
48    size: core::mem::size_of::<slog2_buffer_info_t>() as u32,
49    buffer_size: 0,
50    buffer_name: core::ptr::null(),
51};
52
53#[repr(C)]
54pub struct slog2_packet_info_t {
55    pub size: u32,
56    pub sequence_number: u16,
57    pub data_size: u16,
58    pub timestamp: u64,
59    pub data_type: slog2_packet_data_type_t,
60    pub thread_id: u16,
61    pub code: u16,
62    pub severity: u8,
63    pub file_name: [c_char; 2 * SLOG2_PARSE_MAX_NAME_SIZE],
64    pub buffer_name: [c_char; SLOG2_PARSE_MAX_NAME_SIZE],
65    pub owner_pid: u32,
66    pub flags: u32,
67    pub register_flags: u32,
68}
69
70pub const SLOG2_PACKET_INFO_INIT: slog2_packet_info_t = slog2_packet_info_t {
71    size: core::mem::size_of::<slog2_packet_info_t>() as u32,
72    sequence_number: 0,
73    data_size: 0,
74    timestamp: 0,
75    data_type: slog2_packet_data_type_t::SLOG2_TYPE_ASCII_STRING,
76    thread_id: 0,
77    code: 0,
78    severity: 0,
79    file_name: [0; 2 * SLOG2_PARSE_MAX_NAME_SIZE],
80    buffer_name: [0; SLOG2_PARSE_MAX_NAME_SIZE],
81    owner_pid: 0,
82    flags: 0,
83    register_flags: 0,
84};
85
86pub type slog2_packet_callback = Option<
87    unsafe extern "C" fn(
88        info: *mut slog2_packet_info_t,
89        payload: *mut core::ffi::c_void,
90        param: *mut core::ffi::c_void,
91    ) -> i32,
92>;
93
94#[link(name = "slog2parse")]
95unsafe extern "C" {
96    pub fn slog2_open_log(filename: *const c_char) -> slog2_log_t;
97
98    pub fn slog2_close_log(log: slog2_log_t);
99
100    pub fn slog2_get_log_info(log: slog2_log_t, log_info: *mut slog2_log_info_t) -> i32;
101
102    pub fn slog2_packet_cmp(
103        packet1: *mut slog2_packet_info_t,
104        packet2: *mut slog2_packet_info_t,
105    ) -> i32;
106
107    pub fn slog2_get_buffer_info(
108        log: slog2_log_t,
109        buffer_index: i32,
110        buffer_info: *mut slog2_buffer_info_t,
111    ) -> i32;
112
113    pub fn slog2_parse_static_buffer(
114        log: slog2_log_t,
115        buffer_index: i32,
116        packet_info: *mut slog2_packet_info_t,
117        callback: slog2_packet_callback,
118        param: *mut c_void,
119    ) -> i32;
120
121    pub fn slog2_parse_dynamic_buffer(
122        log: slog2_log_t,
123        buffer_index: i32,
124        packet_info: *mut slog2_packet_info_t,
125        callback: slog2_packet_callback,
126        param: *mut c_void,
127    ) -> i32;
128
129    pub fn slog2_parse_all(
130        flags: u32,
131        directory_path: *mut c_char,
132        match_list: *mut c_char,
133        packet_info: *mut slog2_packet_info_t,
134        callback: slog2_packet_callback,
135        param: *mut c_void,
136    ) -> i32;
137
138    pub fn slog2_parse_settings(flags: u32) -> i32;
139}
140
141pub const SLOG2_PARSE_SETTINGS_VERBOSE: i32 = 1 << 0;