Read
(&mut self, buffer: &mut [u8])
| 169 | { |
| 170 | // Read |
| 171 | fn read(&mut self, buffer: &mut [u8]) -> Result<usize, ()> |
| 172 | { |
| 173 | let bufferlen = buffer.len(); |
| 174 | let mut address = self.address; |
| 175 | let mut bytes = 0; |
| 176 | let mut pos = 0; |
| 177 | |
| 178 | loop |
| 179 | { |
| 180 | let blk = LinkBlk::read(address); |
| 181 | let data = blk.data(); |
| 182 | let datalen = data.len(); |
| 183 | for i in 0..datalen |
| 184 | { |
| 185 | if pos == self.offset |
| 186 | { |
| 187 | if bytes == bufferlen || pos as usize == self.size() |
| 188 | { |
| 189 | return Ok(bytes); |
| 190 | } |
| 191 | buffer[bytes] = data[i]; |
| 192 | bytes += 1; |
| 193 | self.offset += 1; |
| 194 | } |
| 195 | pos += 1; |
| 196 | } |
| 197 | match blk.next() |
| 198 | { |
| 199 | Some(nextblk) => address = nextblk.address(), |
| 200 | None => return Ok(bytes), |
| 201 | } |
| 202 | } |
| 203 | } |
| 204 | |
| 205 | |
| 206 | // Write |