blob: 7ad308d3cc7af66c7475342e530b73fcf52b6418 [file] [log] [blame]
#ifndef UTIL_LINUX_MINIX_PROGRAMS_H
#define UTIL_LINUX_MINIX_PROGRAMS_H
#include "minix.h"
/*
* Global variables.
*/
extern int fs_version;
extern char *super_block_buffer;
#define Super (*(struct minix_super_block *) super_block_buffer)
#define Super3 (*(struct minix3_super_block *) super_block_buffer)
#define INODE_SIZE (sizeof(struct minix_inode))
#define INODE2_SIZE (sizeof(struct minix2_inode))
#define BITS_PER_BLOCK (MINIX_BLOCK_SIZE << 3)
#define UPPER(size,n) ((size+((n)-1))/(n))
/*
* Inline functions.
*/
static inline unsigned long get_ninodes(void)
{
switch (fs_version) {
case 3:
return Super3.s_ninodes;
default:
return Super.s_ninodes;
}
}
static inline unsigned long get_nzones(void)
{
switch (fs_version) {
case 3:
return Super3.s_zones;
case 2:
return Super.s_zones;
default:
return Super.s_nzones;
}
}
static inline unsigned long get_nimaps(void)
{
switch (fs_version) {
case 3:
return Super3.s_imap_blocks;
default:
return Super.s_imap_blocks;
}
}
static inline unsigned long get_nzmaps(void)
{
switch (fs_version) {
case 3:
return Super3.s_zmap_blocks;
default:
return Super.s_zmap_blocks;
}
}
static inline off_t get_first_zone(void)
{
switch (fs_version) {
case 3:
return Super3.s_firstdatazone;
default:
return Super.s_firstdatazone;
}
}
static inline size_t get_zone_size(void)
{
switch (fs_version) {
case 3:
return Super3.s_log_zone_size;
default:
return Super.s_log_zone_size;
}
}
static inline size_t get_max_size(void)
{
switch (fs_version) {
case 3:
return Super3.s_max_size;
default:
return Super.s_max_size;
}
}
static inline unsigned long inode_blocks(void)
{
switch (fs_version) {
case 3:
case 2:
return UPPER(get_ninodes(), MINIX2_INODES_PER_BLOCK);
default:
return UPPER(get_ninodes(), MINIX_INODES_PER_BLOCK);
}
}
static inline off_t first_zone_data(void)
{
return 2 + get_nimaps() + get_nzmaps() + inode_blocks();
}
static inline size_t get_inode_buffer_size(void)
{
return inode_blocks() * MINIX_BLOCK_SIZE;
}
#endif /* UTIL_LINUX_MINIX_PROGRAMS_H */