X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/5be90ccccd441b1a38dbbf4fc99c7375cede8d8d..96e23fa3c6eabf8a6efebac24b740c5d4a2a1050:/lunaix-os/kernel/process.c diff --git a/lunaix-os/kernel/process.c b/lunaix-os/kernel/process.c index 4d6a77e..086a5e3 100644 --- a/lunaix-os/kernel/process.c +++ b/lunaix-os/kernel/process.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -176,6 +177,17 @@ __mark_region(uintptr_t start_vpn, uintptr_t end_vpn, int attr) } } +void +__copy_fdtable(struct proc_info* pcb) +{ + for (size_t i = 0; i < VFS_MAX_FD; i++) { + struct v_fd* fd = __current->fdtable->fds[i]; + if (!fd) + continue; + vfs_dup_fd(fd, &pcb->fdtable->fds[i]); + } +} + pid_t dup_proc() { @@ -184,7 +196,7 @@ dup_proc() pcb->intr_ctx = __current->intr_ctx; pcb->parent = __current; - memcpy(pcb->fdtable, __current->fdtable, sizeof(struct v_fdtable)); + __copy_fdtable(pcb); region_copy(&__current->mm.regions, &pcb->mm.regions); setup_proc_mem(pcb, PD_REFERENCED);