Skip to content

Commit a3bd278

Browse files
committed
unpfs: set file times correctly
1 parent 6a00899 commit a3bd278

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

example/unpfs/src/main.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use std::io::{Seek, SeekFrom, Read, Write};
1111
use std::os::unix::prelude::*;
1212
use rs9p::*;
1313
use rs9p::srv::{Fid, Filesystem};
14+
use self::filetime::FileTime;
1415

1516
#[macro_use]
1617
mod utils;
@@ -72,26 +73,26 @@ impl Filesystem for Unpfs {
7273
}
7374

7475
fn rsetattr(&mut self, fid: &mut Fid<Self::Fid>, valid: SetattrMask, stat: &SetAttr) -> Result<Fcall> {
76+
let filepath = &fid.aux().realpath;
7577
if valid.contains(setattr::MODE) {
76-
let perm = PermissionsExt::from_mode(stat.mode);
77-
fs::set_permissions(&fid.aux().realpath, perm)?;
78+
fs::set_permissions(filepath, PermissionsExt::from_mode(stat.mode))?;
7879
}
7980
if valid.intersects(setattr::UID | setattr::GID) {
8081
let uid = if valid.contains(setattr::UID) { Some(stat.uid) } else { None };
8182
let gid = if valid.contains(setattr::GID) { Some(stat.gid) } else { None };
82-
nix::unistd::chown(&fid.aux().realpath, uid, gid)?;
83+
nix::unistd::chown(filepath, uid, gid)?;
8384
}
8485
if valid.contains(setattr::SIZE) {
85-
let _ = fs::File::open(&fid.aux().realpath)?.set_len(stat.size);
86+
let _ = fs::File::open(filepath)?.set_len(stat.size);
8687
}
8788
if valid.intersects(setattr::ATIME_SET | setattr::MTIME_SET) {
8889
let atime = if valid.contains(setattr::ATIME_SET) {
89-
filetime::FileTime::from_seconds_since_1970(stat.atime.sec, stat.atime.nsec as u32)
90-
} else { filetime::FileTime::zero() };
90+
FileTime::from_seconds_since_1970(stat.atime.sec, stat.atime.nsec as u32)
91+
} else { FileTime::from_last_access_time(&fs::metadata(filepath)?) };
9192
let mtime = if valid.contains(setattr::MTIME_SET) {
92-
filetime::FileTime::from_seconds_since_1970(stat.mtime.sec, stat.mtime.nsec as u32)
93-
} else { filetime::FileTime::zero() };
94-
filetime::set_file_times(&fid.aux().realpath, atime, mtime)?
93+
FileTime::from_seconds_since_1970(stat.mtime.sec, stat.mtime.nsec as u32)
94+
} else { FileTime::from_last_modification_time(&fs::metadata(filepath)?) };
95+
filetime::set_file_times(filepath, atime, mtime)?
9596
}
9697
Ok(Fcall::Rsetattr)
9798
}

0 commit comments

Comments
 (0)