* adfMount * * */
| 158 | * |
| 159 | */ |
| 160 | struct Volume* adfMount( struct Device *dev, int nPart, BOOL readOnly ) |
| 161 | { |
| 162 | int32_t nBlock; |
| 163 | struct bRootBlock root; |
| 164 | struct bBootBlock boot; |
| 165 | struct Volume* vol; |
| 166 | |
| 167 | if (dev==NULL || nPart >= dev->nVol) { |
| 168 | (*adfEnv.eFct)("adfMount : invalid parameter(s)"); |
| 169 | return NULL; |
| 170 | } |
| 171 | |
| 172 | vol = dev->volList[nPart]; |
| 173 | vol->dev = dev; |
| 174 | vol->mounted = TRUE; |
| 175 | |
| 176 | /*printf("first=%ld last=%ld root=%ld\n",vol->firstBlock, |
| 177 | vol->lastBlock, vol->rootBlock); |
| 178 | */ |
| 179 | if (adfReadBootBlock(vol, &boot)!=RC_OK) { |
| 180 | (*adfEnv.wFct)("adfMount : BootBlock invalid"); |
| 181 | return NULL; |
| 182 | } |
| 183 | |
| 184 | vol->dosType = boot.dosType[3]; |
| 185 | if (isFFS(vol->dosType)) |
| 186 | vol->datablockSize=512; |
| 187 | else |
| 188 | vol->datablockSize=488; |
| 189 | |
| 190 | if (dev->readOnly /*|| isDIRCACHE(vol->dosType)*/) |
| 191 | vol->readOnly = TRUE; |
| 192 | else |
| 193 | vol->readOnly = readOnly; |
| 194 | |
| 195 | if (adfReadRootBlock(vol, vol->rootBlock, &root)!=RC_OK) { |
| 196 | (*adfEnv.wFct)("adfMount : RootBlock invalid"); |
| 197 | return NULL; |
| 198 | } |
| 199 | |
| 200 | nBlock = vol->lastBlock - vol->firstBlock +1 - 2; |
| 201 | |
| 202 | adfReadBitmap( vol, nBlock, &root ); |
| 203 | vol->curDirPtr = vol->rootBlock; |
| 204 | |
| 205 | /*printf("blockSize=%d\n",vol->blockSize);*/ |
| 206 | |
| 207 | return( vol ); |
| 208 | } |
| 209 | |
| 210 | |
| 211 | /* |
no test coverage detected