Ejemplo n.º 1
0
status_t
Volume::ClusterToBlock(cluster_t cluster, fsblock_t &block)
{
	if (cluster < 2)
		return B_BAD_VALUE;
	block = ((cluster - 2) << SuperBlock().BlocksPerClusterShift())
		+ SuperBlock().FirstDataBlock();
	TRACE("Volume::ClusterToBlock() cluster %" B_PRIu32 " %u %" B_PRIu32 ": %"
		B_PRIu64 ", %" B_PRIu32 "\n", cluster,
		SuperBlock().BlocksPerClusterShift(), SuperBlock().FirstDataBlock(),
		block, SuperBlock().FirstFatBlock());
	return B_OK;
}
Ejemplo n.º 2
0
cluster_t
Volume::NextCluster(cluster_t _cluster)
{
	uint32 clusterPerBlock = fBlockSize / sizeof(cluster_t);
	CachedBlock block(this);
	fsblock_t blockNum = SuperBlock().FirstFatBlock()
		+ _cluster / clusterPerBlock;
	cluster_t *cluster = (cluster_t *)block.SetTo(blockNum);
	cluster += _cluster % clusterPerBlock;
	TRACE("Volume::NextCluster() cluster %" B_PRIu32 " next %" B_PRIu32 "\n",
		_cluster, *cluster);
	return *cluster;
}
Ejemplo n.º 3
0
bool DiskMultiMap::createNew(const std::string &filename, unsigned int numBuckets) {
    m_superBlock = SuperBlock(numBuckets);
    if (!m_file.createNew(filename)) {
        return false;
    }
    if (!m_file.write(m_superBlock, 0)) {
        return false;
    }
    for (int i = 0; i < numBuckets; i++) {
        BinaryFile::Offset emptyOffset = NULLOFFSET;
        if (!m_file.write(emptyOffset, (BinaryFile::Offset) (i * sizeof(BinaryFile::Offset) + sizeof(SuperBlock)))) {
            return false;
        }
    }
    return true;
}