Skip to content

Commit bf0f496

Browse files
fix: read and recv
Handles were stored on open(). Obvious that this is wrong as with other fd pointing to the same file would be different. This was totally wrong. Pass open flags for now as thats what we need. May pass &fd or smth in the future. Signed-off-by: Anhad Singh <[email protected]>
1 parent 515bd5b commit bf0f496

File tree

21 files changed

+114
-96
lines changed

21 files changed

+114
-96
lines changed

src/aero_kernel/src/drivers/keyboard.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
// You should have received a copy of the GNU General Public License
1616
// along with Aero. If not, see <https://www.gnu.org/licenses/>.
1717

18+
use aero_syscall::OpenFlags;
1819
use alloc::sync::{Arc, Weak};
1920
use alloc::vec::Vec;
2021
use spin::RwLock;
@@ -228,7 +229,7 @@ impl KeyboardListener for KeyboardDevice {
228229
}
229230

230231
impl INodeInterface for KeyboardDevice {
231-
fn read_at(&self, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
232+
fn read_at(&self, _flags: OpenFlags, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
232233
if self.buffer.lock_irq().is_empty() {
233234
return Ok(0);
234235
}

src/aero_kernel/src/drivers/mouse.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
// You should have received a copy of the GNU General Public License
1616
// along with Aero. If not, see <https://www.gnu.org/licenses/>.
1717

18+
use aero_syscall::OpenFlags;
1819
use alloc::sync::Arc;
1920
use alloc::vec::Vec;
2021

@@ -137,7 +138,7 @@ impl Device for Mouse {
137138
}
138139

139140
impl INodeInterface for Mouse {
140-
fn read_at(&self, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
141+
fn read_at(&self, _flags: OpenFlags, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
141142
let size = core::mem::size_of::<Packet>();
142143

143144
if buffer.len() < size {

src/aero_kernel/src/drivers/pty.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717

1818
use core::sync::atomic::{AtomicU32, Ordering};
1919

20-
use aero_syscall as libc;
21-
use aero_syscall::{Termios, WinSize};
20+
use aero_syscall::{self as libc, OpenFlags, Termios, WinSize};
2221

2322
use alloc::collections::BTreeMap;
2423
use alloc::string::ToString;
@@ -128,7 +127,7 @@ impl Master {
128127
}
129128

130129
impl INodeInterface for Master {
131-
fn read_at(&self, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
130+
fn read_at(&self, _flags: OpenFlags, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
132131
let mut pty_buffer = self.buffer.lock_irq();
133132

134133
if pty_buffer.is_empty() {
@@ -280,7 +279,7 @@ impl INodeInterface for Slave {
280279
Ok(flags)
281280
}
282281

283-
fn read_at(&self, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
282+
fn read_at(&self, _flags: OpenFlags, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
284283
Ok(self.master.discipline.read(buffer)?)
285284
}
286285

src/aero_kernel/src/drivers/tty/ctty.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
//! `/dev/tty`: Controlling terminal of the current process.
1919
20-
use aero_syscall::TIOCNOTTY;
20+
use aero_syscall::{OpenFlags, TIOCNOTTY};
2121
use alloc::sync::{Arc, Weak};
2222

2323
use crate::fs::devfs::Device;
@@ -64,8 +64,8 @@ impl INodeInterface for Ctty {
6464
})
6565
}
6666

67-
fn read_at(&self, offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
68-
Self::controlling_terminal()?.read_at(offset, buffer)
67+
fn read_at(&self, flags: OpenFlags, offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
68+
Self::controlling_terminal()?.read_at(flags, offset, buffer)
6969
}
7070

7171
fn write_at(&self, offset: usize, buffer: &[u8]) -> fs::Result<usize> {

src/aero_kernel/src/drivers/tty/vtty.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
2020
use core::sync::atomic::{AtomicUsize, Ordering};
2121

22+
use aero_syscall::OpenFlags;
2223
use alloc::sync::{Arc, Weak};
2324
use alloc::vec::Vec;
2425

@@ -246,7 +247,7 @@ impl INodeInterface for Tty {
246247
self.connected.fetch_sub(1, Ordering::SeqCst);
247248
}
248249

249-
fn read_at(&self, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
250+
fn read_at(&self, _flags: OpenFlags, _offset: usize, buffer: &mut [u8]) -> fs::Result<usize> {
250251
self.block_queue
251252
.block_on(&self.stdin, |future| future.is_complete())?;
252253

src/aero_kernel/src/fs/devfs.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ use super::ramfs::RamFs;
3636
use super::{FileSystem, FileSystemError, Result, MOUNT_MANAGER};
3737

3838
use aero_syscall::prelude::*;
39-
use aero_syscall::MMapFlags;
39+
use aero_syscall::{MMapFlags, OpenFlags};
4040

4141
lazy_static::lazy_static! {
4242
pub static ref DEV_FILESYSTEM: Arc<DevFs> = DevFs::new();
@@ -113,8 +113,8 @@ impl INodeInterface for DevINode {
113113
self.0.inode().write_at(offset, buffer)
114114
}
115115

116-
fn read_at(&self, offset: usize, buffer: &mut [u8]) -> Result<usize> {
117-
self.0.inode().read_at(offset, buffer)
116+
fn read_at(&self, flags: OpenFlags, offset: usize, buffer: &mut [u8]) -> Result<usize> {
117+
self.0.inode().read_at(flags, offset, buffer)
118118
}
119119

120120
fn mmap(&self, offset: usize, size: usize, flags: MMapFlags) -> Result<PhysFrame> {
@@ -178,7 +178,7 @@ impl Device for DevNull {
178178
}
179179

180180
impl INodeInterface for DevNull {
181-
fn read_at(&self, _offset: usize, _buffer: &mut [u8]) -> Result<usize> {
181+
fn read_at(&self, _flags: OpenFlags, _offset: usize, _buffer: &mut [u8]) -> Result<usize> {
182182
Ok(0x00)
183183
}
184184

@@ -214,7 +214,7 @@ impl Device for DevKmsg {
214214
}
215215

216216
impl INodeInterface for DevKmsg {
217-
fn read_at(&self, offset: usize, buffer: &mut [u8]) -> Result<usize> {
217+
fn read_at(&self, _flags: OpenFlags, offset: usize, buffer: &mut [u8]) -> Result<usize> {
218218
let buf = logger::get_log_buffer();
219219

220220
let size = core::cmp::min(buffer.len(), buf.len());
@@ -448,7 +448,7 @@ impl Device for DevUrandom {
448448
}
449449

450450
impl INodeInterface for DevUrandom {
451-
fn read_at(&self, _offset: usize, buffer: &mut [u8]) -> Result<usize> {
451+
fn read_at(&self, _flags: OpenFlags, _offset: usize, buffer: &mut [u8]) -> Result<usize> {
452452
for (_, b) in buffer.iter_mut().enumerate() {
453453
*b = 0;
454454
}

src/aero_kernel/src/fs/eventfd.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@ impl INodeInterface for EventFd {
5454
Ok(None)
5555
}
5656

57-
fn read_at(&self, _offset: usize, buffer: &mut [u8]) -> super::Result<usize> {
57+
fn read_at(
58+
&self,
59+
_flags: OpenFlags,
60+
_offset: usize,
61+
buffer: &mut [u8],
62+
) -> super::Result<usize> {
5863
let size = core::mem::size_of::<u64>();
5964
assert!(buffer.len() >= size);
6065

src/aero_kernel/src/fs/ext2/mod.rs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ mod group_desc;
2121
use core::mem::MaybeUninit;
2222

2323
use aero_syscall::socket::{MessageFlags, MessageHeader};
24-
use aero_syscall::{MMapFlags, SyscallError};
24+
use aero_syscall::{MMapFlags, OpenFlags, SyscallError};
2525
use alloc::boxed::Box;
2626
use alloc::string::ToString;
2727
use alloc::sync::{Arc, Weak};
@@ -364,7 +364,7 @@ impl CachedAccess for INode {
364364
}
365365

366366
fn read_direct(&self, offset: usize, dest: PhysFrame) -> Option<usize> {
367-
INodeInterface::read_at(self, offset, dest.as_slice_mut()).ok()
367+
INodeInterface::read_at(self, OpenFlags::empty(), offset, dest.as_slice_mut()).ok()
368368
}
369369

370370
fn write_direct(&self, offset: usize, src: PhysFrame) -> Option<usize> {
@@ -440,9 +440,14 @@ impl INodeInterface for INode {
440440
Ok(self.make_dirent(parent, entry.name(), entry).unwrap())
441441
}
442442

443-
fn read_at(&self, offset: usize, usr_buffer: &mut [u8]) -> super::Result<usize> {
443+
fn read_at(
444+
&self,
445+
flags: OpenFlags,
446+
offset: usize,
447+
usr_buffer: &mut [u8],
448+
) -> super::Result<usize> {
444449
if let Some(proxy) = self.proxy.as_ref() {
445-
return proxy.read_at(offset, usr_buffer);
450+
return proxy.read_at(flags, offset, usr_buffer);
446451
}
447452

448453
if !self.metadata()?.is_file() {
@@ -596,7 +601,7 @@ impl INodeInterface for INode {
596601
private_cp.as_slice_mut().fill(0);
597602

598603
let buffer = &mut private_cp.as_slice_mut()[..size];
599-
self.read_at(offset, buffer)?;
604+
self.read_at(OpenFlags::empty(), offset, buffer)?;
600605

601606
Ok(private_cp)
602607
}
@@ -644,9 +649,14 @@ impl INodeInterface for INode {
644649
}
645650
}
646651

647-
fn recv(&self, message_hdr: &mut MessageHeader, flags: MessageFlags) -> super::Result<usize> {
652+
fn recv(
653+
&self,
654+
fd_flags: OpenFlags,
655+
message_hdr: &mut MessageHeader,
656+
flags: MessageFlags,
657+
) -> super::Result<usize> {
648658
if let Some(proxy) = self.proxy.as_ref() {
649-
proxy.recv(message_hdr, flags)
659+
proxy.recv(fd_flags, message_hdr, flags)
650660
} else {
651661
Err(FileSystemError::NotSupported)
652662
}

src/aero_kernel/src/fs/file_table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ impl FileHandle {
8181

8282
pub fn read(&self, buffer: &mut [u8]) -> super::Result<usize> {
8383
let offset = self.offset.load(Ordering::SeqCst);
84-
let new_offset = self.inode.inode().read_at(offset, buffer)?;
84+
let new_offset = self.inode.inode().read_at(self.flags(), offset, buffer)?;
8585

8686
self.offset.fetch_add(new_offset, Ordering::SeqCst);
8787
Ok(new_offset)

src/aero_kernel/src/fs/inode.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ pub trait INodeInterface: Send + Sync {
137137
}
138138

139139
/// Read at the provided `offset` to the given `buffer`.
140-
fn read_at(&self, _offset: usize, _buffer: &mut [u8]) -> Result<usize> {
140+
fn read_at(&self, _flags: OpenFlags, _offset: usize, _buffer: &mut [u8]) -> Result<usize> {
141141
Err(FileSystemError::NotSupported)
142142
}
143143

@@ -269,7 +269,12 @@ pub trait INodeInterface: Send + Sync {
269269
Err(FileSystemError::NotSupported)
270270
}
271271

272-
fn recv(&self, _message_hdr: &mut MessageHeader, _flags: MessageFlags) -> Result<usize> {
272+
fn recv(
273+
&self,
274+
_fd_flags: OpenFlags,
275+
_message_hdr: &mut MessageHeader,
276+
_flags: MessageFlags,
277+
) -> Result<usize> {
273278
Err(FileSystemError::NotSocket)
274279
}
275280

0 commit comments

Comments
 (0)