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

Function adfReadBitmap

dep/adflib/src/adf_bitm.c:98–178  ·  view source on GitHub ↗

* adfReadBitmap * */

Source from the content-addressed store, hash-verified

96 *
97 */
98RETCODE adfReadBitmap(struct Volume* vol, int32_t nBlock, struct bRootBlock* root)
99{
100 int32_t mapSize, nSect;
101 int32_t j, i;
102 struct bBitmapExtBlock bmExt;
103
104 mapSize = nBlock / (127*32);
105 if ( (nBlock%(127*32))!=0 )
106 mapSize++;
107 vol->bitmapSize = mapSize;
108
109 vol->bitmapTable = (struct bBitmapBlock**) malloc(sizeof(struct bBitmapBlock*)*mapSize);
110 if (!vol->bitmapTable) {
111 (*adfEnv.eFct)("adfReadBitmap : malloc, vol->bitmapTable");
112 return RC_MALLOC;
113 }
114 vol->bitmapBlocks = (SECTNUM*) malloc(sizeof(SECTNUM)*mapSize);
115 if (!vol->bitmapBlocks) {
116 free(vol->bitmapTable);
117 (*adfEnv.eFct)("adfReadBitmap : malloc, vol->bitmapBlocks");
118 return RC_MALLOC;
119 }
120 vol->bitmapBlocksChg = (BOOL*) malloc(sizeof(BOOL)*mapSize);
121 if (!vol->bitmapBlocksChg) {
122 free(vol->bitmapTable); free(vol->bitmapBlocks);
123 (*adfEnv.eFct)("adfReadBitmap : malloc, vol->bitmapBlocks");
124 return RC_MALLOC;
125 }
126 for(i=0; i<mapSize; i++) {
127 vol->bitmapBlocksChg[i] = FALSE;
128
129 vol->bitmapTable[i] = (struct bBitmapBlock*)malloc(sizeof(struct bBitmapBlock));
130 if (!vol->bitmapTable[i]) {
131 free(vol->bitmapBlocksChg); free(vol->bitmapBlocks);
132 for(j=0; j<i; j++)
133 free(vol->bitmapTable[j]);
134 free(vol->bitmapTable);
135 (*adfEnv.eFct)("adfReadBitmap : malloc, vol->bitmapBlocks");
136 return RC_MALLOC;
137 }
138 }
139
140 j=0; i=0;
141 /* bitmap pointers in rootblock : 0 <= i <BM_SIZE */
142 while(i<BM_SIZE && root->bmPages[i]!=0) {
143 vol->bitmapBlocks[j] = nSect = root->bmPages[i];
144 if ( !isSectNumValid(vol,nSect) ) {
145 (*adfEnv.wFct)("adfReadBitmap : sector out of range");
146 }
147
148 if (adfReadBitmapBlock(vol, nSect, vol->bitmapTable[j])!=RC_OK) {
149 adfFreeBitmap(vol);
150 return RC_ERROR;
151 }
152 j++; i++;
153 }
154 nSect = root->bmExt;
155 while(nSect!=0) {

Callers 1

adfMountFunction · 0.85

Calls 4

isSectNumValidFunction · 0.85
adfReadBitmapBlockFunction · 0.85
adfFreeBitmapFunction · 0.85
adfReadBitmapExtBlockFunction · 0.85

Tested by

no test coverage detected