MCPcopy Create free account
hub / github.com/davidgiven/fluxengine / adfReadFile

Function adfReadFile

dep/adflib/src/adf_file.c:369–407  ·  view source on GitHub ↗

* adfReadFile * */

Source from the content-addressed store, hash-verified

367 *
368 */
369int32_t adfReadFile(struct File* file, int32_t n, uint8_t *buffer)
370{
371 int32_t bytesRead;
372 uint8_t *dataPtr, *bufPtr;
373 int blockSize, size;
374
375 if (n==0) return(n);
376 blockSize = file->volume->datablockSize;
377/*puts("adfReadFile");*/
378 if (file->pos+n > file->fileHdr->byteSize)
379 n = file->fileHdr->byteSize - file->pos;
380
381 if (isOFS(file->volume->dosType))
382 dataPtr = (uint8_t*)(file->currentData)+24;
383 else
384 dataPtr = file->currentData;
385
386 if (file->pos==0 || file->posInDataBlk==blockSize) {
387 adfReadNextFileBlock(file);
388 file->posInDataBlk = 0;
389 }
390
391 bytesRead = 0; bufPtr = buffer;
392 size = 0;
393 while ( bytesRead < n ) {
394 size = min(n-bytesRead, blockSize-file->posInDataBlk);
395 memcpy(bufPtr, dataPtr+file->posInDataBlk, size);
396 bufPtr += size;
397 file->pos += size;
398 bytesRead += size;
399 file->posInDataBlk += size;
400 if (file->posInDataBlk==blockSize && bytesRead<n) {
401 adfReadNextFileBlock(file);
402 file->posInDataBlk = 0;
403 }
404 }
405 file->eof = (file->pos==file->fileHdr->byteSize);
406 return( bytesRead );
407}
408
409
410/*

Callers 1

getFileMethod · 0.85

Calls 1

adfReadNextFileBlockFunction · 0.85

Tested by

no test coverage detected