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

Function adfWriteFile

dep/adflib/src/adf_file.c:473–518  ·  view source on GitHub ↗

* adfWriteFile * */

Source from the content-addressed store, hash-verified

471 *
472 */
473int32_t adfWriteFile(struct File *file, int32_t n, uint8_t *buffer)
474{
475 int32_t bytesWritten;
476 uint8_t *dataPtr, *bufPtr;
477 int size, blockSize;
478 struct bOFSDataBlock *dataB;
479
480 bytesWritten = 0;
481 if (n==0) return (n);
482/*puts("adfWriteFile");*/
483 blockSize = file->volume->datablockSize;
484 if (isOFS(file->volume->dosType)) {
485 dataB =(struct bOFSDataBlock *)file->currentData;
486 dataPtr = dataB->data;
487 }
488 else
489 dataPtr = file->currentData;
490
491 if (file->pos==0 || file->posInDataBlk==blockSize) {
492 if (adfCreateNextFileBlock(file)==-1) {
493 /* bug found by Rikard */
494 (*adfEnv.wFct)("adfWritefile : no more free sector availbale");
495 return bytesWritten;
496 }
497 file->posInDataBlk = 0;
498 }
499
500 bytesWritten = 0; bufPtr = buffer;
501 while( bytesWritten<n ) {
502 size = min(n-bytesWritten, blockSize-file->posInDataBlk);
503 memcpy(dataPtr+file->posInDataBlk, bufPtr, size);
504 bufPtr += size;
505 file->pos += size;
506 bytesWritten += size;
507 file->posInDataBlk += size;
508 if (file->posInDataBlk==blockSize && bytesWritten<n) {
509 if (adfCreateNextFileBlock(file)==-1) {
510 /* bug found by Rikard */
511 (*adfEnv.wFct)("adfWritefile : no more free sector availbale");
512 return bytesWritten;
513 }
514 file->posInDataBlk = 0;
515 }
516 }
517 return( bytesWritten );
518}
519
520
521/*

Callers 1

putFileMethod · 0.85

Calls 1

adfCreateNextFileBlockFunction · 0.85

Tested by

no test coverage detected