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:
parent
df27227bab
commit
e09e5b52db
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user