@@ -2435,8 +2435,8 @@ pub struct User {
2435
2435
pub expire : libc:: time_t
2436
2436
}
2437
2437
2438
- impl From < * mut libc:: passwd > for User {
2439
- fn from ( pw : * mut libc:: passwd ) -> User {
2438
+ impl From < & libc:: passwd > for User {
2439
+ fn from ( pw : & libc:: passwd ) -> User {
2440
2440
unsafe {
2441
2441
User {
2442
2442
name : CStr :: from_ptr ( ( * pw) . pw_name ) . to_string_lossy ( ) . into_owned ( ) ,
@@ -2488,9 +2488,11 @@ impl User {
2488
2488
)
2489
2489
} ;
2490
2490
2491
+ let pwd = unsafe { pwd. assume_init ( ) } ;
2492
+
2491
2493
if error == 0 {
2492
2494
if ! res. is_null ( ) {
2493
- Some ( Ok ( User :: from ( res ) ) )
2495
+ Some ( Ok ( User :: from ( & pwd ) ) )
2494
2496
} else {
2495
2497
None
2496
2498
}
@@ -2528,9 +2530,11 @@ impl User {
2528
2530
)
2529
2531
} ;
2530
2532
2533
+ let pwd = unsafe { pwd. assume_init ( ) } ;
2534
+
2531
2535
if error == 0 {
2532
2536
if ! res. is_null ( ) {
2533
- Some ( Ok ( User :: from ( res ) ) )
2537
+ Some ( Ok ( User :: from ( & pwd ) ) )
2534
2538
} else {
2535
2539
None
2536
2540
}
@@ -2551,8 +2555,8 @@ pub struct Group {
2551
2555
pub mem : Vec < String >
2552
2556
}
2553
2557
2554
- impl From < * mut libc:: group > for Group {
2555
- fn from ( gr : * mut libc:: group ) -> Group {
2558
+ impl From < & libc:: group > for Group {
2559
+ fn from ( gr : & libc:: group ) -> Group {
2556
2560
unsafe {
2557
2561
Group {
2558
2562
name : CStr :: from_ptr ( ( * gr) . gr_name ) . to_string_lossy ( ) . into_owned ( ) ,
@@ -2611,9 +2615,11 @@ impl Group {
2611
2615
)
2612
2616
} ;
2613
2617
2618
+ let grp = unsafe { grp. assume_init ( ) } ;
2619
+
2614
2620
if error == 0 {
2615
2621
if !res. is_null ( ) {
2616
- Some ( Ok ( Group :: from ( res ) ) )
2622
+ Some ( Ok ( Group :: from ( & grp ) ) )
2617
2623
} else {
2618
2624
None
2619
2625
}
@@ -2653,9 +2659,11 @@ impl Group {
2653
2659
)
2654
2660
} ;
2655
2661
2662
+ let grp = unsafe { grp. assume_init ( ) } ;
2663
+
2656
2664
if error == 0 {
2657
2665
if !res. is_null ( ) {
2658
- Some ( Ok ( Group :: from ( res ) ) )
2666
+ Some ( Ok ( Group :: from ( & grp ) ) )
2659
2667
} else {
2660
2668
None
2661
2669
}
@@ -2719,18 +2727,24 @@ mod usergroupiter {
2719
2727
impl Iterator for Users {
2720
2728
type Item = Result < User > ;
2721
2729
fn next ( & mut self ) -> Option < Result < User > > {
2722
-
2723
2730
let mut cbuf = vec ! [ 0 as c_char; self . 0 ] ;
2724
- let mut pwd: libc:: passwd = unsafe { mem :: uninitialized ( ) } ;
2731
+ let mut pwd = mem :: MaybeUninit :: < libc:: passwd > :: uninit ( ) ;
2725
2732
let mut res = ptr:: null_mut ( ) ;
2726
2733
2727
2734
let error = unsafe {
2728
2735
Errno :: clear ( ) ;
2729
- libc:: getpwent_r ( & mut pwd, cbuf. as_mut_ptr ( ) , self . 0 , & mut res)
2736
+ libc:: getpwent_r (
2737
+ pwd. as_mut_ptr ( ) ,
2738
+ cbuf. as_mut_ptr ( ) ,
2739
+ self . 0 ,
2740
+ & mut res
2741
+ )
2730
2742
} ;
2731
2743
2744
+ let pwd = unsafe { pwd. assume_init ( ) } ;
2745
+
2732
2746
if error == 0 && !res. is_null ( ) {
2733
- Some ( Ok ( User :: from ( res ) ) )
2747
+ Some ( Ok ( User :: from ( & pwd ) ) )
2734
2748
} else if error == libc:: ERANGE {
2735
2749
Some ( Err ( Error :: Sys ( Errno :: last ( ) ) ) )
2736
2750
} else {
@@ -2787,18 +2801,24 @@ mod usergroupiter {
2787
2801
impl Iterator for Groups {
2788
2802
type Item = Result < Group > ;
2789
2803
fn next ( & mut self ) -> Option < Result < Group > > {
2790
-
2791
2804
let mut cbuf = vec ! [ 0 as c_char; self . 0 ] ;
2792
- let mut grp: libc:: group = unsafe { mem :: uninitialized ( ) } ;
2805
+ let mut grp = mem :: MaybeUninit :: < libc:: group > :: uninit ( ) ;
2793
2806
let mut res = ptr:: null_mut ( ) ;
2794
2807
2795
2808
let error = unsafe {
2796
2809
Errno :: clear ( ) ;
2797
- libc:: getgrent_r ( & mut grp, cbuf. as_mut_ptr ( ) , self . 0 , & mut res)
2810
+ libc:: getgrent_r (
2811
+ grp. as_mut_ptr ( ) ,
2812
+ cbuf. as_mut_ptr ( ) ,
2813
+ self . 0 ,
2814
+ & mut res
2815
+ )
2798
2816
} ;
2799
2817
2818
+ let grp = unsafe { grp. assume_init ( ) } ;
2819
+
2800
2820
if error == 0 && !res. is_null ( ) {
2801
- Some ( Ok ( Group :: from ( res ) ) )
2821
+ Some ( Ok ( Group :: from ( & grp ) ) )
2802
2822
} else if error == libc:: ERANGE {
2803
2823
Some ( Err ( Error :: Sys ( Errno :: last ( ) ) ) )
2804
2824
} else {
0 commit comments