diff --git a/sys/arch/i386/fork.c b/sys/arch/i386/fork.c index 60f2b07..221d7fa 100644 --- a/sys/arch/i386/fork.c +++ b/sys/arch/i386/fork.c @@ -57,7 +57,9 @@ newProcess->pgrp = _current->pgrp; /* Copy File Descriptor Table */ - memcpy(newProcess->files, _current->files, sizeof(fileDescriptor_t *) * MAX_OFILES); + //memcpy(newProcess->files, _current->files, sizeof(fileDescriptor_t *) * MAX_OFILES); + for (int i = 3; i < 256; i++) + newProcess->td->o_files[i] = td->o_files[i]; /* Set Up Task State */ newProcess->tss.eip = td->frame->tf_eip; diff --git a/sys/kernel/vfs_calls.c b/sys/kernel/vfs_calls.c index c4be073..94ce682 100644 --- a/sys/kernel/vfs_calls.c +++ b/sys/kernel/vfs_calls.c @@ -122,11 +122,17 @@ td->td_retval[0] = -1; } else { - if (!fclose(fd->fd)) - td->td_retval[0] = -1; - else { - fdestroy(td, fd, args->fd); - td->td_retval[0] = 0; + switch (fd->fd_type) { + case 3: + kprintf("Can't close pipes yet"); + break; + default: + if (!fclose(fd->fd)) + td->td_retval[0] = -1; + else { + fdestroy(td, fd, args->fd); + td->td_retval[0] = 0; + } } } return (0); @@ -290,7 +296,6 @@ td->td_retval[0] = uap->nbyte; } - } return (0x0); } @@ -361,7 +366,6 @@ nfp1->fd_type = 3; nfp2->fd_type = 3; - args->fildes[0] = fd1; args->fildes[1] = fd2;