diff --git a/sys/fs/vfs/file.c b/sys/fs/vfs/file.c index 5f4b124..f875f9f 100644 --- a/sys/fs/vfs/file.c +++ b/sys/fs/vfs/file.c @@ -391,6 +391,9 @@ return (NULL); } + /* XXX - Temp */ + memset(tmpFd, 0x0, sizeof(fileDescriptor_t)); + path = file; if (path[0] == "." && path[1] == '\0') @@ -520,6 +523,7 @@ spinLock(&fdTable_lock); for (tmpFd = fdTable; tmpFd != 0x0; tmpFd = tmpFd->next) { + kprintf("(tFd: 0x%X, tFdN: 0x%X, fd: 0x%X)", tmpFd, tmpFd->next, fd); if (tmpFd == fd) { if (tmpFd->prev) tmpFd->prev->next = tmpFd->next; @@ -529,6 +533,8 @@ if (tmpFd == fdTable) fdTable = tmpFd->next; + kprintf("(NfdT: 0x%X]", fdTable); + systemVitals->openFiles--; spinUnlock(&fdTable_lock); if (tmpFd->buffer != NULL) diff --git a/sys/kernel/vfs_calls.c b/sys/kernel/vfs_calls.c index 253a757..548e287 100644 --- a/sys/kernel/vfs_calls.c +++ b/sys/kernel/vfs_calls.c @@ -114,6 +114,7 @@ int sys_close(struct thread *td, struct sys_close_args *args) { struct file *fd = 0x0; + getfd(td, &fd, args->fd); kprintf("[sC:%i:0x%X:0x%X]", args->fd, fd, fd->fd); @@ -127,7 +128,10 @@ kprintf("Can't close pipes yet"); break; default: - if (!fclose(fd->fd)) + kprintf("[CLS: %i:0x%X]", args->fd, fd); + if (args->fd < 3) + td->td_retval[0] = 0; + else if (!fclose(fd->fd)) td->td_retval[0] = -1; else { fdestroy(td, fd, args->fd); @@ -154,7 +158,10 @@ switch (fd->fd_type) { case 3: /* XXX - Pipe2 Handling */ nbytes = (args->nbyte - (1024 - fd->fd->offset) < 0) ? args->nbyte : (1024 - fd->fd->offset); + kprintf("[unb: %i, nbs: %i, bf: 0x%X]", args->nbyte, nbytes, fd->fd->buffer); kprintf("PR: [%i]", nbytes); + memcpy(args->buf, fd->fd->buffer + fd->fd->offset, nbytes); + fd->fd->offset += nbytes; td->td_retval[0] = nbytes; break; default: @@ -282,8 +289,8 @@ switch (fd->fd_type) { case 3: /* XXX - Temp Pipe Stuff */ nbytes = (uap->nbyte - (1024 - fd->fd->offset) < 0) ? uap->nbyte : (1024 - fd->fd->offset); - kprintf("[unb: %i, nbs: %i]", uap->nbyte, nbytes); - memcpy(fd->fd->buffer, uap->buf, nbytes); + kprintf("[unb: %i, nbs: %i, bf: 0x%X]", uap->nbyte, nbytes, fd->fd->buffer); + memcpy(fd->fd->buffer + fd->fd->offset, uap->buf, nbytes); fd->fd->offset += nbytes; td->td_retval[0] = nbytes; kprintf("[PW: %i:%i]", nbytes, fd->fd->offset);