#ifndef SUPERBLOCK_H #define SUPERBLOCK_H #include <sys/types.h> #define UBIX_MAGIC1 0x0A0A0A0A; #define UBIX_MAGIC2 0x0B0B0B0B; #define UBIX_MAGIC3 0x0C0C0C0C; typedef struct blockRun { int allocationGroup __attribute__ ((packed)); unsigned short start __attribute__ ((packed)); unsigned short len __attribute__ ((packed)); } inodeAddr; // typedef unsigned long long off_t; typedef signed char int8; typedef unsigned char uInt8; typedef unsigned int uInt32; typedef int int32; typedef unsigned long long uInt64; typedef signed long long int64; typedef struct ubixfs_superBlock{ char name[32] __attribute__ ((packed)); int32 magic1 __attribute__ ((packed)); int32 fsByteOrder __attribute__ ((packed)); // blockSize on disk (4096 for UbixFS v2) uInt32 blockSize __attribute__ ((packed)); // number of bits needed to shift a block number to get a byte address uInt32 blockShift __attribute__ ((packed)); // numBlocks must be divisible by 8 for the getFreeBlock function to work off_t numBlocks __attribute__ ((packed)); off_t usedBlocks __attribute__ ((packed)); uInt32 inodeCount __attribute__ ((packed)); int32 inodeSize __attribute__ ((packed)); int32 magic2 __attribute__ ((packed)); int32 blocksPerAG __attribute__ ((packed)); int32 AGShift __attribute__ ((packed)); int32 numAGs __attribute__ ((packed)); int32 lastUsedAG __attribute__ ((packed)); // flags tells whether the FS is clean (0x434C454E) or dirty (0x44495954) int32 flags __attribute__ ((packed)); // journal information struct blockRun logBlocks __attribute__ ((packed)); off_t logStart __attribute__ ((packed)); off_t logEnd __attribute__ ((packed)); int32 magic3 __attribute__ ((packed)); // root dir of the SYS container inodeAddr rootDir __attribute__ ((packed)); // indicies inodeAddr indicies __attribute__ ((packed)); char pad[372] __attribute__ ((packed)); } ubixfs_superBlock; #endif // !SUPERBLOCK_H