diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2019-02-02 11:26:18 -0800 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2019-02-02 14:26:18 -0500 |
commit | 0b082c4361c63768e5b8610cb22ad7c79e9214aa (patch) | |
tree | 7112e5bbe8bde2f316c8d5ef155acee0fa282cfe /src/fs.rs | |
parent | 7ecd665ddf9e2a3d04dc5e65c57d05539ecf786d (diff) |
Clarify writeFile options and avoid unexpected perm modification (#1643)
Diffstat (limited to 'src/fs.rs')
-rw-r--r-- | src/fs.rs | 19 |
1 files changed, 16 insertions, 3 deletions
@@ -18,16 +18,29 @@ pub fn write_file<T: AsRef<[u8]>>( data: T, perm: u32, ) -> std::io::Result<()> { - let is_append = perm & (1 << 31) != 0; + write_file_2(filename, data, true, perm, true, false) +} + +pub fn write_file_2<T: AsRef<[u8]>>( + filename: &Path, + data: T, + update_perm: bool, + perm: u32, + is_create: bool, + is_append: bool, +) -> std::io::Result<()> { let mut file = OpenOptions::new() .read(false) .write(true) .append(is_append) .truncate(!is_append) - .create(true) + .create(is_create) .open(filename)?; - set_permissions(&mut file, perm)?; + if update_perm { + set_permissions(&mut file, perm)?; + } + file.write_all(data.as_ref()) } |