diff --git a/kernel/src/device/null.rs b/kernel/src/device/null.rs index b5e9d257..69730356 100644 --- a/kernel/src/device/null.rs +++ b/kernel/src/device/null.rs @@ -16,6 +16,10 @@ impl Device for Null { // Same value with Linux DeviceId::new(1, 3) } + + fn open(&self) -> Result>> { + Ok(Some(Arc::new(Null))) + } } impl FileIo for Null { diff --git a/kernel/src/device/random.rs b/kernel/src/device/random.rs index 672cd502..0065ee63 100644 --- a/kernel/src/device/random.rs +++ b/kernel/src/device/random.rs @@ -31,6 +31,10 @@ impl Device for Random { // The same value as Linux DeviceId::new(1, 8) } + + fn open(&self) -> Result>> { + Ok(Some(Arc::new(Random))) + } } impl FileIo for Random { diff --git a/kernel/src/device/urandom.rs b/kernel/src/device/urandom.rs index 188e2ca7..c3b4d8aa 100644 --- a/kernel/src/device/urandom.rs +++ b/kernel/src/device/urandom.rs @@ -31,6 +31,10 @@ impl Device for Urandom { // The same value as Linux DeviceId::new(1, 9) } + + fn open(&self) -> Result>> { + Ok(Some(Arc::new(Urandom))) + } } impl FileIo for Urandom { diff --git a/kernel/src/device/zero.rs b/kernel/src/device/zero.rs index 51449ead..bd038eda 100644 --- a/kernel/src/device/zero.rs +++ b/kernel/src/device/zero.rs @@ -16,6 +16,10 @@ impl Device for Zero { // Same value with Linux DeviceId::new(1, 5) } + + fn open(&self) -> Result>> { + Ok(Some(Arc::new(Zero))) + } } impl FileIo for Zero { diff --git a/kernel/src/fs/inode_handle/mod.rs b/kernel/src/fs/inode_handle/mod.rs index 10af3e26..d06d1e84 100644 --- a/kernel/src/fs/inode_handle/mod.rs +++ b/kernel/src/fs/inode_handle/mod.rs @@ -98,12 +98,13 @@ impl InodeHandle_ { todo!("support write_at for FileIo"); } - if self.status_flags().contains(StatusFlags::O_APPEND) { + let status_flags = self.status_flags(); + if status_flags.contains(StatusFlags::O_APPEND) { // If the file has the O_APPEND flag, the offset is ignored offset = self.dentry.size(); } - if self.status_flags().contains(StatusFlags::O_DIRECT) { + if status_flags.contains(StatusFlags::O_DIRECT) { self.dentry.inode().write_direct_at(offset, reader) } else { self.dentry.inode().write_at(offset, reader)