futimens: do not require O_RWONLY/O_RDWR

This commit is contained in:
Ian Douglas Scott
2017-08-14 16:35:03 -07:00
parent fc0af50b97
commit dc5bd70728
2 changed files with 9 additions and 5 deletions
+7 -3
View File
@@ -131,15 +131,17 @@ pub struct FileResource {
block: u64,
flags: usize,
seek: u64,
uid: u32,
}
impl FileResource {
pub fn new(path: String, block: u64, flags: usize, seek: u64) -> FileResource {
pub fn new(path: String, block: u64, flags: usize, seek: u64, uid: u32) -> FileResource {
FileResource {
path: path,
block: block,
flags: flags,
seek: seek,
uid: uid,
}
}
}
@@ -151,6 +153,7 @@ impl Resource for FileResource {
block: self.block,
flags: self.flags,
seek: self.seek,
uid: self.uid,
}))
}
@@ -246,9 +249,10 @@ impl Resource for FileResource {
}
fn utimens(&mut self, times: &[TimeSpec], fs: &mut FileSystem) -> Result<usize> {
if self.flags & O_ACCMODE == O_RDWR || self.flags & O_ACCMODE == O_WRONLY {
let mut node = fs.node(self.block)?;
if node.1.uid == self.uid || self.uid == 0 {
if let Some(mtime) = times.get(1) {
let mut node = fs.node(self.block)?;
node.1.mtime = mtime.tv_sec as u64;
node.1.mtime_nsec = mtime.tv_nsec as u32;
+2 -2
View File
@@ -253,7 +253,7 @@ impl Scheme for FileScheme {
0
};
Box::new(FileResource::new(path.to_string(), node.0, flags, seek))
Box::new(FileResource::new(path.to_string(), node.0, flags, seek, uid))
},
None => if flags & O_CREAT == O_CREAT {
let mut last_part = String::new();
@@ -293,7 +293,7 @@ impl Scheme for FileScheme {
0
};
Box::new(FileResource::new(path.to_string(), node.0, flags, seek))
Box::new(FileResource::new(path.to_string(), node.0, flags, seek, uid))
}
} else {
return Err(Error::new(EPERM));