@@ -10,6 +10,16 @@ use std::ffi::CStr;
10
10
use cfg_if:: cfg_if;
11
11
12
12
use crate :: { NixPath , Result , errno:: Errno } ;
13
+ #[ cfg( all( feature = "mount" ,
14
+ any( target_os = "dragonfly" ,
15
+ target_os = "freebsd" ,
16
+ target_os = "macos" ,
17
+ target_os = "netbsd" ,
18
+ target_os = "openbsd" )
19
+ ) ) ]
20
+ use crate :: mount:: MntFlags ;
21
+ #[ cfg( target_os = "linux" ) ]
22
+ use crate :: sys:: statvfs:: FsFlags ;
13
23
14
24
/// Identifies a mounted file system
15
25
#[ cfg( target_os = "android" ) ]
@@ -374,6 +384,29 @@ impl Statfs {
374
384
self . 0 . f_bsize
375
385
}
376
386
387
+ /// Get the mount flags
388
+ #[ cfg( all( feature = "mount" ,
389
+ any( target_os = "dragonfly" ,
390
+ target_os = "freebsd" ,
391
+ target_os = "macos" ,
392
+ target_os = "netbsd" ,
393
+ target_os = "openbsd" )
394
+ ) ) ]
395
+ #[ cfg_attr( docsrs, doc( cfg( all( ) ) ) ) ]
396
+ #[ allow( clippy:: unnecessary_cast) ] // Not unnecessary on all arches
397
+ pub fn flags ( & self ) -> MntFlags {
398
+ MntFlags :: from_bits_truncate ( self . 0 . f_flags as i32 )
399
+ }
400
+
401
+ /// Get the mount flags
402
+ // The f_flags field exists on Android and Fuchsia too, but without man
403
+ // pages I can't tell if it can be cast to FsFlags.
404
+ #[ cfg( target_os = "linux" ) ]
405
+ #[ cfg_attr( docsrs, doc( cfg( all( ) ) ) ) ]
406
+ pub fn flags ( & self ) -> FsFlags {
407
+ FsFlags :: from_bits_truncate ( self . 0 . f_flags as libc:: c_ulong )
408
+ }
409
+
377
410
/// Maximum length of filenames
378
411
#[ cfg( any( target_os = "freebsd" , target_os = "openbsd" ) ) ]
379
412
#[ cfg_attr( docsrs, doc( cfg( all( ) ) ) ) ]
@@ -580,16 +613,25 @@ impl Statfs {
580
613
581
614
impl Debug for Statfs {
582
615
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
583
- f. debug_struct ( "Statfs" )
584
- . field ( "optimal_transfer_size" , & self . optimal_transfer_size ( ) )
585
- . field ( "block_size" , & self . block_size ( ) )
586
- . field ( "blocks" , & self . blocks ( ) )
587
- . field ( "blocks_free" , & self . blocks_free ( ) )
588
- . field ( "blocks_available" , & self . blocks_available ( ) )
589
- . field ( "files" , & self . files ( ) )
590
- . field ( "files_free" , & self . files_free ( ) )
591
- . field ( "filesystem_id" , & self . filesystem_id ( ) )
592
- . finish ( )
616
+ let mut ds = f. debug_struct ( "Statfs" ) ;
617
+ ds. field ( "optimal_transfer_size" , & self . optimal_transfer_size ( ) ) ;
618
+ ds. field ( "block_size" , & self . block_size ( ) ) ;
619
+ ds. field ( "blocks" , & self . blocks ( ) ) ;
620
+ ds. field ( "blocks_free" , & self . blocks_free ( ) ) ;
621
+ ds. field ( "blocks_available" , & self . blocks_available ( ) ) ;
622
+ ds. field ( "files" , & self . files ( ) ) ;
623
+ ds. field ( "files_free" , & self . files_free ( ) ) ;
624
+ ds. field ( "filesystem_id" , & self . filesystem_id ( ) ) ;
625
+ #[ cfg( all( feature = "mount" ,
626
+ any( target_os = "dragonfly" ,
627
+ target_os = "freebsd" ,
628
+ target_os = "macos" ,
629
+ target_os = "netbsd" ,
630
+ target_os = "openbsd" )
631
+ ) ) ]
632
+ ds. field ( "flags" , & self . flags ( ) ) ;
633
+ ds. finish ( )
634
+
593
635
}
594
636
}
595
637
0 commit comments