@@ -118,48 +118,44 @@ pub fn move_file<S: AsRef<Path>, D: AsRef<Path>>(source: S, destination: D) -> c
118118 Ok ( ( ) )
119119}
120120
121- /// Set file owner.
121+ /// Set file/directory owner and permissions .
122122#[ cfg( unix) ]
123123pub fn set_file_permissions < S : AsRef < Path > > (
124124 source : S ,
125125 uid : Option < u32 > ,
126126 gid : Option < u32 > ,
127127 mode : Option < u32 > ,
128128) -> crate :: Result < ( ) > {
129- unix:: fs:: chown ( & source, uid, gid) ?;
129+ let path = source. as_ref ( ) ;
130+
131+ unix:: fs:: chown ( path, uid, gid) ?;
130132 match ( uid, gid) {
131133 ( Some ( owner) , Some ( group) ) => {
132134 log:: info!(
133135 "Changed owner/group for {} to {owner}:{group}." ,
134- source . as_ref ( ) . display( )
136+ path . display( )
135137 ) ;
136138 }
137139 ( Some ( owner) , None ) => {
138- log:: info!(
139- "Changed owner for {} to {owner}." ,
140- source. as_ref( ) . display( )
141- ) ;
140+ log:: info!( "Changed owner for {} to {owner}." , path. display( ) ) ;
142141 }
143142 ( None , Some ( group) ) => {
144- log:: info!(
145- "Changed group for {} to {group}." ,
146- source. as_ref( ) . display( )
147- ) ;
143+ log:: info!( "Changed group for {} to {group}." , path. display( ) ) ;
148144 }
149145 _ => ( ) ,
150146 }
151147
152148 if let Some ( new_mode) = mode {
153- let file = fs:: File :: open ( & source ) ?;
154- let permissions = file . metadata ( ) ? . permissions ( ) ;
149+ let metadata = fs:: metadata ( path ) ?;
150+ let permissions = metadata. permissions ( ) ;
155151 let old_mode = permissions. mode ( ) ;
156152
157153 if permissions. mode ( ) != new_mode {
158154 let permissions = fs:: Permissions :: from_mode ( new_mode) ;
159- file . set_permissions ( permissions) ?;
155+ fs :: set_permissions ( path , permissions) ?; // ← Works on paths (files & directories)
160156 log:: info!(
161157 "Permission for {} changed from {old_mode:o} to {new_mode:o}." ,
162- source . as_ref ( ) . display( )
158+ path . display( )
163159 ) ;
164160 }
165161 }
0 commit comments