Up Block header Root AdminSpaceContainer Bitmap ObjectContainer HashTable BNodeContainer
| |
Below is the standard block header. This header is found before EVERY type of
block used in the filesystem, except data blocks. The id field is used to check if
the block is of the correct type when it is being referred to using a BLCK pointer.
The checksum field is the SUM of all LONGs in a block plus one, and then negated. When
applying a checksum the checksum field itself should be set to zero. The checking a
checksum the checksum is okay if the result of the checksum equals zero. The
ownblock BLCK pointer points to the block itself. This field is an extra safety check to
ensure we are using a valid block.
Field |
Type |
Description |
id |
ULONG |
The id field is used to identify the type of block we are dealing with.
It is used to make sure that when referencing a block we got a block of the correct
type. The id consist of 4 bytes and each blocktype has its own unique foure letter
code. |
checksum |
ULONG |
This field contains the sum of all longs in this block, plus one and then
negated. The checksum can be used to check if the block hasn't been corrupted in any
way. |
ownblock |
BLCK |
Points to itself, or in other words, this field contains the block number
of this block. This is yet another way to check whether or not a block is valid. |
struct fsBlockHeader {
ULONG id;
ULONG checksum;
BLCK ownblock;
};
The algorithm to calculate the checksum of a block:
ULONG calcchecksum(struct fsBlockHeader *block, LONG blocksize} {
ULONG *data=(ULONG *)block;
ULONG checksum=1;
block->checksum=0;
while(blocksize>0) {
checksum+=*data++;
blocksize-=4;
}
return(-checksum);
}
|