MCPcopy Create free account
hub / github.com/LibertyOS-Development/kernel / read

Method read

src/fs/file.rs:171–203  ·  view source on GitHub ↗

Read

(&mut self, buffer: &mut [u8])

Source from the content-addressed store, hash-verified

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

Callers 1

read_to_strMethod · 0.45

Calls 6

dataMethod · 0.80
readFunction · 0.70
lenMethod · 0.45
sizeMethod · 0.45
nextMethod · 0.45
addressMethod · 0.45

Tested by

no test coverage detected