File tree Expand file tree Collapse file tree 2 files changed +34
-0
lines changed Expand file tree Collapse file tree 2 files changed +34
-0
lines changed Original file line number Diff line number Diff line change @@ -3128,6 +3128,25 @@ pub fn set_permissions<P: AsRef<Path>>(path: P, perm: Permissions) -> io::Result
31283128    fs_imp:: set_permissions ( path. as_ref ( ) ,  perm. 0 ) 
31293129} 
31303130
3131+ /// Set the permissions of a file, unless it is a symlink. 
3132+ /// 
3133+ /// Note that the non-final path elements are allowed to be symlinks. 
3134+ /// 
3135+ /// # Platform-specific behavior 
3136+ /// 
3137+ /// Currently unimplemented on Windows. 
3138+ /// 
3139+ /// On Unix platforms, this results in a [`FilesystemLoop`] error if the last element is a symlink. 
3140+ /// 
3141+ /// This behavior may change in the future. 
3142+ /// 
3143+ /// [`FilesystemLoop`]: crate::io::ErrorKind::FilesystemLoop 
3144+ #[ doc( alias = "chmod" ,  alias = "SetFileAttributes" ) ]  
3145+ #[ unstable( feature = "set_permissions_nofollow" ,  issue = "141607" ) ]  
3146+ pub  fn  set_permissions_nofollow < P :  AsRef < Path > > ( path :  P ,  perm :  Permissions )  -> io:: Result < ( ) >  { 
3147+     fs_imp:: set_permissions_nofollow ( path. as_ref ( ) ,  perm) 
3148+ } 
3149+ 
31313150impl  DirBuilder  { 
31323151    /// Creates a new set of options with default mode/security settings for all 
31333152/// platforms and also non-recursive. 
Original file line number Diff line number Diff line change @@ -108,6 +108,21 @@ pub fn set_permissions(path: &Path, perm: FilePermissions) -> io::Result<()> {
108108    with_native_path ( path,  & |path| imp:: set_perm ( path,  perm. clone ( ) ) ) 
109109} 
110110
111+ #[ cfg( unix) ]  
112+ pub  fn  set_permissions_nofollow ( path :  & Path ,  perm :  crate :: fs:: Permissions )  -> io:: Result < ( ) >  { 
113+     use  crate :: fs:: OpenOptions ; 
114+     use  crate :: os:: unix:: fs:: OpenOptionsExt ; 
115+ 
116+     OpenOptions :: new ( ) . custom_flags ( libc:: O_NOFOLLOW ) . open ( path) ?. set_permissions ( perm) 
117+ } 
118+ 
119+ #[ cfg( not( unix) ) ]  
120+ pub  fn  set_permissions_nofollow ( _path :  & Path ,  _perm :  crate :: fs:: Permissions )  -> io:: Result < ( ) >  { 
121+     crate :: unimplemented!( 
122+         "`set_permissions_nofollow` is currently only implemented on Unix platforms" 
123+     ) 
124+ } 
125+ 
111126pub  fn  canonicalize ( path :  & Path )  -> io:: Result < PathBuf >  { 
112127    with_native_path ( path,  & imp:: canonicalize) 
113128} 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments