File: ext2sim.h | Size: 4,884 bytes | Download file | Back to directory listing | BWPOW's homepage
#ifndef HEAD_EXT2SIM
#define HEAD_EXT2SIM
 
#define FS_STATE_NOT_MOUNTED 0
#define FS_STATE_MOUNTED_RW 1
#define FS_STATE_MOUNTED_RO 2
 
#define MAX_GROUPS 100
#define MAX_DIR_ENTRY 1024
 
#define EXT2_FT_UNKNOWN   0
#define EXT2_FT_REG_FILE  1
#define EXT2_FT_DIR       2
#define EXT2_FT_CHRDEV    3
#define EXT2_FT_BLKDEV    4
#define EXT2_FT_FIFO      5
#define EXT2_FT_SOCK      6
#define EXT2_FT_SYMLINK   7
#define EXT2_FT_MAX       8
 
#define EXT2_S_IFMT   0xF000
#define EXT2_S_IFSOCK 0xC000
#define EXT2_S_IFLNK  0xA000
#define EXT2_S_IFREG  0x8000
#define EXT2_S_IFBLK  0x6000
#define EXT2_S_IFDIR  0x4000
#define EXT2_S_IFCHR  0x2000
#define EXT2_S_IFIFO  0x1000
 
#define EXT2_S_ISUID  0x0800
#define EXT2_S_ISGID  0x0400
#define EXT2_S_ISVTX  0x0200
#define EXT2_S_IRWXU  0x01C0
#define EXT2_S_IRUSR  0x0100
#define EXT2_S_IWUSR  0x0080
#define EXT2_S_IXUSR  0x0040
#define EXT2_S_IRWXG  0x0038
#define EXT2_S_IRGRP  0x0020
#define EXT2_S_IWGRP  0x0010
#define EXT2_S_IXGRP  0x0008
#define EXT2_S_IRWXO  0x0007
#define EXT2_S_IROTH  0x0004
#define EXT2_S_IWOTH  0x0002
#define EXT2_S_IXOTH  0x0001
 
typedef struct{
  unsigned int s_inodes_count;
  unsigned int s_block_count;
  unsigned int s_r_blocks_count;
  unsigned int s_free_blocks_count;
  unsigned int s_free_inodes_count;
  unsigned int s_first_data_block;
  unsigned int s_log_block_size;
  unsigned int s_log_frag_size;
  unsigned int s_blocks_per_group;
  unsigned int s_frags_per_group;
  unsigned int s_inodes_per_group;
  unsigned int s_mtime;
  unsigned int s_wtime;
  unsigned short s_mnt_count;
  unsigned short s_max_mnt_count;
  unsigned short s_magic;
  unsigned short s_state;
  unsigned short s_errors;
  unsigned short s_minor_rev_level;
  unsigned int s_last_check;
  unsigned int s_check_interval;
  unsigned int s_creator_os;
  unsigned int s_rev_level;
  unsigned short s_def_resuid;
  unsigned short s_def_resgid;
  unsigned int s_first_ino;
  unsigned short s_inode_size;
  unsigned short s_block_group_nr;
  unsigned int s_feature_compat;
  unsigned int s_feature_incompat;
  unsigned int s_feature_ro_compat;
  unsigned char s_uuid[16];
  unsigned char s_volume_name[16];
  unsigned char s_last_mounted[64];
  unsigned int s_algo_bitmap;
}S_SUPERBLOCK;
 
typedef struct{
  unsigned int bg_block_bitmap;
  unsigned int bg_inode_bitmap;
  unsigned int bg_inode_table;
  unsigned short bg_free_block_count;
  unsigned short bg_free_inodes_count;
  unsigned short bg_used_dirs_count;
  unsigned short bg_pad;
  unsigned char bg_reserved[12];
}S_GROUP_DESCRIPTOR;
 
 
typedef struct{
  unsigned short i_mode;
  unsigned short i_uid;
  unsigned int i_size;
  unsigned int i_atime;
  unsigned int i_ctime;
  unsigned int i_mtime;
  unsigned int i_dtime;
  unsigned short i_gid;
  unsigned short i_links_count;
  unsigned int i_blocks;
  unsigned int i_flags;
  unsigned int i_osd1;
  unsigned int i_block[15];
  unsigned int i_generation;
  unsigned int i_file_acl;
  unsigned int i_dir_acl;
  unsigned int i_faddr;
  unsigned char i_osd2[12];
}S_INODE;
 
 
typedef struct{
  int group_count;
  int block_size;
  int sektors_per_block;
  int group_desc_start;
  int first_group_start;
  int group_size;
}FS_INFO;
 
typedef struct{
  unsigned int inode;
  unsigned short rec_len;
  unsigned char name_len;
  unsigned char file_type;
}S_DIR;
 
typedef struct{
  unsigned char name[256];
  unsigned int inode;
  unsigned int size;
  unsigned short i_mode;
  unsigned char file_type;
}FS_DIR_ENTRY;
 
typedef struct{
  int num;
  unsigned int inode;
  char name[2048];
  char actual_name[256];
}FS_DIR;
 
/* Funkcie z disk.c */
int mount_fs(char *fname,char state);
int umount_fs(void);
int read_sector(int num,unsigned char buf[512]);
int write_sector(int num,unsigned char buf[512]);
int create_disk(int num);
int write_block(int num,int l,unsigned char *buf);
int read_block(int num,int l,unsigned char *buf);
int read_inode(int num,S_INODE *inode);
int read_blocks(unsigned int i_block[15],int l,unsigned char *buf);
 
/* superblock.c */
int read_superblock(void);
int write_superblock(void);
 
/* group_descriptor.c */
int write_group_descriptor(void);
int read_group_descriptor(void);
 
/* bitmap.c */
int initialise_bitmaps(void);
void deinitialise_bitmaps(void);
void clear_bitmaps(void);
int write_bitmaps(int num);
int read_bitmaps(int num);
 
/* format.c */
int format(int group_count,int block_shift);
 
/* check.c */
int check(void);
 
/* dir.c */
int dir_read_inodetype(int num,unsigned int *size,unsigned short *mode);
int dir_read(int num,char *name);
int function_cd(char *text);
void function_ls(void);
 
/* cat.c */
int function_cat(char *text);
 
#endif
 
#ifndef stricmp
  #define stricmp strcasecmp
#endif