Skip to content

Commit 6c84b0c

Browse files
Add missing procstat items
1 parent 72cf180 commit 6c84b0c

File tree

6 files changed

+422
-1
lines changed

6 files changed

+422
-1
lines changed

libc-test/build.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1917,7 +1917,7 @@ fn test_freebsd(target: &str) {
19171917
}
19181918
// Field is named `type` in C but that is a Rust keyword,
19191919
// so these fields are translated to `type_` in the bindings.
1920-
"type_" if struct_ == "rtprio" => "type".to_string(),
1920+
"type_" if struct_ == "rtprio" || struct_ == "sockstat" => "type".to_string(),
19211921
s => s.to_string(),
19221922
}
19231923
});
@@ -2093,6 +2093,9 @@ fn test_freebsd(target: &str) {
20932093
true
20942094
}
20952095

2096+
// Added in FreeBSD 13.
2097+
"PS_FST_TYPE_EVENTFD" if Some(13) > freebsd_ver => true,
2098+
20962099
_ => false,
20972100
}
20982101
});

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: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,18 @@ 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_fsid: u32,
266+
pub vn_mntdir: *mut ::c_char,
267+
pub vn_type: ::c_int,
268+
pub vn_mode: u16,
269+
pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
270+
}
259271
}
260272

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

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

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,18 @@ 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_fsid: u32,
287+
pub vn_mntdir: *mut ::c_char,
288+
pub vn_type: ::c_int,
289+
pub vn_mode: u16,
290+
pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
291+
}
280292
}
281293

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

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

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,18 @@ 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_fsid: u32,
287+
pub vn_mntdir: *mut ::c_char,
288+
pub vn_type: ::c_int,
289+
pub vn_mode: u16,
290+
pub vn_devname: [::c_char; ::SPECNAMELEN as usize + 1],
291+
}
280292
}
281293

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

0 commit comments

Comments
 (0)