|
1 | 1 | use anyhow::{Context, Result}; |
2 | 2 | use mctp::Eid; |
3 | 3 | use mctp_linux::MctpLinuxAsyncReq; |
4 | | -use pldm::control::requester::negotiate_transfer_parameters; |
| 4 | +use pldm::{control::requester::negotiate_transfer_parameters, PldmError}; |
5 | 5 | use pldm_file::{ |
6 | | - client::{df_close, df_open, df_properties, df_read}, |
| 6 | + client::{df_close, df_open, df_properties, df_read_with}, |
7 | 7 | proto::{DfCloseAttributes, DfOpenAttributes, DfProperty, FileIdentifier}, |
8 | 8 | }; |
9 | 9 |
|
@@ -36,8 +36,21 @@ fn main() -> Result<()> { |
36 | 36 |
|
37 | 37 | println!("Open: {fd:?}"); |
38 | 38 |
|
39 | | - let mut buf = vec![0; 4096]; |
40 | | - let res = df_read(&mut req, fd, 0, &mut buf).await; |
| 39 | + let mut buf = Vec::new(); |
| 40 | + let req_len = 4096; |
| 41 | + |
| 42 | + println!("Reading..."); |
| 43 | + let res = df_read_with(&mut req, fd, 0, req_len, |part| { |
| 44 | + println!(" {} bytes", part.len()); |
| 45 | + if buf.len() + part.len() > req_len { |
| 46 | + println!(" data overflow!"); |
| 47 | + Err(PldmError::NoSpace) |
| 48 | + } else { |
| 49 | + buf.extend_from_slice(part); |
| 50 | + Ok(()) |
| 51 | + } |
| 52 | + }) |
| 53 | + .await; |
41 | 54 |
|
42 | 55 | println!("Read: {res:?}"); |
43 | 56 |
|
|
0 commit comments