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)