Skip to content

Commit 89ead98

Browse files
committed
Auto merge of #2561 - GuillaumeGomez:procstat-items, r=JohnTitor
Add missing procstat items for FreeBSD
2 parents c632da1 + 4297ec1 commit 89ead98

File tree

6 files changed

+418
-1
lines changed

6 files changed

+418
-1
lines changed

libc-test/build.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1918,7 +1918,7 @@ fn test_freebsd(target: &str) {
19181918
}
19191919
// Field is named `type` in C but that is a Rust keyword,
19201920
// so these fields are translated to `type_` in the bindings.
1921-
"type_" if struct_ == "rtprio" => "type".to_string(),
1921+
"type_" if struct_ == "rtprio" || struct_ == "sockstat" => "type".to_string(),
19221922
s => s.to_string(),
19231923
}
19241924
});
@@ -2105,6 +2105,8 @@ fn test_freebsd(target: &str) {
21052105
}
21062106
// Added in freebsd 12.
21072107
"IFF_NOGROUP" | "IFCAP_TXRTLMT" | "IFCAP_HWRXTSTMP" if Some(12) > freebsd_ver => true,
2108+
// Added in FreeBSD 13.
2109+
"PS_FST_TYPE_EVENTFD" if Some(13) > freebsd_ver => true,
21082110

21092111
_ => false,
21102112
}

src/unix/bsd/freebsdlike/freebsd/freebsd11/mod.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,17 @@ s_no_extra_traits! {
247247
// Array length changed from 88 to 1024 in FreeBSD 12:
248248
pub f_mntonname: [::c_char; 88],
249249
}
250+
251+
pub struct vnstat {
252+
pub vn_fileid: u64,
253+
pub vn_size: u64,
254+
pub vn_mntdir: *mut ::c_char,
255+
pub vn_dev: u32,
256+
pub vn_fsid: u32,
257+
pub vn_type: ::c_int,
258+
pub vn_mode: u16,
259+
pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
260+
}
250261
}
251262

252263
cfg_if! {
@@ -366,13 +377,62 @@ cfg_if! {
366377
self.d_name[..self.d_namlen as _].hash(state);
367378
}
368379
}
380+
381+
impl PartialEq for vnstat {
382+
fn eq(&self, other: &vnstat) -> bool {
383+
let self_vn_devname: &[::c_char] = &self.vn_devname;
384+
let other_vn_devname: &[::c_char] = &other.vn_devname;
385+
386+
self.vn_fileid == other.vn_fileid &&
387+
self.vn_size == other.vn_size &&
388+
self.vn_mntdir == other.vn_mntdir &&
389+
self.vn_dev == other.vn_dev &&
390+
self.vn_fsid == other.vn_fsid &&
391+
self.vn_type == other.vn_type &&
392+
self.vn_mode == other.vn_mode &&
393+
self_vn_devname == other_vn_devname
394+
}
395+
}
396+
impl Eq for vnstat {}
397+
impl ::fmt::Debug for vnstat {
398+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
399+
let self_vn_devname: &[::c_char] = &self.vn_devname;
400+
401+
f.debug_struct("vnstat")
402+
.field("vn_fileid", &self.vn_fileid)
403+
.field("vn_size", &self.vn_size)
404+
.field("vn_mntdir", &self.vn_mntdir)
405+
.field("vn_dev", &self.vn_dev)
406+
.field("vn_fsid", &self.vn_fsid)
407+
.field("vn_type", &self.vn_type)
408+
.field("vn_mode", &self.vn_mode)
409+
.field("vn_devname", &self_vn_devname)
410+
.finish()
411+
}
412+
}
413+
impl ::hash::Hash for vnstat {
414+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
415+
let self_vn_devname: &[::c_char] = &self.vn_devname;
416+
417+
self.vn_fileid.hash(state);
418+
self.vn_size.hash(state);
419+
self.vn_mntdir.hash(state);
420+
self.vn_dev.hash(state);
421+
self.vn_fsid.hash(state);
422+
self.vn_type.hash(state);
423+
self.vn_mode.hash(state);
424+
self_vn_devname.hash(state);
425+
}
426+
}
369427
}
370428
}
371429

372430
pub const ELAST: ::c_int = 96;
373431
pub const RAND_MAX: ::c_int = 0x7fff_fffd;
374432
pub const KI_NSPARE_PTR: usize = 6;
375433
pub const MINCORE_SUPER: ::c_int = 0x20;
434+
/// max length of devicename
435+
pub const SPECNAMELEN: ::c_int = 63;
376436

377437
extern "C" {
378438
// Return type ::c_int was removed in FreeBSD 12

src/unix/bsd/freebsdlike/freebsd/freebsd12/mod.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,17 @@ s_no_extra_traits! {
256256
pub f_mntfromname: [::c_char; 1024],
257257
pub f_mntonname: [::c_char; 1024],
258258
}
259+
260+
pub struct vnstat {
261+
pub vn_fileid: u64,
262+
pub vn_size: u64,
263+
pub vn_dev: u64,
264+
pub vn_fsid: u64,
265+
pub vn_mntdir: *mut ::c_char,
266+
pub vn_type: ::c_int,
267+
pub vn_mode: u16,
268+
pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
269+
}
259270
}
260271

261272
cfg_if! {
@@ -379,6 +390,53 @@ cfg_if! {
379390
self.d_name[..self.d_namlen as _].hash(state);
380391
}
381392
}
393+
394+
impl PartialEq for vnstat {
395+
fn eq(&self, other: &vnstat) -> bool {
396+
let self_vn_devname: &[::c_char] = &self.vn_devname;
397+
let other_vn_devname: &[::c_char] = &other.vn_devname;
398+
399+
self.vn_fileid == other.vn_fileid &&
400+
self.vn_size == other.vn_size &&
401+
self.vn_dev == other.vn_dev &&
402+
self.vn_fsid == other.vn_fsid &&
403+
self.vn_mntdir == other.vn_mntdir &&
404+
self.vn_type == other.vn_type &&
405+
self.vn_mode == other.vn_mode &&
406+
self_vn_devname == other_vn_devname
407+
}
408+
}
409+
impl Eq for vnstat {}
410+
impl ::fmt::Debug for vnstat {
411+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
412+
let self_vn_devname: &[::c_char] = &self.vn_devname;
413+
414+
f.debug_struct("vnstat")
415+
.field("vn_fileid", &self.vn_fileid)
416+
.field("vn_size", &self.vn_size)
417+
.field("vn_dev", &self.vn_dev)
418+
.field("vn_fsid", &self.vn_fsid)
419+
.field("vn_mntdir", &self.vn_mntdir)
420+
.field("vn_type", &self.vn_type)
421+
.field("vn_mode", &self.vn_mode)
422+
.field("vn_devname", &self_vn_devname)
423+
.finish()
424+
}
425+
}
426+
impl ::hash::Hash for vnstat {
427+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
428+
let self_vn_devname: &[::c_char] = &self.vn_devname;
429+
430+
self.vn_fileid.hash(state);
431+
self.vn_size.hash(state);
432+
self.vn_dev.hash(state);
433+
self.vn_fsid.hash(state);
434+
self.vn_mntdir.hash(state);
435+
self.vn_type.hash(state);
436+
self.vn_mode.hash(state);
437+
self_vn_devname.hash(state);
438+
}
439+
}
382440
}
383441
}
384442

src/unix/bsd/freebsdlike/freebsd/freebsd13/mod.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,17 @@ s_no_extra_traits! {
277277
pub f_mntfromname: [::c_char; 1024],
278278
pub f_mntonname: [::c_char; 1024],
279279
}
280+
281+
pub struct vnstat {
282+
pub vn_fileid: u64,
283+
pub vn_size: u64,
284+
pub vn_dev: u64,
285+
pub vn_fsid: u64,
286+
pub vn_mntdir: *mut ::c_char,
287+
pub vn_type: ::c_int,
288+
pub vn_mode: u16,
289+
pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
290+
}
280291
}
281292

282293
cfg_if! {
@@ -400,6 +411,53 @@ cfg_if! {
400411
self.d_name[..self.d_namlen as _].hash(state);
401412
}
402413
}
414+
415+
impl PartialEq for vnstat {
416+
fn eq(&self, other: &vnstat) -> bool {
417+
let self_vn_devname: &[::c_char] = &self.vn_devname;
418+
let other_vn_devname: &[::c_char] = &other.vn_devname;
419+
420+
self.vn_fileid == other.vn_fileid &&
421+
self.vn_size == other.vn_size &&
422+
self.vn_dev == other.vn_dev &&
423+
self.vn_fsid == other.vn_fsid &&
424+
self.vn_mntdir == other.vn_mntdir &&
425+
self.vn_type == other.vn_type &&
426+
self.vn_mode == other.vn_mode &&
427+
self_vn_devname == other_vn_devname
428+
}
429+
}
430+
impl Eq for vnstat {}
431+
impl ::fmt::Debug for vnstat {
432+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
433+
let self_vn_devname: &[::c_char] = &self.vn_devname;
434+
435+
f.debug_struct("vnstat")
436+
.field("vn_fileid", &self.vn_fileid)
437+
.field("vn_size", &self.vn_size)
438+
.field("vn_dev", &self.vn_dev)
439+
.field("vn_fsid", &self.vn_fsid)
440+
.field("vn_mntdir", &self.vn_mntdir)
441+
.field("vn_type", &self.vn_type)
442+
.field("vn_mode", &self.vn_mode)
443+
.field("vn_devname", &self_vn_devname)
444+
.finish()
445+
}
446+
}
447+
impl ::hash::Hash for vnstat {
448+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
449+
let self_vn_devname: &[::c_char] = &self.vn_devname;
450+
451+
self.vn_fileid.hash(state);
452+
self.vn_size.hash(state);
453+
self.vn_dev.hash(state);
454+
self.vn_fsid.hash(state);
455+
self.vn_mntdir.hash(state);
456+
self.vn_type.hash(state);
457+
self.vn_mode.hash(state);
458+
self_vn_devname.hash(state);
459+
}
460+
}
403461
}
404462
}
405463

src/unix/bsd/freebsdlike/freebsd/freebsd14/mod.rs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,17 @@ s_no_extra_traits! {
277277
pub f_mntfromname: [::c_char; 1024],
278278
pub f_mntonname: [::c_char; 1024],
279279
}
280+
281+
pub struct vnstat {
282+
pub vn_fileid: u64,
283+
pub vn_size: u64,
284+
pub vn_dev: u64,
285+
pub vn_fsid: u64,
286+
pub vn_mntdir: *mut ::c_char,
287+
pub vn_type: ::c_int,
288+
pub vn_mode: u16,
289+
pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
290+
}
280291
}
281292

282293
cfg_if! {
@@ -400,6 +411,53 @@ cfg_if! {
400411
self.d_name[..self.d_namlen as _].hash(state);
401412
}
402413
}
414+
415+
impl PartialEq for vnstat {
416+
fn eq(&self, other: &vnstat) -> bool {
417+
let self_vn_devname: &[::c_char] = &self.vn_devname;
418+
let other_vn_devname: &[::c_char] = &other.vn_devname;
419+
420+
self.vn_fileid == other.vn_fileid &&
421+
self.vn_size == other.vn_size &&
422+
self.vn_dev == other.vn_dev &&
423+
self.vn_fsid == other.vn_fsid &&
424+
self.vn_mntdir == other.vn_mntdir &&
425+
self.vn_type == other.vn_type &&
426+
self.vn_mode == other.vn_mode &&
427+
self_vn_devname == other_vn_devname
428+
}
429+
}
430+
impl Eq for vnstat {}
431+
impl ::fmt::Debug for vnstat {
432+
fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result {
433+
let self_vn_devname: &[::c_char] = &self.vn_devname;
434+
435+
f.debug_struct("vnstat")
436+
.field("vn_fileid", &self.vn_fileid)
437+
.field("vn_size", &self.vn_size)
438+
.field("vn_dev", &self.vn_dev)
439+
.field("vn_fsid", &self.vn_fsid)
440+
.field("vn_mntdir", &self.vn_mntdir)
441+
.field("vn_type", &self.vn_type)
442+
.field("vn_mode", &self.vn_mode)
443+
.field("vn_devname", &self_vn_devname)
444+
.finish()
445+
}
446+
}
447+
impl ::hash::Hash for vnstat {
448+
fn hash<H: ::hash::Hasher>(&self, state: &mut H) {
449+
let self_vn_devname: &[::c_char] = &self.vn_devname;
450+
451+
self.vn_fileid.hash(state);
452+
self.vn_size.hash(state);
453+
self.vn_dev.hash(state);
454+
self.vn_fsid.hash(state);
455+
self.vn_mntdir.hash(state);
456+
self.vn_type.hash(state);
457+
self.vn_mode.hash(state);
458+
self_vn_devname.hash(state);
459+
}
460+
}
403461
}
404462
}
405463

0 commit comments

Comments
 (0)