4444#define L_DCHK 0x0004
4545#define L_NDCHK 0x0008
4646
47+ #define F_OK 0x0000
48+ #define R_OK 0x0004
49+ #define W_OK 0x0002
50+ #define X_OK 0x0001
51+
4752#define ALIGN_UP (value , alignment ) (((value) + (alignment) - 1) & ~((alignment) - 1))
4853
4954typedef enum { UNDEF , EFILE , DIRECTORY , LINK , CHAR_DEV , PIPE } file_type_t ;
@@ -66,6 +71,7 @@ typedef struct {
6671 int (* readlink ) (inode * , char * , size_t );
6772 int (* link ) (inode * , char * , inode * );
6873 int (* rename ) (inode * , inode * , const char * , inode * , const char * );
74+ int (* rmdir ) (inode * , inode * );
6975} inode_operations ;
7076
7177typedef struct {
@@ -77,16 +83,18 @@ typedef struct {
7783 int (* getdents ) (inode * , file * , void * , size_t );
7884 int (* fstat ) (inode * , file * , stat * );
7985 int (* ioctl ) (inode * , file * , uint64_t , uint64_t );
86+ int (* fsync ) (file * );
8087} file_operations ;
8188
8289struct inode {
83- uint64_t i_no , i_sz , i_cnt ;
90+ uint64_t i_no , i_sz , i_cnt , i_uid , i_gid ;
8491 void * i_pvt ;
8592 void * i_fsinfo ;
8693 inode_operations * i_iops ;
8794 file_operations * i_fops ;
8895 file_type_t i_type ;
8996 inode * i_parent ;
97+ uint16_t i_perms ;
9098 union {
9199 chardev_info_t * chardev_info ;
92100 ramfs_info_t * ramfs_info ;
@@ -107,47 +115,58 @@ int lookup_inode_by_path (const char* path, inode* proc_root, inode* proc_cwd,
107115int resolve_parent_and_childname (char * path , inode * proc_root , inode * proc_cwd ,
108116 inode * * result_parent , char * * result_childname );
109117
110- int do_mkdir ( char * dirname , inode * * result , inode * parent );
118+ int do_access ( const char * path , uint8_t flags );
111119int do_chdir (const char * path );
112- int do_getcwd (char * buf , size_t size );
113- int do_create (char * filename , inode * * result , inode * parent );
114- int do_unlink (const char * path );
115- int do_rename (const char * old , const char * new );
116-
117- int do_read (struct file * f , void * buf , size_t size );
118- int do_seek (struct file * f , size_t offset , int whence );
119- int do_write (struct file * f , void * buf , size_t size );
120- int do_open (inode * file , struct file * dest_fd );
120+ int do_chmod (const char * path , uint16_t mode );
121+ int do_chown (const char * path , uint64_t uid , uint64_t gid );
122+ int do_chroot (const char * path );
121123int do_close (struct file * fd );
122- int do_getdents ( struct file * f , void * buf , size_t count );
124+ int do_create ( char * filename , inode * * result , inode * parent );
123125int do_fstat (struct file * fd , stat * buf );
124- int do_lstat (const char * restrict path , stat * restrict buf );
125- int do_stat (const char * restrict path , stat * restrict buf );
126+ int do_fsync (struct file * fd );
127+ int do_getcwd (char * buf , size_t size );
128+ int do_getdents (struct file * f , void * buf , size_t count );
126129int do_ioctl (struct file * fd , uint64_t req , uint64_t arg );
127130int do_link (const char * oldpath , const char * newpath );
128- int do_symlink (const char * restrict target , const char * restrict linkpath );
131+ int do_lstat (const char * restrict path , stat * restrict buf );
132+ int do_mkdir (char * dirname , inode * * result , inode * parent );
133+ int do_open (inode * file , struct file * dest_fd );
134+ int do_read (struct file * f , void * buf , size_t size );
129135int do_readlink (const char * path , char * buf , size_t bufsz );
136+ int do_rename (const char * old , const char * new );
137+ int do_rmdir (const char * path );
138+ int do_seek (struct file * f , size_t offset , int whence );
139+ int do_stat (const char * restrict path , stat * restrict buf );
140+ int do_symlink (const char * restrict target , const char * restrict linkpath );
141+ int do_unlink (const char * path );
142+ int do_write (struct file * f , void * buf , size_t size );
130143
131- uint64_t sys_read (uint64_t fd , uint64_t buf , uint64_t size );
132- uint64_t sys_write (uint64_t fd , uint64_t buf , uint64_t size );
133- uint64_t sys_seek (uint64_t fd , uint64_t offset , uint64_t whence );
134- uint64_t sys_open (uint64_t filename_ptr , uint64_t flags , uint64_t mode );
135- uint64_t sys_close (uint64_t fd );
136- uint64_t sys_mkdir (uint64_t path , uint64_t mode );
144+ uint64_t sys_access (uint64_t path , uint64_t mode );
137145uint64_t sys_chdir (uint64_t path );
138- uint64_t sys_getdents (uint64_t fd , uint64_t buf , uint64_t count );
139- uint64_t sys_getcwd (uint64_t buf , uint64_t size );
146+ uint64_t sys_chmod (uint64_t path , uint64_t mode );
147+ uint64_t sys_chown (uint64_t path , uint64_t uid , uint64_t gid );
148+ uint64_t sys_chroot (uint64_t path );
149+ uint64_t sys_close (uint64_t fd );
150+ uint64_t sys_dup (uint64_t fd );
151+ uint64_t sys_dup2 (uint64_t oldfd , uint64_t newfd );
140152uint64_t sys_fstat (uint64_t fd , uint64_t buf );
141- uint64_t sys_lstat (uint64_t path , uint64_t buf );
142- uint64_t sys_stat (uint64_t path , uint64_t buf );
153+ uint64_t sys_fsync (uint64_t fd );
154+ uint64_t sys_getcwd (uint64_t buf , uint64_t size );
155+ uint64_t sys_getdents (uint64_t fd , uint64_t buf , uint64_t count );
143156uint64_t sys_ioctl (uint64_t fd , uint64_t req , uint64_t arg );
144157uint64_t sys_link (uint64_t oldpath , uint64_t newpath );
145- uint64_t sys_unlink (uint64_t path );
146- uint64_t sys_symlink (uint64_t target , uint64_t linkpath );
158+ uint64_t sys_lstat (uint64_t path , uint64_t buf );
159+ uint64_t sys_mkdir (uint64_t path , uint64_t mode );
160+ uint64_t sys_open (uint64_t filename_ptr , uint64_t flags , uint64_t mode );
161+ uint64_t sys_read (uint64_t fd , uint64_t buf , uint64_t size );
147162uint64_t sys_readlink (uint64_t path , uint64_t buf , uint64_t bufsz );
148- uint64_t sys_dup (uint64_t fd );
149- uint64_t sys_dup2 (uint64_t oldfd , uint64_t newfd );
150163uint64_t sys_rename (uint64_t old , uint64_t new );
164+ uint64_t sys_rmdir (uint64_t path );
165+ uint64_t sys_seek (uint64_t fd , uint64_t offset , uint64_t whence );
166+ uint64_t sys_stat (uint64_t path , uint64_t buf );
167+ uint64_t sys_symlink (uint64_t target , uint64_t linkpath );
168+ uint64_t sys_unlink (uint64_t path );
169+ uint64_t sys_write (uint64_t fd , uint64_t buf , uint64_t size );
151170
152171inode * get_absolute_root (void );
153172void init_vfs (inode * absolute_root );
0 commit comments