@@ -276,63 +276,89 @@ impl FileExt for fs::File {
276276}
277277
278278/// Unix-specific extensions to [`fs::Permissions`].
279+ ///
280+ /// # Examples
281+ ///
282+ /// ```no_run
283+ /// use std::fs::{File, Permissions};
284+ /// use std::io::{ErrorKind, Result as IoResult};
285+ /// use std::os::unix::fs::PermissionsExt;
286+ ///
287+ /// fn main() -> IoResult<()> {
288+ /// let name = "test_file_for_permissions";
289+ ///
290+ /// // make sure file does not exist
291+ /// let _ = std::fs::remove_file(name);
292+ /// assert_eq!(
293+ /// File::open(name).unwrap_err().kind(),
294+ /// ErrorKind::NotFound,
295+ /// "file already exists"
296+ /// );
297+ ///
298+ /// // full read/write/execute mode bits for owner of file
299+ /// // that we want to add to existing mode bits
300+ /// let my_mode = 0o700;
301+ ///
302+ /// // create new file with specified permissions
303+ /// {
304+ /// let file = File::create(name)?;
305+ /// let mut permissions = file.metadata()?.permissions();
306+ /// eprintln!("Current permissions: {:o}", permissions.mode());
307+ ///
308+ /// // make sure new permissions are not already set
309+ /// assert!(
310+ /// permissions.mode() & my_mode != my_mode,
311+ /// "permissions already set"
312+ /// );
313+ ///
314+ /// // either use `set_mode` to change an existing Permissions struct
315+ /// permissions.set_mode(permissions.mode() | my_mode);
316+ ///
317+ /// // or use `from_mode` to construct a new Permissions struct
318+ /// permissions = Permissions::from_mode(permissions.mode() | my_mode);
319+ ///
320+ /// // write new permissions to file
321+ /// file.set_permissions(permissions)?;
322+ /// }
323+ ///
324+ /// let permissions = File::open(name)?.metadata()?.permissions();
325+ /// eprintln!("New permissions: {:o}", permissions.mode());
326+ ///
327+ /// // assert new permissions were set
328+ /// assert_eq!(
329+ /// permissions.mode() & my_mode,
330+ /// my_mode,
331+ /// "new permissions not set"
332+ /// );
333+ /// Ok(())
334+ /// }
335+ /// ```
336+ ///
337+ /// ```no_run
338+ /// use std::fs::Permissions;
339+ /// use std::os::unix::fs::PermissionsExt;
340+ ///
341+ /// // read/write for owner and read for others
342+ /// let my_mode = 0o644;
343+ /// let mut permissions = Permissions::from_mode(my_mode);
344+ /// assert_eq!(permissions.mode(), my_mode);
345+ ///
346+ /// // read/write/execute for owner
347+ /// let other_mode = 0o700;
348+ /// permissions.set_mode(other_mode);
349+ /// assert_eq!(permissions.mode(), other_mode);
350+ /// ```
279351#[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
280352pub trait PermissionsExt {
281- /// Returns the underlying raw `st_mode` bits that contain the standard
282- /// Unix permissions for this file.
283- ///
284- /// # Examples
285- ///
286- /// ```no_run
287- /// use std::fs::File;
288- /// use std::os::unix::fs::PermissionsExt;
289- ///
290- /// fn main() -> std::io::Result<()> {
291- /// let f = File::create("foo.txt")?;
292- /// let metadata = f.metadata()?;
293- /// let permissions = metadata.permissions();
294- ///
295- /// println!("permissions: {:o}", permissions.mode());
296- /// Ok(())
297- /// }
298- /// ```
353+ /// Returns the mode permission bits
299354 #[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
300355 fn mode ( & self ) -> u32 ;
301356
302- /// Sets the underlying raw bits for this set of permissions.
303- ///
304- /// # Examples
305- ///
306- /// ```no_run
307- /// use std::fs::File;
308- /// use std::os::unix::fs::PermissionsExt;
309- ///
310- /// fn main() -> std::io::Result<()> {
311- /// let f = File::create("foo.txt")?;
312- /// let metadata = f.metadata()?;
313- /// let mut permissions = metadata.permissions();
314- ///
315- /// permissions.set_mode(0o644); // Read/write for owner and read for others.
316- /// assert_eq!(permissions.mode(), 0o644);
317- /// Ok(())
318- /// }
319- /// ```
357+ /// Sets the mode permission bits.
320358 #[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
321359 fn set_mode ( & mut self , mode : u32 ) ;
322360
323- /// Creates a new instance of `Permissions` from the given set of Unix
324- /// permission bits.
325- ///
326- /// # Examples
327- ///
328- /// ```
329- /// use std::fs::Permissions;
330- /// use std::os::unix::fs::PermissionsExt;
331- ///
332- /// // Read/write for owner and read for others.
333- /// let permissions = Permissions::from_mode(0o644);
334- /// assert_eq!(permissions.mode(), 0o644);
335- /// ```
361+ /// Creates a new instance from the given mode permission bits.
336362 #[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
337363 #[ cfg_attr( not( test) , rustc_diagnostic_item = "permissions_from_mode" ) ]
338364 fn from_mode ( mode : u32 ) -> Self ;
0 commit comments