diff options
author | Anton Kling <anton@kling.gg> | 2024-07-04 23:03:16 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-07-05 12:46:50 +0200 |
commit | 6bf371cc35c11890ab18c32aabd11bf8a816e574 (patch) | |
tree | 00df8f66ec65fc8a59aa315ef90be91cadd64cb5 /kernel/fs | |
parent | 59893c116e9e4e5dd04c24c0ba2fd06fe1936500 (diff) |
TCP: Add back support for listening on a socket
Diffstat (limited to 'kernel/fs')
-rw-r--r-- | kernel/fs/ext2.c | 4 | ||||
-rw-r--r-- | kernel/fs/shm.c | 9 | ||||
-rw-r--r-- | kernel/fs/tmpfs.c | 4 | ||||
-rw-r--r-- | kernel/fs/vfs.c | 6 | ||||
-rw-r--r-- | kernel/fs/vfs.h | 6 |
5 files changed, 17 insertions, 12 deletions
diff --git a/kernel/fs/ext2.c b/kernel/fs/ext2.c index a61d5f2..c8c8074 100644 --- a/kernel/fs/ext2.c +++ b/kernel/fs/ext2.c @@ -742,7 +742,7 @@ vfs_inode_t *ext2_open(const char *path) { } return vfs_create_inode( - inode_num, type, NULL, NULL, 1 /*is_open*/, NULL /*internal_object*/, + inode_num, type, NULL, NULL, 1 /*is_open*/, 0, NULL /*internal_object*/, file_size, ext2_open, ext2_create_file, ext2_read, ext2_write, ext2_close, ext2_create_directory, NULL /*get_vm_object*/, ext2_truncate /*truncate*/, ext2_stat, NULL /*send_signal*/, NULL /*connect*/); @@ -957,7 +957,7 @@ vfs_inode_t *ext2_mount(void) { } vfs_inode_t *inode = vfs_create_inode( 0 /*inode_num*/, 0 /*type*/, 0 /*has_data*/, 0 /*can_write*/, - 0 /*is_open*/, NULL /*internal_object*/, 0 /*file_size*/, ext2_open, + 0 /*is_open*/, 0, NULL /*internal_object*/, 0 /*file_size*/, ext2_open, ext2_create_file, ext2_read, ext2_write, ext2_close, ext2_create_directory, NULL /*get_vm_object*/, ext2_truncate /*truncate*/, ext2_stat, NULL /*send_signal*/, NULL /*connect*/); diff --git a/kernel/fs/shm.c b/kernel/fs/shm.c index 8fcb64c..45f16f4 100644 --- a/kernel/fs/shm.c +++ b/kernel/fs/shm.c @@ -87,10 +87,11 @@ int shm_open(const char *name, int oflag, mode_t mode) { } vfs_inode_t *inode = vfs_create_inode( - 0 /*inode_num*/, 0 /*type*/, NULL, NULL, 1 /*is_open*/, internal_object, - 0 /*file_size*/, NULL /*open*/, NULL /*create_file*/, shm_read, shm_write, - NULL /*close*/, NULL /*create_directory*/, shm_get_vm_object, - shm_ftruncate, NULL /*stat*/, NULL /*send_signal*/, NULL /*connect*/); + 0 /*inode_num*/, 0 /*type*/, NULL, NULL, 1 /*is_open*/, 0, + internal_object, 0 /*file_size*/, NULL /*open*/, NULL /*create_file*/, + shm_read, shm_write, NULL /*close*/, NULL /*create_directory*/, + shm_get_vm_object, shm_ftruncate, NULL /*stat*/, NULL /*send_signal*/, + NULL /*connect*/); vfs_fd_t *fd_ptr; int fd = vfs_create_fd(oflag, mode, 0 /*is_tty*/, inode, &fd_ptr); diff --git a/kernel/fs/tmpfs.c b/kernel/fs/tmpfs.c index d418e2c..2ce8ece 100644 --- a/kernel/fs/tmpfs.c +++ b/kernel/fs/tmpfs.c @@ -55,7 +55,7 @@ void dual_pipe(int fd[2]) { int is_open = 1; void *internal_object = pipe; vfs_inode_t *inode = vfs_create_inode( - 0 /*inode_num*/, 0 /*type*/, tmp_has_data, tmp_can_write, is_open, + 0 /*inode_num*/, 0 /*type*/, tmp_has_data, tmp_can_write, is_open, 0, internal_object, 0 /*file_size*/, NULL /*open*/, NULL /*create_file*/, tmp_read, tmp_write, tmp_close, NULL /*create_directory*/, NULL /*get_vm_object*/, NULL /*truncate*/, NULL /*stat*/, @@ -86,7 +86,7 @@ void pipe(int fd[2]) { int is_open = 1; void *internal_object = pipe; vfs_inode_t *inode = vfs_create_inode( - 0 /*inode_num*/, 0 /*type*/, tmp_has_data, tmp_can_write, is_open, + 0 /*inode_num*/, 0 /*type*/, tmp_has_data, tmp_can_write, is_open, 0, internal_object, 0 /*file_size*/, NULL /*open*/, NULL /*create_file*/, tmp_read, tmp_write, tmp_close, NULL /*create_directory*/, NULL /*get_vm_object*/, NULL /*truncate*/, NULL /*stat*/, diff --git a/kernel/fs/vfs.c b/kernel/fs/vfs.c index 03352c4..65be4aa 100644 --- a/kernel/fs/vfs.c +++ b/kernel/fs/vfs.c @@ -27,8 +27,9 @@ vfs_fd_t *get_vfs_fd(int fd, process_t *p) { vfs_inode_t *vfs_create_inode( int inode_num, int type, int (*has_data)(vfs_inode_t *inode), - int (*can_write)(vfs_inode_t *inode), u8 is_open, void *internal_object, - u64 file_size, vfs_inode_t *(*open)(const char *path), + int (*can_write)(vfs_inode_t *inode), u8 is_open, int internal_object_type, + void *internal_object, u64 file_size, + vfs_inode_t *(*open)(const char *path), int (*create_file)(const char *path, int mode), int (*read)(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd), int (*write)(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd), @@ -46,6 +47,7 @@ vfs_inode_t *vfs_create_inode( r->_has_data = has_data; r->_can_write = can_write; r->is_open = is_open; + r->internal_object_type = internal_object_type; r->internal_object = internal_object; r->file_size = file_size; r->open = open; diff --git a/kernel/fs/vfs.h b/kernel/fs/vfs.h index 3bb7f74..a39982d 100644 --- a/kernel/fs/vfs.h +++ b/kernel/fs/vfs.h @@ -49,6 +49,7 @@ struct vfs_inode { int (*_has_data)(vfs_inode_t *iinode); int (*_can_write)(vfs_inode_t *iinode); u8 is_open; + int internal_object_type; void *internal_object; u64 file_size; vfs_inode_t *(*open)(const char *path); @@ -84,8 +85,9 @@ int vfs_chdir(const char *path); int vfs_fstat(int fd, struct stat *buf); vfs_inode_t *vfs_create_inode( int inode_num, int type, int (*has_data)(vfs_inode_t *inode), - int (*can_write)(vfs_inode_t *inode), u8 is_open, void *internal_object, - u64 file_size, vfs_inode_t *(*open)(const char *path), + int (*can_write)(vfs_inode_t *inode), u8 is_open, int internal_object_type, + void *internal_object, u64 file_size, + vfs_inode_t *(*open)(const char *path), int (*create_file)(const char *path, int mode), int (*read)(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd), int (*write)(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd), |