TacOS  0.2
 Tout Structures de données Fichiers Fonctions Variables Définitions de type Énumérations Macros
ext2_internal.h
Aller à la documentation de ce fichier.
1 
29 #ifndef _EXT2_INTERNAL_H_
30 #define _EXT2_INTERNAL_H_
31 
32 #include <fs/devfs.h>
33 #include <vfs.h>
34 
35 #define EXT2_ROOT_INO 2
43 struct ext2_super_block {
69 // -- EXT2_DYNAMIC_REV Specific --
76  uint8_t s_uuid[16];
77  char s_volume_name[16];
78  char s_last_mounted[64];
80 // -- Performance Hints --
84 // -- Journaling Support --
85  uint8_t s_journal_uuid[16];
89 // -- Directory Indexing Support --
90  uint32_t s_hash_seed[4];
92  uint8_t s_padding[3];
93 // -- Other options --
96  uint8_t s_reserved[760];
97 };
98 
99 /*
100  * Codes for operating systems
101  */
102 #define EXT2_OS_LINUX 0
103 #define EXT2_OS_HURD 1
104 #define EXT2_OS_MASIX 2
105 #define EXT2_OS_FREEBSD 3
106 #define EXT2_OS_LITES 4
108 /*
109  * Revision levels
110  */
111 #define EXT2_GOOD_OLD_REV 0
112 #define EXT2_DYNAMIC_REV 1
117 struct ext2_group_desc {
125  uint32_t bg_reserved[3];
126 };
127 
133  struct ext2_inode *inodes;
134  //TODO: Je pourrais faire de même avec les blocks. À voir...
135 };
136 
140 struct ext2_inode {
159 };
160 
161 // Types d'inode :
162 #define EXT2_FT_UNKNOWN 0
163 #define EXT2_FT_REG_FILE 1
164 #define EXT2_FT_DIR 2
165 #define EXT2_FT_CHRDEV 3
166 #define EXT2_FT_BLKDEV 4
167 #define EXT2_FT_FIFO 5
168 #define EXT2_FT_SOCK 6
169 #define EXT2_FT_SYMLINK 7
175 struct ext2_directory {
180  char name[256];
181 };
182 
187  struct ext2_directory *dir;
188  struct directories_t *next;
189 };
190 
191 // -- file format --
192 #define EXT2_S_IFSOCK 0xC000
193 #define EXT2_S_IFLNK 0xA000
194 #define EXT2_S_IFREG 0x8000
195 #define EXT2_S_IFBLK 0x6000
196 #define EXT2_S_IFDIR 0x4000
197 #define EXT2_S_IFCHR 0x2000
198 #define EXT2_S_IFIFO 0x1000
199 // -- process execution user/group override --
200 #define EXT2_S_ISUID 0x0800
201 #define EXT2_S_ISGID 0x0400
202 #define EXT2_S_ISVTX 0x0200
203 // -- access rights --
204 #define EXT2_S_IRUSR 0x0100
205 #define EXT2_S_IWUSR 0x0080
206 #define EXT2_S_IXUSR 0x0040
207 #define EXT2_S_IRGRP 0x0020
208 #define EXT2_S_IWGRP 0x0010
209 #define EXT2_S_IXGRP 0x0008
210 #define EXT2_S_IROTH 0x0004
211 #define EXT2_S_IWOTH 0x0002
212 #define EXT2_S_IXOTH 0x0001
217 typedef struct _ext2_fs_instance_t {
220  struct ext2_super_block superblock;
222  int n_groups;
223  blkdev_read_t read_data;
224  blkdev_write_t write_data;
227 
233 void umount_EXT2(fs_instance_t *instance);
234 
244 ssize_t ext2_read(open_file_descriptor * ofd, void * buf, size_t size);
245 
255 ssize_t ext2_write (open_file_descriptor * ofd, const void *buf, size_t size);
256 
265 
275 int ext2_readdir(open_file_descriptor * ofd, char * entries, size_t size);
276 
286 int ext2_stat(fs_instance_t *instance, const char *path, struct stat *stbuf);
287 
298 int ext2_mknod(inode_t *dir, dentry_t *dentry, mode_t mode, dev_t dev);
299 
300 
310 int ext2_mkdir(inode_t *dir, dentry_t *dentry, mode_t mode);
311 
320 int ext2_unlink(inode_t *dir, dentry_t *dentry);
321 
330 int ext2_truncate(inode_t *inode, off_t off);
331 
340 int ext2_rmdir(inode_t *dir, dentry_t *dentry);
341 
350 int ext2_setattr(inode_t *inode, file_attributes_t *attr);
351 
361 int ext2_seek(open_file_descriptor * ofd, long offset, int whence);
362 
370 dentry_t *ext2_getroot(struct _fs_instance_t *instance);
371 
381 dentry_t* ext2_lookup(struct _fs_instance_t *instance, struct _dentry_t* dentry, const char * name);
382 
393 int ext2_rename(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
394 
395 dentry_t * init_rootext2fs(ext2_fs_instance_t *instance);
396 
397 extern struct _open_file_operations_t ext2fs_fops;
399 #endif
uint16_t bg_free_blocks_count
Definition: ext2_internal.h:121
blkdev_write_t write_data
Definition: ext2_internal.h:224
uint32_t s_inodes_count
Definition: ext2_internal.h:44
int ext2_unlink(inode_t *dir, dentry_t *dentry)
Suppression d'un noeud.
Definition: ext2_functions.c:93
Definition: ext2_internal.h:140
uint32_t bg_block_bitmap
Definition: ext2_internal.h:118
uint8_t s_prealloc_dir_blocks
Definition: ext2_internal.h:82
uint32_t s_free_blocks_count
Definition: ext2_internal.h:47
Definition: ext2_internal.h:117
uint16_t bg_pad
Definition: ext2_internal.h:124
uint32_t s_r_blocks_count
Definition: ext2_internal.h:46
uint16_t s_block_group_nr
Definition: ext2_internal.h:72
uint32_t s_log_frag_size
Definition: ext2_internal.h:51
Virtual File System.
struct ext2_directory * dir
Definition: ext2_internal.h:187
Definition: vfs.h:131
uint32_t i_dtime
Definition: ext2_internal.h:147
int ext2_truncate(inode_t *inode, off_t off)
Change la taille d'un fichier.
Definition: ext2_functions.c:332
Structure qui représente une entrée dans un dossier ext2. Format imposé par Ext2. ...
Definition: ext2_internal.h:175
uint32_t s_default_mount_opts
Definition: ext2_internal.h:94
struct ext2_inode * inodes
Definition: ext2_internal.h:133
Instance de FS Ext2.
Definition: ext2_internal.h:217
uint32_t s_first_ino
Definition: ext2_internal.h:70
ssize_t ext2_read(open_file_descriptor *ofd, void *buf, size_t size)
Lecture d'un fichier.
Definition: ext2_functions.c:261
uint16_t bg_used_dirs_count
Definition: ext2_internal.h:123
uint32_t s_log_block_size
Definition: ext2_internal.h:50
uint32_t s_feature_compat
Definition: ext2_internal.h:73
uint16_t s_magic
Definition: ext2_internal.h:59
uint16_t s_padding1
Definition: ext2_internal.h:83
uint32_t i_generation
Definition: ext2_internal.h:154
uint16_t i_mode
Definition: ext2_internal.h:141
uint32_t s_blocks_count
Definition: ext2_internal.h:45
uint32_t s_free_inodes_count
Definition: ext2_internal.h:48
uint32_t inode
Definition: ext2_internal.h:176
uint16_t i_uid
Definition: ext2_internal.h:142
Instance d'un couple FS/Device monté.
Definition: vfs.h:54
uint16_t i_links_count
Definition: ext2_internal.h:149
uint8_t s_def_hash_version
Definition: ext2_internal.h:91
uint32_t i_mtime
Definition: ext2_internal.h:146
uint16_t s_mnt_count
Definition: ext2_internal.h:57
Definition: ext2_internal.h:43
int ext2_seek(open_file_descriptor *ofd, long offset, int whence)
Definition: ext2_functions.c:168
unsigned short int uint16_t
Definition: types.h:35
uint16_t rec_len
Definition: ext2_internal.h:177
uint32_t i_faddr
Definition: ext2_internal.h:157
fs_instance_t super
Definition: ext2_internal.h:218
uint16_t bg_free_inodes_count
Definition: ext2_internal.h:122
uint32_t i_dir_acl
Definition: ext2_internal.h:156
Definition: vfs.h:81
uint16_t s_max_mnt_count
Definition: ext2_internal.h:58
uint32_t s_last_orphan
Definition: ext2_internal.h:88
uint32_t s_frags_per_group
Definition: ext2_internal.h:53
dentry_t * root
Definition: ext2_internal.h:219
uint32_t s_mtime
Definition: ext2_internal.h:55
uint32_t i_osd1
Definition: ext2_internal.h:152
uint8_t * inode_bitmap
Definition: ext2_internal.h:132
uint32_t s_lastcheck
Definition: ext2_internal.h:63
uint32_t i_ctime
Definition: ext2_internal.h:145
uint32_t s_journal_dev
Definition: ext2_internal.h:87
int ext2_mknod(inode_t *dir, dentry_t *dentry, mode_t mode, dev_t dev)
Création d'un noeud (fichier, dossier, fichier spécial...)
Definition: ext2_functions.c:318
uint32_t i_atime
Definition: ext2_internal.h:144
uint16_t s_inode_size
Definition: ext2_internal.h:71
Structure chaînée pour enregistrer les entrées d'un dossier.
Definition: ext2_internal.h:186
uint32_t s_wtime
Definition: ext2_internal.h:56
uint16_t s_state
Definition: ext2_internal.h:60
unsigned char uint8_t
Definition: types.h:34
int ext2_setattr(inode_t *inode, file_attributes_t *attr)
Definition: ext2_functions.c:63
int ext2_close(open_file_descriptor *ofd)
Fermeture d'un fichier ouvert.
Definition: ext2_functions.c:411
int ext2_readdir(open_file_descriptor *ofd, char *entries, size_t size)
Lecture du contenu d'un dossier.
Definition: ext2_functions.c:111
uint32_t dev_t
Definition: kstat.h:64
int ext2_rename(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry)
Renomme ou déplace un fichier.
Definition: ext2_functions.c:38
uint16_t s_def_resgid
Definition: ext2_internal.h:68
uint32_t i_size
Definition: ext2_internal.h:143
dentry_t * ext2_lookup(struct _fs_instance_t *instance, struct _dentry_t *dentry, const char *name)
Definition: ext2_functions.c:379
uint32_t s_creator_os
Definition: ext2_internal.h:65
Informations sur un noeud.
Definition: kstat.h:75
uint8_t name_len
Definition: ext2_internal.h:178
uint32_t s_rev_level
Definition: ext2_internal.h:66
int n_groups
Definition: ext2_internal.h:222
Definition: fd_types.h:49
uint32_t s_feature_incompat
Definition: ext2_internal.h:74
uint16_t i_gid
Definition: ext2_internal.h:148
void umount_EXT2(fs_instance_t *instance)
Unmount d'un point de montage.
Definition: ext2.c:115
uint32_t s_blocks_per_group
Definition: ext2_internal.h:52
struct _open_file_operations_t ext2fs_fops
Definition: ext2_internal.c:9
uint32_t s_algorithm_usage_bitmap
Definition: ext2_internal.h:79
uint32_t mode_t
Definition: kstat.h:63
struct ext2_group_desc_internal * group_desc_table_internal
Definition: ext2_internal.h:225
uint32_t s_first_meta_bg
Definition: ext2_internal.h:95
int ssize_t
Definition: types.h:44
uint8_t file_type
Definition: ext2_internal.h:179
uint16_t s_def_resuid
Definition: ext2_internal.h:67
uint16_t s_errors
Definition: ext2_internal.h:61
uint32_t s_first_data_block
Definition: ext2_internal.h:49
uint32_t i_file_acl
Definition: ext2_internal.h:155
uint32_t i_blocks
Definition: ext2_internal.h:150
ssize_t ext2_write(open_file_descriptor *ofd, const void *buf, size_t size)
Ecriture d'un fichier.
Definition: ext2_functions.c:193
uint32_t bg_inode_table
Definition: ext2_internal.h:120
uint8_t s_prealloc_blocks
Definition: ext2_internal.h:81
int ext2_rmdir(inode_t *dir, dentry_t *dentry)
Suppression d'un dossier vide.
Definition: ext2_functions.c:47
int ext2_stat(fs_instance_t *instance, const char *path, struct stat *stbuf)
Récupère l'état d'un fichier ou dossier.
struct ext2_group_desc * group_desc_table
Definition: ext2_internal.h:221
uint32_t s_journal_inum
Definition: ext2_internal.h:86
unsigned long int uint32_t
Definition: types.h:36
uint32_t s_inodes_per_group
Definition: ext2_internal.h:54
uint32_t s_feature_ro_compat
Definition: ext2_internal.h:75
uint32_t i_osd2[3]
Definition: ext2_internal.h:158
struct _ext2_fs_instance_t ext2_fs_instance_t
Instance de FS Ext2.
uint32_t bg_inode_bitmap
Definition: ext2_internal.h:119
dentry_t * ext2_getroot(struct _fs_instance_t *instance)
Definition: ext2_functions.c:375
Definition: vfs.h:104
blkdev_read_t read_data
Definition: ext2_internal.h:223
Definition: vga_modes.h:37
Definition: fd_types.h:91
uint32_t s_checkinterval
Definition: ext2_internal.h:64
struct directories_t * next
Definition: ext2_internal.h:188
uint32_t i_block[15]
Definition: ext2_internal.h:153
int ext2_mkdir(inode_t *dir, dentry_t *dentry, mode_t mode)
Création d'un dossier.
Definition: ext2_functions.c:100
uint16_t s_minor_rev_level
Definition: ext2_internal.h:62
uint32_t i_flags
Definition: ext2_internal.h:151
Definition: ext2_internal.h:131