* adfCreateBitmap * * create bitmap structure in vol */
| 297 | * create bitmap structure in vol |
| 298 | */ |
| 299 | RETCODE 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 | /* |
no test coverage detected