summaryrefslogtreecommitdiff
path: root/src/fs.rs
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2019-02-02 11:26:18 -0800
committerRyan Dahl <ry@tinyclouds.org>2019-02-02 14:26:18 -0500
commit0b082c4361c63768e5b8610cb22ad7c79e9214aa (patch)
tree7112e5bbe8bde2f316c8d5ef155acee0fa282cfe /src/fs.rs
parent7ecd665ddf9e2a3d04dc5e65c57d05539ecf786d (diff)
Clarify writeFile options and avoid unexpected perm modification (#1643)
Diffstat (limited to 'src/fs.rs')
-rw-r--r--src/fs.rs19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/fs.rs b/src/fs.rs
index 9748cffab..ff0da95e5 100644
--- a/src/fs.rs
+++ b/src/fs.rs
@@ -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())
}