compiling, but untested dup

This commit is contained in:
kaashoek 2006-08-20 03:33:01 +00:00
parent 16083d4462
commit f18ab5c04e
3 changed files with 24 additions and 12 deletions

1
defs.h
View file

@ -94,7 +94,6 @@ int fd_read(struct fd *fd, char *addr, int n);
int fd_write(struct fd *fd, char *addr, int n);
int fd_stat(struct fd *fd, struct stat *);
void fd_incref(struct fd *fd);
int fd_dup(struct fd *fd);
// ide.c
void ide_init(void);

6
fd.c
View file

@ -149,9 +149,3 @@ fd_incref(struct fd *fd)
fd->ref++;
release(&fd_table_lock);
}
int
fd_dup(struct fd *fd)
{
return -1;
}

View file

@ -402,8 +402,8 @@ int
sys_dup(void)
{
struct proc *cp = curproc[cpu()];
uint fd;
int r;
uint fd, ufd1;
struct fd *fd1;
if(fetcharg(0, &fd) < 0)
return -1;
@ -411,8 +411,27 @@ sys_dup(void)
return -1;
if(cp->fds[fd] == 0)
return -1;
r = fd_dup (cp->fds[fd]);
return r;
if (cp->fds[fd]->type != FD_PIPE && cp->fds[fd]->type != FD_FILE)
return -1;
if ((fd1 = fd_alloc()) == 0) {
return -1;
}
if ((ufd1 = fd_ualloc()) < 0) {
fd_close(fd1);
return -1;
}
fd1->type = cp->fds[fd]->type;
fd1->readable = cp->fds[fd]->readable;
fd1->writeable = cp->fds[fd]->writeable;
if (cp->fds[fd]->type == FD_FILE) {
fd1->ip = cp->fds[fd]->ip;
iincref(fd1->ip);
} else if (cp->fds[fd]->type == FD_PIPE) {
fd1->pipe = cp->fds[fd]->pipe;
}
fd1->off = cp->fds[fd]->off;
return ufd1;
}
int