1
0
mirror of https://github.com/rcore-os/rCore.git synced 2024-11-25 09:26:17 +04:00

record time in metadata

This commit is contained in:
function2-llx 2020-04-26 02:04:09 +08:00
parent ff9b0cc303
commit 6e5e91a10a
4 changed files with 44 additions and 26 deletions

38
kernel/Cargo.lock generated
View File

@ -358,11 +358,11 @@ dependencies = [
"raw-cpuid 7.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"rboot 0.1.2",
"rcore-console 0.1.0 (git+https://github.com/rcore-os/rcore-console?rev=b7bacf9)",
"rcore-fs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs-devfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs-mountfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs-ramfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs-sfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"rcore-fs-devfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"rcore-fs-mountfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"rcore-fs-ramfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"rcore-fs-sfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"rcore-memory 0.1.0",
"rcore-thread 0.1.0 (git+https://github.com/function2-llx/rcore-thread?rev=8c1022d)",
"riscv 0.5.0 (git+https://github.com/rcore-os/riscv)",
@ -388,7 +388,7 @@ dependencies = [
[[package]]
name = "rcore-fs"
version = "0.1.0"
source = "git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a#7e7c74a921803d6c8edc99b8ebb6fc85774819b9"
source = "git+https://github.com/function2-llx/rcore-fs?rev=837a298#837a298e2d09690b005258479cc1ad3173f0ac40"
dependencies = [
"filetime 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
"spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
@ -398,42 +398,42 @@ dependencies = [
[[package]]
name = "rcore-fs-devfs"
version = "0.1.0"
source = "git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a#7e7c74a921803d6c8edc99b8ebb6fc85774819b9"
source = "git+https://github.com/function2-llx/rcore-fs?rev=837a298#837a298e2d09690b005258479cc1ad3173f0ac40"
dependencies = [
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rcore-fs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rcore-fs-mountfs"
version = "0.1.0"
source = "git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a#7e7c74a921803d6c8edc99b8ebb6fc85774819b9"
source = "git+https://github.com/function2-llx/rcore-fs?rev=837a298#837a298e2d09690b005258479cc1ad3173f0ac40"
dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rcore-fs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rcore-fs-ramfs"
version = "0.1.0"
source = "git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a#7e7c74a921803d6c8edc99b8ebb6fc85774819b9"
source = "git+https://github.com/function2-llx/rcore-fs?rev=837a298#837a298e2d09690b005258479cc1ad3173f0ac40"
dependencies = [
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rcore-fs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rcore-fs-sfs"
version = "0.1.0"
source = "git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a#7e7c74a921803d6c8edc99b8ebb6fc85774819b9"
source = "git+https://github.com/function2-llx/rcore-fs?rev=837a298#837a298e2d09690b005258479cc1ad3173f0ac40"
dependencies = [
"bitvec 0.17.4 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rcore-fs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)",
"rcore-fs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)",
"spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -743,11 +743,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum raw-cpuid 6.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "30a9d219c32c9132f7be513c18be77c9881c7107d2ab5569d205a6a0f0e6dc7d"
"checksum raw-cpuid 7.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b4a349ca83373cfa5d6dbb66fd76e58b2cca08da71a5f6400de0a0a6a9bceeaf"
"checksum rcore-console 0.1.0 (git+https://github.com/rcore-os/rcore-console?rev=b7bacf9)" = "<none>"
"checksum rcore-fs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)" = "<none>"
"checksum rcore-fs-devfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)" = "<none>"
"checksum rcore-fs-mountfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)" = "<none>"
"checksum rcore-fs-ramfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)" = "<none>"
"checksum rcore-fs-sfs 0.1.0 (git+https://github.com/rcore-os/rcore-fs?rev=7e7c74a)" = "<none>"
"checksum rcore-fs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)" = "<none>"
"checksum rcore-fs-devfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)" = "<none>"
"checksum rcore-fs-mountfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)" = "<none>"
"checksum rcore-fs-ramfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)" = "<none>"
"checksum rcore-fs-sfs 0.1.0 (git+https://github.com/function2-llx/rcore-fs?rev=837a298)" = "<none>"
"checksum rcore-thread 0.1.0 (git+https://github.com/function2-llx/rcore-thread?rev=8c1022d)" = "<none>"
"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
"checksum register 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e10f31b6d2299e5620986ad9fcdd66463e125ad72af4f403f9aedf7592d5ccdb"

View File

@ -66,11 +66,11 @@ bitmap-allocator = { git = "https://github.com/rcore-os/bitmap-allocator" }
rcore-console = { git = "https://github.com/rcore-os/rcore-console", rev = "b7bacf9", default-features = false }
rcore-memory = { path = "../crate/memory" }
rcore-thread = { git = "https://github.com/function2-llx/rcore-thread", rev = "8c1022d" }
rcore-fs = { git = "https://github.com/rcore-os/rcore-fs", rev = "7e7c74a" }
rcore-fs-sfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "7e7c74a" }
rcore-fs-ramfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "7e7c74a" }
rcore-fs-mountfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "7e7c74a" }
rcore-fs-devfs = { git = "https://github.com/rcore-os/rcore-fs", rev = "7e7c74a" }
rcore-fs = { git = "https://github.com/function2-llx/rcore-fs", rev = "837a298" }
rcore-fs-sfs = { git = "https://github.com/function2-llx/rcore-fs", rev = "837a298" }
rcore-fs-ramfs = { git = "https://github.com/function2-llx/rcore-fs", rev = "837a298" }
rcore-fs-mountfs = { git = "https://github.com/function2-llx/rcore-fs", rev = "837a298" }
rcore-fs-devfs = { git = "https://github.com/function2-llx/rcore-fs", rev = "837a298" }
compression = { version = "0.1.4", default-features = false, features = ["gzip"] }

View File

@ -563,7 +563,14 @@ impl Syscall<'_> {
file_inode
}
Err(FsError::EntryNotFound) => {
dir_inode.create(file_name, FileType::File, mode as u32)?
let inode = dir_inode.create(file_name, FileType::File, mode as u32)?;
let mut metadata = inode.metadata()?;
let now = TimeSpec::get_epoch().into();
metadata.atime = now;
metadata.mtime = now;
metadata.ctime = now;
inode.set_metadata(&metadata)?;
inode
}
Err(e) => return Err(SysError::from(e)),
}
@ -650,7 +657,8 @@ impl Syscall<'_> {
let mut proc = self.process();
let stat_ref = unsafe { self.vm().check_write_ptr(stat_ptr)? };
let file = proc.get_file(fd)?;
let stat = Stat::from(file.metadata()?);
let metadata = file.metadata()?;
let stat = Stat::from(metadata);
*stat_ref = stat;
Ok(0)
}

View File

@ -4,6 +4,7 @@ use super::*;
use crate::consts::USEC_PER_TICK;
use core::time::Duration;
use lazy_static::lazy_static;
use rcore_fs::vfs::Timespec;
impl Syscall<'_> {
pub fn sys_gettimeofday(&mut self, tv: *mut TimeVal, tz: *const u8) -> SysResult {
@ -151,6 +152,15 @@ impl TimeSpec {
}
}
impl Into<Timespec> for TimeSpec {
fn into(self) -> Timespec {
Timespec {
sec: self.sec as i64,
nsec: self.nsec as i32,
}
}
}
// ignore other fields for now
#[repr(C)]
pub struct RUsage {