Add a kern_close() so that the ABIs can close a file descriptor w/o having

to populate a close_args struct and change some of the places that do.
This commit is contained in:
John Baldwin 2006-07-08 20:03:39 +00:00
parent c68b315699
commit c1cccebe8b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=160190
4 changed files with 14 additions and 11 deletions

View File

@ -705,9 +705,6 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
struct sockaddr * __restrict name;
socklen_t * __restrict anamelen;
} */ bsd_args;
struct close_args /* {
int fd;
} */ c_args;
int error, fd;
if ((error = copyin(args, &linux_args, sizeof(linux_args))))
@ -724,8 +721,7 @@ linux_accept(struct thread *td, struct linux_accept_args *args)
if (linux_args.addr) {
error = linux_sa_put(PTRIN(linux_args.addr));
if (error) {
c_args.fd = td->td_retval[0];
(void)close(td, &c_args);
(void)kern_close(td, td->td_retval[0]);
return (error);
}
}

View File

@ -52,7 +52,7 @@
#include <sys/socket.h>
#include <sys/socketvar.h>
#include <sys/stat.h>
#include <sys/sysproto.h>
#include <sys/syscallsubr.h>
#include <sys/systm.h>
#include <sys/un.h>
#include <sys/unpcb.h>
@ -77,10 +77,8 @@ portal_closefd(td, fd)
int fd;
{
int error;
struct close_args ua;
ua.fd = fd;
error = close(td, &ua);
error = kern_close(td, fd);
/*
* We should never get an error, and there isn't anything
* we could do if we got one, so just print a message.

View File

@ -973,12 +973,20 @@ close(td, uap)
struct thread *td;
struct close_args *uap;
{
return (kern_close(td, uap->fd));
}
int
kern_close(td, fd)
struct thread *td;
int fd;
{
struct filedesc *fdp;
struct file *fp;
int fd, error;
int error;
int holdleaders;
fd = uap->fd;
error = 0;
holdleaders = 0;
fdp = td->td_proc->p_fd;

View File

@ -68,6 +68,7 @@ int kern_clock_gettime(struct thread *td, clockid_t clock_id,
struct timespec *ats);
int kern_clock_settime(struct thread *td, clockid_t clock_id,
struct timespec *ats);
int kern_close(struct thread *td, int fd);
int kern_connect(struct thread *td, int fd, struct sockaddr *sa);
int kern_eaccess(struct thread *td, char *path, enum uio_seg pathseg,
int flags);