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

Function adfWriteRDSKblock

dep/adflib/src/adf_hd.c:731–773  ·  view source on GitHub ↗

* adfWriteRDSKblock * */

Source from the content-addressed store, hash-verified

729 *
730 */
731 RETCODE
732adfWriteRDSKblock(struct Device *dev, struct bRDSKblock* rdsk)
733{
734 uint8_t buf[LOGICAL_BLOCK_SIZE];
735 uint32_t newSum;
736 struct nativeFunctions *nFct;
737 RETCODE rc2, rc = RC_OK;
738
739 if (dev->readOnly) {
740 (*adfEnv.wFct)("adfWriteRDSKblock : can't write block, read only device");
741 return RC_ERROR;
742 }
743
744 memset(buf,0,LOGICAL_BLOCK_SIZE);
745
746 strncpy(rdsk->id,"RDSK",4);
747 rdsk->size = sizeof(struct bRDSKblock)/sizeof(int32_t);
748 rdsk->blockSize = LOGICAL_BLOCK_SIZE;
749 rdsk->badBlockList = -1;
750
751 strncpy(rdsk->diskVendor,"ADFlib ",8);
752 strncpy(rdsk->diskProduct,"harddisk.adf ",16);
753 strncpy(rdsk->diskRevision,"v1.0",4);
754
755 memcpy(buf, rdsk, sizeof(struct bRDSKblock));
756#ifdef LITT_ENDIAN
757 swapEndian(buf, SWBL_RDSK);
758#endif
759
760 newSum = adfNormalSum(buf, 8, LOGICAL_BLOCK_SIZE);
761 swLong(buf+8, newSum);
762
763 nFct = adfEnv.nativeFct;
764 if (dev->isNativeDev)
765 rc2=(*nFct->adfNativeWriteSector)(dev, 0, LOGICAL_BLOCK_SIZE, buf);
766 else
767 rc2=adfWriteDumpSector(dev, 0, LOGICAL_BLOCK_SIZE, buf);
768
769 if (rc2!=RC_OK)
770 return RC_ERROR;
771
772 return rc;
773}
774
775
776/*

Callers 1

adfCreateHdHeaderFunction · 0.85

Calls 4

swapEndianFunction · 0.85
adfNormalSumFunction · 0.85
swLongFunction · 0.85
adfWriteDumpSectorFunction · 0.85

Tested by

no test coverage detected