Skip to content

Commit 3246e58

Browse files
UnixSocket::write_at(): init
* Implement write_at for unix socket * Fix Buffer::write_data returning (len - 1) instead of (len) * Print the slice len in syslog Signed-off-by: Andy-Python-Programmer <[email protected]>
1 parent f3675c8 commit 3246e58

File tree

4 files changed

+17
-6
lines changed

4 files changed

+17
-6
lines changed

src/aero_kernel/src/fs/ramfs.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ impl INodeInterface for LockedRamINode {
199199
device.write_at(offset, buffer)
200200
}
201201

202-
FileContents::Socket(_) => Err(FileSystemError::NotSupported),
202+
FileContents::Socket(e) => e.write_at(offset, buffer),
203203
FileContents::None => Err(FileSystemError::NotSupported),
204204
}
205205
}
@@ -298,7 +298,7 @@ impl INodeInterface for LockedRamINode {
298298
device.read_at(offset, buffer)
299299
}
300300

301-
FileContents::Socket(_) => Err(FileSystemError::NotSupported),
301+
FileContents::Socket(e) => e.read_at(offset, buffer),
302302
FileContents::None => Err(FileSystemError::NotSupported),
303303
}
304304
}

src/aero_kernel/src/socket/unix.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,19 @@ impl INodeInterface for UnixSocket {
123123
Ok(read)
124124
}
125125

126-
fn write_at(&self, _offset: usize, _buffer: &[u8]) -> Result<usize> {
127-
unimplemented!()
126+
fn write_at(&self, offset: usize, buffer: &[u8]) -> Result<usize> {
127+
let inner = self.inner.lock_irq();
128+
129+
// TODO: Remove the unwrap and return an error instead.
130+
let peer = inner
131+
.peer
132+
.as_ref()
133+
.expect("UnixSocket::write_at(): socket not connected!");
134+
135+
let result = offset + peer.buffer.lock_irq().write_data(buffer);
136+
peer.wq.notify_complete();
137+
138+
Ok(result)
128139
}
129140

130141
fn metadata(&self) -> Result<Metadata> {

src/aero_kernel/src/utils/buffer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ impl Buffer {
5151

5252
pub fn write_data(&mut self, data: &[u8]) -> usize {
5353
self.data.extend_from_slice(data);
54-
data.len() - 1
54+
data.len()
5555
}
5656
}
5757

src/aero_proc/src/syscall.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ pub fn parse(attr: TokenStream, item: TokenStream) -> TokenStream {
119119
if let Some(typ) = typ {
120120
match typ {
121121
ArgType::Array(_) => quote::quote!(.add_argument("<array>")),
122-
ArgType::Slice(_) => quote::quote!(.add_argument("<slice>")),
122+
ArgType::Slice(_) => quote::quote!(.add_argument(alloc::format!("<slice[..{}]>", #ident.len()))),
123123

124124
ArgType::Pointer(_) => {
125125
quote::quote!(.add_argument(alloc::format!("*{:#x}", #ident as usize)))

0 commit comments

Comments
 (0)