@@ -27,8 +27,11 @@ pub(crate) async fn read_uring(path: &Path) -> io::Result<Vec<u8>> {
2727 . expect ( "unexpected in-flight operation detected" )
2828 . into ( ) ;
2929
30- // extra single capacity for the whole size to fit without any reallocation
31- let buf = Vec :: with_capacity ( size_hint. unwrap_or ( 0 ) ) ;
30+ let mut buf = Vec :: new ( ) ;
31+
32+ if let Some ( size_hint) = size_hint {
33+ buf. try_reserve ( size_hint) ?;
34+ }
3235
3336 read_to_end_uring ( size_hint, fd, buf) . await
3437}
@@ -67,7 +70,6 @@ async fn read_to_end_uring(
6770
6871 buf = r_buf;
6972 fd = r_fd;
70- offset += size_read as u64 ;
7173 }
7274
7375 // buf is full, need more capacity
@@ -79,11 +81,11 @@ async fn read_to_end_uring(
7981 let buf_len = usize:: min ( buf. spare_capacity_mut ( ) . len ( ) , MAX_READ_SIZE ) ;
8082
8183 // buf_len cannot be greater than u32::MAX because MAX_READ_SIZE
82- // is u32::MAX
83- let mut read_len = buf_len as u32 ;
84+ // is less than u32::MAX
85+ let read_len = buf_len as u32 ;
8486
8587 // read into spare capacity
86- let ( size_read, r_fd, r_buf) = op_read ( fd, buf, & mut offset, & mut read_len) . await ?;
88+ let ( size_read, r_fd, r_buf) = op_read ( fd, buf, & mut offset, read_len) . await ?;
8789
8890 if size_read == 0 {
8991 return Ok ( r_buf) ;
@@ -99,12 +101,12 @@ async fn small_probe_read(
99101 mut buf : Vec < u8 > ,
100102 offset : & mut u64 ,
101103) -> io:: Result < ( u32 , OwnedFd , Vec < u8 > ) > {
102- let mut read_len = PROBE_SIZE_U32 ;
104+ let read_len = PROBE_SIZE_U32 ;
103105
104106 if buf. len ( ) < PROBE_SIZE {
105107 buf. try_reserve ( PROBE_SIZE ) ?;
106108
107- return op_read ( fd, buf, offset, & mut read_len) . await ;
109+ return op_read ( fd, buf, offset, read_len) . await ;
108110 }
109111
110112 let mut temp_arr = [ 0 ; PROBE_SIZE ] ;
@@ -116,8 +118,9 @@ async fn small_probe_read(
116118 // than PROBE_SIZE. So we can read into the discarded length
117119 buf. truncate ( back_bytes_len) ;
118120
119- let ( size_read, r_fd, mut r_buf) = op_read ( fd, buf, offset, & mut read_len) . await ?;
121+ let ( size_read, r_fd, mut r_buf) = op_read ( fd, buf, offset, read_len) . await ?;
120122
123+ r_buf. try_reserve ( PROBE_SIZE ) ?;
121124 r_buf. splice ( back_bytes_len..back_bytes_len, temp_arr) ;
122125
123126 Ok ( ( size_read, r_fd, r_buf) )
@@ -127,10 +130,10 @@ async fn op_read(
127130 mut fd : OwnedFd ,
128131 mut buf : Vec < u8 > ,
129132 offset : & mut u64 ,
130- read_len : & mut u32 ,
133+ mut read_len : u32 ,
131134) -> io:: Result < ( u32 , OwnedFd , Vec < u8 > ) > {
132135 loop {
133- let ( res, r_fd, r_buf) = Op :: read ( fd, buf, * read_len, * offset) . await ;
136+ let ( res, r_fd, r_buf) = Op :: read ( fd, buf, read_len, * offset) . await ;
134137
135138 match res {
136139 Err ( e) if e. kind ( ) == ErrorKind :: Interrupted => {
@@ -140,9 +143,9 @@ async fn op_read(
140143 Err ( e) => return Err ( e) ,
141144 Ok ( size_read) => {
142145 * offset += size_read as u64 ;
143- * read_len -= size_read;
146+ read_len -= size_read;
144147
145- if * read_len == 0 || size_read == 0 {
148+ if read_len == 0 || size_read == 0 {
146149 return Ok ( ( size_read, r_fd, r_buf) ) ;
147150 }
148151
0 commit comments