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

Function adfGetFileBlocks

dep/adflib/src/adf_file.c:96–138  ·  view source on GitHub ↗

* adfGetFileBlocks * */

Source from the content-addressed store, hash-verified

94 *
95 */
96RETCODE adfGetFileBlocks(struct Volume* vol, struct bFileHeaderBlock* entry,
97 struct FileBlocks* fileBlocks)
98{
99 int32_t n, m;
100 SECTNUM nSect;
101 struct bFileExtBlock extBlock;
102 int32_t i;
103
104 fileBlocks->header = entry->headerKey;
105 adfFileRealSize( entry->byteSize, vol->datablockSize,
106 &(fileBlocks->nbData), &(fileBlocks->nbExtens) );
107
108 fileBlocks->data=(SECTNUM*)malloc(fileBlocks->nbData * sizeof(SECTNUM));
109 if (!fileBlocks->data) {
110 (*adfEnv.eFct)("adfGetFileBlocks : malloc");
111 return RC_MALLOC;
112 }
113
114 fileBlocks->extens=(SECTNUM*)malloc(fileBlocks->nbExtens * sizeof(SECTNUM));
115 if (!fileBlocks->extens) {
116 (*adfEnv.eFct)("adfGetFileBlocks : malloc");
117 return RC_MALLOC;
118 }
119
120 n = m = 0;
121 /* in file header block */
122 for(i=0; i<entry->highSeq; i++)
123 fileBlocks->data[n++] = entry->dataBlocks[MAX_DATABLK-1-i];
124
125 /* in file extension blocks */
126 nSect = entry->extension;
127 while(nSect!=0) {
128 fileBlocks->extens[m++] = nSect;
129 adfReadFileExtBlock(vol, nSect, &extBlock);
130 for(i=0; i<extBlock.highSeq; i++)
131 fileBlocks->data[n++] = extBlock.dataBlocks[MAX_DATABLK-1-i];
132 nSect = extBlock.extension;
133 }
134 if ( (fileBlocks->nbExtens+fileBlocks->nbData) != (n+m) )
135 (*adfEnv.wFct)("adfGetFileBlocks : less blocks than expected");
136
137 return RC_OK;
138}
139
140/*
141 * adfFreeFileBlocks

Callers 3

adfFreeFileBlocksFunction · 0.85
adfUndelFileFunction · 0.85
adfCheckFileFunction · 0.85

Calls 2

adfFileRealSizeFunction · 0.85
adfReadFileExtBlockFunction · 0.85

Tested by

no test coverage detected