* Copyright 2012, JΓ©rΓ΄me Duval, korli@users.berlios.de.
* Copyright 2003 Tyler Dauwalder, tyler@dauwalder.net
* This file may be used under the terms of the MIT License.
*/
#include "MetadataPartition.h"
#include "Icb.h"
*/
MetadataPartition::MetadataPartition(Volume *volume,
uint16 parentNumber, Partition &parentPartition, uint32 metadataFileLocation,
uint32 metadataMirrorFileLocation, uint32 metadataBitmapFileLocation,
uint32 allocationUnitSize, uint16 alignmentUnitSize,
bool metadataIsDuplicated)
: fPartition(parentNumber),
fParentPartition(parentPartition),
fAllocationUnitSize(allocationUnitSize),
fAlignmentUnitSize(alignmentUnitSize),
fMetadataIsDuplicated(metadataIsDuplicated),
fInitStatus(B_NO_INIT),
fMetadataIcb(NULL)
{
long_address address;
address.set_to(metadataFileLocation, fPartition);
fMetadataIcb = new(nothrow) Icb(volume, address);
if (fMetadataIcb == NULL || fMetadataIcb->InitCheck() != B_OK)
fInitStatus = B_NO_MEMORY;
else
fInitStatus = B_OK;
address.set_to(metadataMirrorFileLocation, fPartition);
fMetadataMirrorIcb = new(nothrow) Icb(volume, address);
if (fMetadataMirrorIcb == NULL
|| fMetadataMirrorIcb->InitCheck() != B_OK) {
fInitStatus = B_NO_MEMORY;
}
}
*/
MetadataPartition::~MetadataPartition()
{
delete fMetadataIcb;
delete fMetadataMirrorIcb;
}
*/
status_t
MetadataPartition::MapBlock(uint32 logicalBlock, off_t &physicalBlock)
{
off_t block = 0;
bool isRecorded;
status_t status = fMetadataIcb->FindBlock(logicalBlock, block, isRecorded);
if (status != B_OK)
return status;
if (!isRecorded) {
status = fMetadataMirrorIcb->FindBlock(logicalBlock, block, isRecorded);
if (status != B_OK)
return status;
if (!isRecorded)
return B_BAD_DATA;
}
return fParentPartition.MapBlock(block, physicalBlock);
}
*/
status_t
MetadataPartition::InitCheck()
{
return fInitStatus;
}