1 // SuperBlock.h 2 // 3 // Copyright (c) 2003, Ingo Weinhold (bonefish@cs.tu-berlin.de) 4 // 5 // This program is free software; you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation; either version 2 of the License, or 8 // (at your option) any later version. 9 // 10 // This program is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with this program; if not, write to the Free Software 17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 // 19 // You can alternatively use *this file* under the terms of the the MIT 20 // license included in this package. 21 22 #ifndef SUPER_BLOCK_H 23 #define SUPER_BLOCK_H 24 25 #include "endianess.h" 26 #include "reiserfs.h" 27 28 class SuperBlock { 29 public: 30 SuperBlock(); 31 ~SuperBlock(); 32 33 status_t Init(int device, off_t offset = 0); 34 35 uint32 GetFormatVersion() const { return fFormatVersion; } 36 37 uint16 GetBlockSize() const 38 { 39 return (GetFormatVersion() == REISERFS_3_6 40 ? le2h(fCurrentData->s_blocksize) : le2h(fOldData->s_blocksize)); 41 } 42 43 uint32 CountBlocks() const 44 { 45 return (GetFormatVersion() == REISERFS_3_6 46 ? le2h(fCurrentData->s_block_count) 47 : le2h(fOldData->s_block_count)); 48 } 49 50 uint32 CountFreeBlocks() const 51 { 52 return (GetFormatVersion() == REISERFS_3_6 53 ? le2h(fCurrentData->s_free_blocks) 54 : le2h(fOldData->s_free_blocks)); 55 } 56 57 uint16 GetVersion() const 58 { 59 return (GetFormatVersion() == REISERFS_3_6 60 ? le2h(fCurrentData->s_version) : REISERFS_VERSION_0); 61 } 62 63 uint32 GetRootBlock() const 64 { 65 return (GetFormatVersion() == REISERFS_3_6 66 ? le2h(fCurrentData->s_root_block) : le2h(fOldData->s_root_block)); 67 } 68 69 uint16 GetState() const 70 { 71 return (GetFormatVersion() == REISERFS_3_6 72 ? le2h(fCurrentData->s_state) : le2h(fOldData->s_state)); 73 } 74 75 uint32 GetHashFunctionCode() const 76 { 77 return (GetFormatVersion() == REISERFS_3_6 78 ? le2h(fCurrentData->s_hash_function_code) : UNSET_HASH); 79 } 80 81 uint16 GetTreeHeight() const 82 { 83 return (GetFormatVersion() == REISERFS_3_6 84 ? le2h(fCurrentData->s_tree_height) 85 : le2h(fOldData->s_tree_height)); 86 } 87 88 status_t GetLabel(char* buffer, size_t bufferSize) const; 89 90 private: 91 uint32 fFormatVersion; 92 union { 93 reiserfs_super_block *fCurrentData; 94 reiserfs_super_block_v1 *fOldData; 95 }; 96 }; 97 98 #endif // SUPER_BLOCK_H 99