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;