@@ -276,63 +276,89 @@ impl FileExt for fs::File {
276
276
}
277
277
278
278
/// 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(my_other_mode);
349
+ /// assert_eq!(permissions.mode(), my_other_mode);
350
+ /// ```
279
351
#[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
280
352
pub 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
299
354
#[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
300
355
fn mode ( & self ) -> u32 ;
301
356
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.
320
358
#[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
321
359
fn set_mode ( & mut self , mode : u32 ) ;
322
360
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.
336
362
#[ stable( feature = "fs_ext" , since = "1.1.0" ) ]
337
363
#[ cfg_attr( not( test) , rustc_diagnostic_item = "permissions_from_mode" ) ]
338
364
fn from_mode ( mode : u32 ) -> Self ;
0 commit comments