Skip to content

Commit e391079

Browse files
committed
Retain suid/sgid/sticky bits in Metadata.permissions
Most users would expect set_permissions(Metadata.permissions()) to be non-destructive. While we can't guarantee this, we can at least pass the needed info to chmod. Also update the PermissionsExt documentation to disambiguate what it contains, and to refer to the underlying value as `st_mode` rather than its type `mode_t`. Closes #44147
1 parent fd4bef5 commit e391079

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

src/libstd/sys/unix/ext/fs.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ impl FileExt for fs::File {
6868
/// Unix-specific extensions to `Permissions`
6969
#[stable(feature = "fs_ext", since = "1.1.0")]
7070
pub trait PermissionsExt {
71-
/// Returns the underlying raw `mode_t` bits that are the standard Unix
72-
/// permissions for this file.
71+
/// Returns the 12 least significant bits of `st_mode` which are the
72+
/// standard Unix permissions for this file.
7373
///
7474
/// # Examples
7575
///

src/libstd/sys/unix/fs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ pub struct DirBuilder { mode: mode_t }
9595
impl FileAttr {
9696
pub fn size(&self) -> u64 { self.stat.st_size as u64 }
9797
pub fn perm(&self) -> FilePermissions {
98-
FilePermissions { mode: (self.stat.st_mode as mode_t) & 0o777 }
98+
FilePermissions { mode: (self.stat.st_mode as mode_t) & 0o7777 }
9999
}
100100

101101
pub fn file_type(&self) -> FileType {

0 commit comments

Comments
 (0)