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

Function adfCreateBitmap

dep/adflib/src/adf_bitm.c:299–347  ·  view source on GitHub ↗

* adfCreateBitmap * * create bitmap structure in vol */

Source from the content-addressed store, hash-verified

297 * create bitmap structure in vol
298 */
299RETCODE adfCreateBitmap(struct Volume *vol)
300{
301 int32_t nBlock, mapSize ;
302 int i, j;
303
304 nBlock = vol->lastBlock - vol->firstBlock +1 - 2;
305
306 mapSize = nBlock / (127*32);
307 if ( (nBlock%(127*32))!=0 )
308 mapSize++;
309 vol->bitmapSize = mapSize;
310
311 vol->bitmapTable = (struct bBitmapBlock**)malloc( sizeof(struct bBitmapBlock*)*mapSize );
312 if (!vol->bitmapTable) {
313 (*adfEnv.eFct)("adfCreateBitmap : malloc, vol->bitmapTable");
314 return RC_MALLOC;
315 }
316
317 vol->bitmapBlocksChg = (BOOL*) malloc(sizeof(BOOL)*mapSize);
318 if (!vol->bitmapBlocksChg) {
319 free(vol->bitmapTable);
320 (*adfEnv.eFct)("adfCreateBitmap : malloc, vol->bitmapBlocksChg");
321 return RC_MALLOC;
322 }
323
324 vol->bitmapBlocks = (SECTNUM*) malloc(sizeof(SECTNUM)*mapSize);
325 if (!vol->bitmapBlocks) {
326 free(vol->bitmapTable); free(vol->bitmapBlocksChg);
327 (*adfEnv.eFct)("adfCreateBitmap : malloc, vol->bitmapBlocks");
328 return RC_MALLOC;
329 }
330
331 for(i=0; i<mapSize; i++) {
332 vol->bitmapTable[i] = (struct bBitmapBlock*)malloc(sizeof(struct bBitmapBlock));
333 if (!vol->bitmapTable[i]) {
334 free(vol->bitmapTable); free(vol->bitmapBlocksChg);
335 for(j=0; j<i; j++)
336 free(vol->bitmapTable[j]);
337 free(vol->bitmapTable);
338 (*adfEnv.eFct)("adfCreateBitmap : malloc");
339 return RC_MALLOC;
340 }
341 }
342
343 for(i=vol->firstBlock+2; i<=(vol->lastBlock - vol->firstBlock); i++)
344 adfSetBlockFree(vol, i);
345
346 return RC_OK;
347}
348
349
350/*

Callers 1

adfCreateVolFunction · 0.85

Calls 1

adfSetBlockFreeFunction · 0.85

Tested by

no test coverage detected