@@ -1877,6 +1877,7 @@ fn test_freebsd(target: &str) {
18771877 "sys/vmmeter.h" ,
18781878 "sys/wait.h" ,
18791879 "libprocstat.h" ,
1880+ "devstat.h" ,
18801881 "syslog.h" ,
18811882 "termios.h" ,
18821883 "time.h" ,
@@ -1890,8 +1891,19 @@ fn test_freebsd(target: &str) {
18901891 cfg. type_name ( move |ty, is_struct, is_union| {
18911892 match ty {
18921893 // Just pass all these through, no need for a "struct" prefix
1893- "FILE" | "fd_set" | "Dl_info" | "DIR" | "Elf32_Phdr" | "Elf64_Phdr"
1894- | "Elf32_Auxinfo" | "Elf64_Auxinfo" => ty. to_string ( ) ,
1894+ "FILE"
1895+ | "fd_set"
1896+ | "Dl_info"
1897+ | "DIR"
1898+ | "Elf32_Phdr"
1899+ | "Elf64_Phdr"
1900+ | "Elf32_Auxinfo"
1901+ | "Elf64_Auxinfo"
1902+ | "devstat_select_mode"
1903+ | "devstat_support_flags"
1904+ | "devstat_type_flags"
1905+ | "devstat_match_flags"
1906+ | "devstat_priority" => ty. to_string ( ) ,
18951907
18961908 // FIXME: https://github.com/rust-lang/libc/issues/1273
18971909 "sighandler_t" => "sig_t" . to_string ( ) ,
@@ -1919,7 +1931,9 @@ fn test_freebsd(target: &str) {
19191931 }
19201932 // Field is named `type` in C but that is a Rust keyword,
19211933 // so these fields are translated to `type_` in the bindings.
1922- "type_" if struct_ == "rtprio" || struct_ == "sockstat" => "type" . to_string ( ) ,
1934+ "type_" if struct_ == "rtprio" => "type" . to_string ( ) ,
1935+ "type_" if struct_ == "sockstat" => "type" . to_string ( ) ,
1936+ "type_" if struct_ == "devstat_match_table" => "type" . to_string ( ) ,
19231937 s => s. to_string ( ) ,
19241938 }
19251939 } ) ;
@@ -2149,6 +2163,10 @@ fn test_freebsd(target: &str) {
21492163 // for now, it doesn't matter too much...
21502164 "kvm_t" => true ,
21512165
2166+ // The C norm is a nightmare to follow for `long double`. Its sized is checked since
2167+ // it's being used as a struct field type in any case.
2168+ "c_longdouble" => true ,
2169+
21522170 _ => false ,
21532171 }
21542172 } ) ;
@@ -2176,6 +2194,9 @@ fn test_freebsd(target: &str) {
21762194 // `ptrace_coredump` introduced in FreeBSD 14.
21772195 "ptrace_coredump" if Some ( 14 ) > freebsd_ver => true ,
21782196
2197+ // A wrapper around "long double".
2198+ "LongDoubleWrap" => true ,
2199+
21792200 _ => false ,
21802201 }
21812202 } ) ;
@@ -2206,6 +2227,10 @@ fn test_freebsd(target: &str) {
22062227 // https://github.com/gnzlbg/ctest/issues/68
22072228 "lio_listio" => true ,
22082229
2230+ // It returns a `long double`, but it's a nightmare to bind correctly in rust
2231+ // for the moment, so it's a best effort thing...
2232+ "devstat_compute_etime" => true ,
2233+
22092234 _ => false ,
22102235 }
22112236 } ) ;
@@ -2261,6 +2286,9 @@ fn test_freebsd(target: &str) {
22612286 ( "if_data" , "__ifi_lastchange" ) => true ,
22622287 ( "ifreq" , "ifr_ifru" ) => true ,
22632288
2289+ // anonymous struct
2290+ ( "devstat" , "dev_links" ) => true ,
2291+
22642292 // FIXME: structs too complicated to bind for now...
22652293 ( "kinfo_proc" , "ki_paddr" ) => true ,
22662294 ( "kinfo_proc" , "ki_addr" ) => true ,
@@ -2278,6 +2306,11 @@ fn test_freebsd(target: &str) {
22782306
22792307 // `__sem_base` is a private struct field
22802308 ( "semid_ds" , "__sem_base" ) => true ,
2309+
2310+ // `snap_time` is a `long double`, but it's a nightmare to bind correctly in rust
2311+ // for the moment, so it's a best effort thing...
2312+ ( "statinfo" , "snap_time" ) => true ,
2313+
22812314 _ => false ,
22822315 }
22832316 } ) ;
0 commit comments