Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void checkDirectories(FILE *image, int inodeNumber) {
- int block, realInodeNumber, pos = 0, i, ii;
- uchar blockBuffer[BLOCK_SIZE], dataBlockBuffer[BLOCK_SIZE];
- uint mode, dblock, inode, singleIndirect, doubleIndirect;
- block = (inodeNumber / INODESIZE) + 2;
- realInodeNumber = inodeNumber % INODESIZE;
- getBlock(image, block, blockBuffer);
- pos = realInodeNumber * INODESIZE;
- mode = get4Bytes(blockBuffer + pos);
- if (mode == 0)
- return;
- if (inodeNumber != 1)
- allInodes.inodes[inodeNumber].nlink++;
- if ((mode & IFMT) == IFREG) {
- } else if ((mode & IFMT) == IFDIR) {
- pos += 32;
- for (ii = 0; ii < 6; ii++) {
- dblock = get4Bytes(blockBuffer + pos);
- pos += 4;
- if (dblock == 0)
- continue;
- if (dblock != 0) {
- getBlock(image, dblock, dataBlockBuffer);
- for (i = 0; i < DIRPB; i++) {
- inode = get4Bytes(dataBlockBuffer + (i * INODESIZE));
- if (i <= 1) {
- allInodes.inodes[inode].nlink++;
- continue;
- }
- if (inode == 0)
- continue;
- checkDirectories(image, inode);
- }
- }
- }
- singleIndirect = get4Bytes(blockBuffer + pos);
- pos += 4;
- if (singleIndirect != 0) {
- checkDirectorySingle(image, singleIndirect);
- }
- doubleIndirect = get4Bytes(blockBuffer + pos);
- if (doubleIndirect != 0) {
- checkDirectoryDouble(image, doubleIndirect);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement