@@ -6,7 +6,7 @@ use alloc::vec::Vec;
6
6
7
7
use async_lock:: Mutex ;
8
8
use async_trait:: async_trait;
9
- use embedded_io:: { ErrorType , Write } ;
9
+ use embedded_io:: { ErrorType , Read , Write } ;
10
10
use memory_addresses:: VirtAddr ;
11
11
use uhyve_interface:: parameters:: {
12
12
CloseParams , LseekParams , OpenParams , ReadParams , UnlinkParams , WriteParams ,
@@ -30,22 +30,6 @@ impl UhyveFileHandleInner {
30
30
Self ( fd)
31
31
}
32
32
33
- fn read ( & mut self , buf : & mut [ u8 ] ) -> io:: Result < usize > {
34
- let mut read_params = ReadParams {
35
- fd : self . 0 ,
36
- buf : GuestVirtAddr :: new ( buf. as_mut_ptr ( ) as u64 ) ,
37
- len : buf. len ( ) ,
38
- ret : 0 ,
39
- } ;
40
- uhyve_hypercall ( Hypercall :: FileRead ( & mut read_params) ) ;
41
-
42
- if read_params. ret >= 0 {
43
- Ok ( read_params. ret . try_into ( ) . unwrap ( ) )
44
- } else {
45
- Err ( Errno :: Io )
46
- }
47
- }
48
-
49
33
fn lseek ( & self , offset : isize , whence : SeekWhence ) -> io:: Result < isize > {
50
34
let mut lseek_params = LseekParams {
51
35
fd : self . 0 ,
@@ -66,6 +50,24 @@ impl ErrorType for UhyveFileHandleInner {
66
50
type Error = Errno ;
67
51
}
68
52
53
+ impl Read for UhyveFileHandleInner {
54
+ fn read ( & mut self , buf : & mut [ u8 ] ) -> Result < usize , Self :: Error > {
55
+ let mut read_params = ReadParams {
56
+ fd : self . 0 ,
57
+ buf : GuestVirtAddr :: new ( buf. as_mut_ptr ( ) as u64 ) ,
58
+ len : buf. len ( ) ,
59
+ ret : 0 ,
60
+ } ;
61
+ uhyve_hypercall ( Hypercall :: FileRead ( & mut read_params) ) ;
62
+
63
+ if read_params. ret >= 0 {
64
+ Ok ( read_params. ret . try_into ( ) . unwrap ( ) )
65
+ } else {
66
+ Err ( Errno :: Io )
67
+ }
68
+ }
69
+ }
70
+
69
71
impl Write for UhyveFileHandleInner {
70
72
fn write ( & mut self , buf : & [ u8 ] ) -> Result < usize , Self :: Error > {
71
73
let write_params = WriteParams {
0 commit comments