From 29a73026aa2a0dd097a5b89954722fd1fbf89fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 3 Mar 2012 23:36:00 +0100 Subject: [PATCH] Added Volume::IsValidInodeBlock(). * The method checks whether a block may be occupied by an inode, ie. is neither part of the bitmap nor of the log, and would also fit on the disk. * Also made disk_super_block::IsValid() const. --- src/add-ons/kernel/file_systems/bfs/Volume.cpp | 16 +++++++++++++--- src/add-ons/kernel/file_systems/bfs/Volume.h | 5 +++-- src/add-ons/kernel/file_systems/bfs/bfs.h | 2 +- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/Volume.cpp b/src/add-ons/kernel/file_systems/bfs/Volume.cpp index 9945ad8d8b..42b9bea63d 100644 --- a/src/add-ons/kernel/file_systems/bfs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/bfs/Volume.cpp @@ -1,8 +1,9 @@ /* - * Copyright 2001-2009, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2001-2012, Axel Dörfler, axeld@pinc-software.de. * This file may be used under the terms of the MIT License. */ + //! super block, mounting, etc. @@ -189,7 +190,7 @@ DeviceOpener::GetSize(off_t* _size, uint32* _blockSize) bool -disk_super_block::IsValid() +disk_super_block::IsValid() const { if (Magic1() != (int32)SUPER_BLOCK_MAGIC1 || Magic2() != (int32)SUPER_BLOCK_MAGIC2 @@ -296,12 +297,21 @@ Volume::~Volume() bool -Volume::IsValidSuperBlock() +Volume::IsValidSuperBlock() const { return fSuperBlock.IsValid(); } +/*! Checks whether the given block number may be the location of an inode block. +*/ +bool +Volume::IsValidInodeBlock(off_t block) const +{ + return block > fSuperBlock.LogEnd() && block < NumBlocks(); +} + + void Volume::Panic() { diff --git a/src/add-ons/kernel/file_systems/bfs/Volume.h b/src/add-ons/kernel/file_systems/bfs/Volume.h index 1e9b8f9737..6d87a0fd55 100644 --- a/src/add-ons/kernel/file_systems/bfs/Volume.h +++ b/src/add-ons/kernel/file_systems/bfs/Volume.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2010, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2001-2012, Axel Dörfler, axeld@pinc-software.de. * This file may be used under the terms of the MIT License. */ #ifndef VOLUME_H @@ -40,7 +40,8 @@ public: bool IsInitializing() const { return fVolume == NULL; } - bool IsValidSuperBlock(); + bool IsValidSuperBlock() const; + bool IsValidInodeBlock(off_t block) const; bool IsReadOnly() const; void Panic(); mutex& Lock(); diff --git a/src/add-ons/kernel/file_systems/bfs/bfs.h b/src/add-ons/kernel/file_systems/bfs/bfs.h index d426785b87..9a3e395f2f 100644 --- a/src/add-ons/kernel/file_systems/bfs/bfs.h +++ b/src/add-ons/kernel/file_systems/bfs/bfs.h @@ -99,7 +99,7 @@ struct disk_super_block { off_t LogEnd() const { return BFS_ENDIAN_TO_HOST_INT64(log_end); } // implemented in Volume.cpp: - bool IsValid(); + bool IsValid() const; void Initialize(const char *name, off_t numBlocks, uint32 blockSize); } _PACKED;