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

Function adfWriteNewBitmap

dep/adflib/src/adf_bitm.c:357–436  ·  view source on GitHub ↗

* adfWriteNewBitmap * * write ext blocks and bitmap * * uses vol->bitmapSize, */

Source from the content-addressed store, hash-verified

355 * uses vol->bitmapSize,
356 */
357RETCODE adfWriteNewBitmap(struct Volume *vol)
358{
359 struct bBitmapExtBlock bitme;
360 SECTNUM *bitExtBlock;
361 int n, i, k;
362 int nExtBlock;
363 int nBlock;
364 SECTNUM *sectList;
365 struct bRootBlock root;
366
367 sectList=(SECTNUM*)malloc(sizeof(SECTNUM)*vol->bitmapSize);
368 if (!sectList) {
369 (*adfEnv.eFct)("adfCreateBitmap : sectList");
370 return RC_MALLOC;
371 }
372
373 if (!adfGetFreeBlocks(vol, vol->bitmapSize, sectList)) {
374 free(sectList);
375 return RC_ERROR;
376 }
377
378 if (adfReadRootBlock(vol, vol->rootBlock, &root)!=RC_OK) {
379 free(sectList);
380 return RC_ERROR;
381 }
382 nBlock = 0;
383 n = min( vol->bitmapSize, BM_SIZE );
384 for(i=0; i<n; i++) {
385 root.bmPages[i] = vol->bitmapBlocks[i] = sectList[i];
386 }
387 nBlock = n;
388
389 /* for devices with more than 25*127 blocks == hards disks */
390 if (vol->bitmapSize>BM_SIZE) {
391
392 nExtBlock = (vol->bitmapSize-BM_SIZE)/127;
393 if ((vol->bitmapSize-BM_SIZE)%127)
394 nExtBlock++;
395
396 bitExtBlock=(SECTNUM*)malloc(sizeof(SECTNUM)*nExtBlock);
397 if (!bitExtBlock) {
398 free(sectList);
399 adfEnv.eFct("adfWriteNewBitmap : malloc failed");
400 return RC_MALLOC;
401 }
402
403 if (!adfGetFreeBlocks(vol, nExtBlock, bitExtBlock)) {
404 free(sectList); free(bitExtBlock);
405 return RC_MALLOC;
406 }
407
408 k = 0;
409 root.bmExt = bitExtBlock[ k ];
410 while( nBlock<vol->bitmapSize ) {
411 i=0;
412 while( i<127 && nBlock<vol->bitmapSize ) {
413 bitme.bmPages[i] = vol->bitmapBlocks[nBlock] = sectList[i];
414 i++;

Callers 1

adfCreateVolFunction · 0.85

Calls 4

adfGetFreeBlocksFunction · 0.85
adfReadRootBlockFunction · 0.85
adfWriteBitmapExtBlockFunction · 0.85
adfWriteRootBlockFunction · 0.85

Tested by

no test coverage detected